3.5 テーブルの結合
employees
テーブルには部署ID が含まれていますが, IDでは誰がどの部署に属しているのか一見してわかりにくいです. そこで部署ID を使って部署の名称の一覧がある departments
テーブルと紐付ける操作が必要になります. これを結合といいます. まずは, INNER JOIN
句と ON
句を使って結合します. INNER JOIN
は内部結合と訳されます.
SELECT employees.id, employees.name,
AS department
departments.name FROM <DB>.employees
INNER JOIN <DB>.departments
ON employees.department_id = departments.id
;
INNER JOIN
句で結合するもう1つのテーブルを指定し, ON
句で結合の条件を指定しています. これらの構文の説明は一旦後回しにして, それ以外の新しい構文について説明します. SELECT
句で列名を指定するときに employees.id
, departments.name
といった見慣れない構文があります. これは結合前のテーブルのどれから取得する列なのかを明示的にする構文です. たとえば, 今回は employees
テーブルと departments
テーブルのどちらにも id
という列があるので, 単に SELECT id
と書いた場合, どちらのテーブルの id
列であるのか特定できず, エラーになります. そこで, <テーブル名>.<列名>
という書き方が用いられます. AS
で departments.name
を department
に変更しているのも衝突を避けるためです. 衝突がない場合はテーブル名を省略することができます. テーブル名が長かったり, 指定したい列が多かったりすると, この構文は読みづらいです. そこで, テーブルの別名 (エイリアス) という機能を使います.
SELECT t1.id, t1.name, t2.name AS department
FROM <DB>.employees t1
INNER JOIN <DB>.departments t2
ON t1.department_id = t2.id
;
FROM
句でテーブル名を指定した後に適当な単語を書くと, SELECT
句など列を指定する句でテーブル名として使えます. そして元のテーブル名は使えなくなります. INNER JOIN
句の後にある t2
も同様に, departments
テーブルの別名を意味します.