モジュールのレッスン (1/4)
2 つのテーブルを結合する: INNER JOIN
ここまでは、一度に 1 つのテーブルを読み取ってきました。しかし、現実の世界では、データは
複数の関連テーブルに分散: データセットでは、たとえば、それぞれ
従業員には、departments テーブルを指す department_id があります。見るために
に参加する必要がある部門の 名前 (id だけではありません)
テーブルが2つ。これを行うオペレーターは JOIN と呼ばれます。
基本的な構文
SELECT columns
FROM table_a
JOIN table_b ON table_a.x = table_b.y;英語で読む: 「table_a を取得し、それぞれをペアリングして table_b をそれに接続します」
table_a.x が table_b.y" と等しい行。結果は新しい仮想です
table には両方の列が含まれます。
-- For each employee, also show the name of their department:
SELECT employees.first_name,
employees.last_name,
departments.name AS dipartimento
FROM employees
JOIN departments ON employees.department_id = departments.id;ON の後の部分は 結合条件 と呼ばれます。これは、
エンジン 「これら 2 つの行はほぼ同じものです。並べてください」。で
ほとんどの場合、主キーと外部キーが等しいことになります。
キー (ここでは departments.id および employees.department_id)。
内部結合の詳細
完全なキーワードは INNER JOIN ですが、JOIN 自体が標準です
同義語。 「内部」とは、両方に一致する行のみを意味します。
テーブルが返されます:
- 従業員が
department_id = NULLを持っている場合、その従業員は 表示されません 結果; - 部門に従業員がいない場合、結果には表示されません。
修飾された列名
2 つのテーブルに同じ名前の列がある場合 (ここでは両方とも id を持ち、
よく考えてみると、両方とも name を持っています)、どのテーブルを指定する必要があります
列は table.column と書くことによって取得されます。長い名前を繰り返さないようにするには、
エイリアスはよく使用されます (モジュール 2 で説明しました)。
SELECT e.first_name, e.last_name, d.name AS dipartimento
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id;AS はここでもオプションです。FROM employees e も同様に機能します。
試してみてください
Ingegneria 部門の各従業員について、名 (first_name)、姓 (last_name)、および部門の市区町村 (Departments.city) を表示します。 3 列、従業員ごとに 1 行。
ヒントを表示
e.Department_id と d.id が等しい ON 条件を完了し、3 番目の列として d.city を選択します。
3 回の試行後に解決策が利用可能になります
復習演習
ミラノに拠点を置く部門で働くすべての従業員の名 (first_name) と姓 (last_name) をリストします。部門名ではなく、Departments.city でフィルターします。
ヒントを表示
前の演習と同じ JOIN ですが、部門名の代わりに d.city = 'Milano' でフィルターします。
3 回の試行後に解決策が利用可能になります