複数のテーブルを連結してデータを取得したい!!
そんなときに使うのが「JOIN」という命令です。これを使いこなせれば、できることが飛躍的に増えるでしょう。
しかし、この「JOIN」には、結合させる方式が複数存在します。大きく分けると3種類、細かく分けると6種類も存在するんです。
どうしてこんなにあるのでしょうか?
今回はその種類と違いに着目しつつ、JOINを解説していきます。
「JOIN」とは
「JOIN」とは、冒頭にも書きましたが複数のテーブルを結合したいときに使用する命令です。
テーブルを結合することで、ひとまとめにできるわけです!
そしてこの「JOIN」には大きく分けると3種類存在します。
- 内部結合
- 外部結合
- クロス結合
それぞれの違いと、コマンドの書き方を見ていくことにしましょう。
今回使用するテーブル
今回は以下の二つのテーブルを用意しました。
1つ目は、グループ名が入った”team”テーブルです。そして、もう1つは、所属する選手名が入った”user”テーブルです。
それぞれ、team_id カラムで関連付いています。
ここから先は、このテーブルを参考にJOINについて見ていきましょう。
「INNER JOIN」(内部結合)
まずは内部結合(INNER JOIN)です。
内部結合とは
内部結合とは、指定したカラム同士が関連性のある場合に要素を連結してくれる命令です。
言葉だけだとイメージが掴みづらいので見てみましょう。
使ってみる
今回は「team_id」カラムを軸に連結します。
実行命令:
SELECT * FROM team INNER JOIN user ON team.team_id = user.team_id;
実行結果:
team_id | name | id | team_id | name |
---|---|---|---|---|
101 | チームA | 1 | 101 | 山田 |
101 | チームA | 2 | 101 | 鈴木 |
102 | チームB | 3 | 102 | 中村 |
102 | チームB | 4 | 102 | 田中 |
103 | チームC | 5 | 103 | 加藤 |
“team”テーブルにある「チームD」が実行結果にはありません。
このように内部結合で連結すると、2つのテーブル間で関連性のないデータは出力されないのです。
どこで使うの?
おそらくJOINで一番使われるのが、この内部結合でしょう。関連性のある要素で組み合わせて、表示を行うこの方式は、テーブル同士を組み合わせて表示するのに一番適した方式と言えます。
「OUTER JOIN」(外部結合)
次は外部結合(OUTER JOIN)です。外部結合には、さらに3種類の結合方式が存在します。
とはいえ、先ほどの内部結合が理解できていれば理解するのは難しくありません。
外部結合には、3種類の結合方式があると言いました。その3種類がこちらです。
- LEFT OUTER JOIN
- RIGHT OUTER JOIN
- FULL OUTER JOIN
今回は代表して「LEFT OUTER JOIN」を使用してみます。
「LEFT OUTER JOIN」とは
LEFTとは左側、つまりJOINを挟んでいる左側のテーブルを指します。
テーブルA LEFT OUTER JOIN テーブルB
左側のテーブルを軸に情報を表示するのがLEFT OUTER JOINです。
内部結合では「関連性のある要素」が存在する場合にのみ表示を行っていました。
外部結合は、「関連性がなくても(左側のテーブルに)存在するレコード」を合わせて表示してくれるわけです。これも実際見てみた方が早いでしょう。
使ってみる
実行命令:
SELECT * FROM team LEFT OUTER JOIN user ON team.team_id = user.team_id;
実行結果:
team_id | name | id | team_id | name |
---|---|---|---|---|
101 | チームA | 1 | 101 | 山田 |
101 | チームA | 2 | 101 | 鈴木 |
102 | チームB | 3 | 102 | 中村 |
102 | チームB | 4 | 102 | 田中 |
103 | チームC | 5 | 103 | 加藤 |
104 | チームD | NULL | NULL | NULL |
内部結合との違いは関連要素の存在しない「チームD」が表示されていることです。このように、関連性がなくとも、左側のテーブルに、レコードとして存在する内容も合わせて表示してくれるわけです。
ただし、その際、関連するデータは無いので、結合したデータの情報は、ご覧の通りNULL表示となります。
どこで使うの?
今回のテーブルで言えば「グループを軸にした調査を行うとき」に有効でしょう。内部結合では表示できていなかったチームDを合わせて表示することができているため、チームDには誰も所属していないことが一目で分かるようになります。
「RIGHT OUTER JOIN」と「FULL OUTER JOIN」
LEFT OUTER JOINが分かってしまえば、あとは簡単です。
「RIGHT OUTER JOIN」はLEFTの逆、つまりJOINの右側のテーブルを軸に、処理を行う命令です。「FULL OUTER JOIN」はその両方を指すわけです。
ただし一つ注意点があります。「FULL OUTER JOIN」は環境によっては、使用できません。その点に注意しましょう。
(とは言っても「FULL OUTER JOIN」を使用するケースはほぼ無いと言えるので、大きな問題にはならないかと思いますが…)
まとめ
今回はJOINの違いについて見てきました。一番需要が高いのは内部結合でしょう。
JOINは強力なコマンドなので、ぜひ自分でも使ってみて、理解を深めてみてください!
コメント