データベースと単純な CTE のセットアップ
この最初のステップでは、データベース環境をセットアップし、シンプルな共通テーブル式 (CTE: Common Table Expression) を定義します。CTE は WITH 句を使用して定義され、単一のクエリの実行期間のみ存在する一時的なビューとして機能します。これにより、複雑なクエリの読みやすさと管理性が向上します。
まず、デスクトップからターミナルを開きます。
root ユーザーとして MySQL サーバーに接続します。この実験 (Lab) 環境では、パスワードなしで接続するために sudo を使用できます。
sudo mysql -u root
接続すると、MySQL プロンプト (mysql>) が表示されます。次に、labex_db という名前のデータベースを作成し、それに切り替えます。
CREATE DATABASE IF NOT EXISTS labex_db;
USE labex_db;
次に、employees テーブルを作成し、サンプルデータを挿入します。このテーブルには、部署や給与を含む従業員の基本情報が格納されます。
CREATE TABLE IF NOT EXISTS employees (
employee_id INT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
department VARCHAR(50),
salary DECIMAL(10, 2)
);
INSERT INTO employees (employee_id, first_name, last_name, department, salary) VALUES
(1, 'John', 'Doe', 'Sales', 60000.00),
(2, 'Jane', 'Smith', 'Marketing', 75000.00),
(3, 'Robert', 'Jones', 'Sales', 55000.00),
(4, 'Emily', 'Brown', 'IT', 90000.00),
(5, 'Michael', 'Davis', 'Marketing', 70000.00);
テーブルの準備ができたので、'Sales' 部署の従業員のみを選択するシンプルな CTE を定義しましょう。
WITH SalesEmployees AS (
SELECT employee_id, first_name, last_name, salary
FROM employees
WHERE department = 'Sales'
)
SELECT * FROM SalesEmployees;
このクエリの内訳を見てみましょう。
WITH SalesEmployees AS (...): これは SalesEmployees という名前の CTE を定義します。
- 括弧内のクエリは、
department が 'Sales' である employees テーブルから従業員を選択します。
SELECT * FROM SalesEmployees;: これは、一時的な SalesEmployees 結果セットからすべてのデータを取得するメインクエリです。
Sales 部署の従業員のみが表示され、以下の出力が表示されるはずです。
+-------------+------------+-----------+----------+
| employee_id | first_name | last_name | salary |
+-------------+------------+-----------+----------+
| 1 | John | Doe | 60000.00 |
| 3 | Robert | Jones | 55000.00 |
+-------------+------------+-----------+----------+
2 rows in set (0.00 sec)
これにより、最初の CTE が正しく機能していることが確認できます。次のステップのために、MySQL シェルに留まってください。