テーブル結合
データベースのテーブルはそれぞれの情報単位で構築されているので、実際に利用するときには、テーブルを組み合わせることが多くなります。このテーブルを組み合わせる際に使われるのがテーブル結合文(INNER JOIN文、LEFT JOIN文やRIGHT JOIN文)です。
なんとなく感覚で使ってしまっていたので、その結果をまとめてみました。
次の2つのテーブルがあるとします。
品目ID | 品名 | 製造元ID |
---|---|---|
1 | 電源プラグ | 3 |
2 | 石ころ | null |
3 | 塗料 | 1 |
メーカーID | メーカー名 | 国 |
---|---|---|
1 | 株式会社A化学 | 日本 |
2 | B株式会社 | 日本 |
3 | 株式会社C電機 | 日本 |
この2つのテーブルを「製造元ID=メーカーID」の結合条件で、それぞれの方法で結合してみます。
INNER JOIN
SELECT 品目ID,品名,メーカー名 FROM 品目テーブル
INNER JOIN メーカーテーブル ON 製造元ID = メーカーID
「内部結合」と呼ばれます。2つのテーブルに共に存在するデータを抽出します。
品目ID | 品名 | メーカー名 |
---|---|---|
1 | 電源プラグ | 株式会社C電機 |
3 | 塗料 | 株式会社A化学 |
LEFT JOIN
SELECT 品目ID,品名,メーカー名 FROM 品目テーブル
LEFT JOIN メーカーテーブル ON 製造元ID = メーカーID
「外部結合」と呼ばれます。2つのテーブルで、接続条件の左側に書かれたテーブルを基準にデータを抽出します。したがって、左側に有って、右側に無いデータはnull値になります。
品目ID | 品名 | メーカー名 |
---|---|---|
1 | 電源プラグ | 株式会社C電機 |
2 | 石ころ | null |
3 | 塗料 | 株式会社A化学 |
RIGHT JOIN
SELECT 品目ID,品名,メーカー名 FROM 品目テーブル
RIGHT JOIN メーカーテーブル ON 製造元ID = メーカーID
「外部結合」と呼ばれます。2つのテーブルで、接続条件の右側に書かれたテーブルを基準にデータを抽出します。したがって、右側に有って、左側に無いデータはnull値になります。
品目ID | 品名 | メーカー名 |
---|---|---|
1 | 電源プラグ | 株式会社C電機 |
null | null | B株式会社 |
3 | 塗料 | 株式会社A化学 |
まとめ
2つのテーブルを結合したい場合、基になるテーブルがあって、そこに付随するテーブルを組み合わせたいパターンが多いと思います。
どちらかが基になるのですから、結合のだいたいは、LEFT JOIN文で片付いてしまうことでしょう。それでも、付随する情報が無いデータはいらないということもあるので、INNER JOIN文も利用しますが、実のところ、経験上いまだにRIGHT JOIN文の使いどころが見当たりません。文脈的に左から右へ繋がっていた方が読みやすいと感じるからです、なので、個人的にRIGHT JOINは、ほぼ利用していません。
とか書いてる最中に、こういう使い方があるかな・・・とか思いつくのですから面白いものです。