メインコンテンツにスキップ
モジュール 3 · レッスン 1 / 4コース内の 9/57~12 min
モジュールのレッスン (1/4)

2 つのテーブルを結合する: INNER JOIN

ここまでは、一度に 1 つのテーブルを読み取ってきました。しかし、現実の世界では、データは 複数の関連テーブルに分散: データセットでは、たとえば、それぞれ 従業員には、departments テーブルを指す department_id があります。見るために に参加する必要がある部門の 名前 (id だけではありません) テーブルが2つ。これを行うオペレーターは JOIN と呼ばれます。

基本的な構文

SQL
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 には両方の列が含まれます。

SQL
-- 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 で説明しました)。

SQL
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 も同様に機能します。

試してみてください

運動#sql.m3.l1.e1
試行回数: 0読み込み中…

Ingegneria 部門の各従業員について、名 (first_name)、姓 (last_name)、および部門の市区町村 (Departments.city) を表示します。 3 列、従業員ごとに 1 行。

エディターを読み込み中…
ヒントを表示

e.Department_id と d.id が等しい ON 条件を完了し、3 番目の列として d.city を選択します。

3 回の試行後に解決策が利用可能になります

復習演習

運動#sql.m3.l1.e2
試行回数: 0読み込み中…

ミラノに拠点を置く部門で働くすべての従業員の名 (first_name) と姓 (last_name) をリストします。部門名ではなく、Departments.city でフィルターします。

エディターを読み込み中…
ヒントを表示

前の演習と同じ JOIN ですが、部門名の代わりに d.city = 'Milano' でフィルターします。

3 回の試行後に解決策が利用可能になります