皆さんこんにちは。合同会社StudioData代用のRyumaと申します。
前回はSQLとは?DBとは?といったことから基礎的なクエリの作り方について解説させていただきました。
前回の記事 → SQLとは?DBとは?
今回は少し複雑なクエリを書くために、デーブル結合についてやり方も含め解説していきます!
SQLのテーブル結合とは
SQLにおけるテーブル結合とは、読んで字のごとく「複数のテーブルを繋げて1つのテーブルにする作業」のことです。
前回使用したテーブルを例として用いて解説します。
▽studentsテーブル
これに加えて下記のようなcountriesテーブルを用意しました。
▽countriesテーブル
これを結合させていきます。まずはSQLの例をお見せします。
SELECT
*
FROM
students
JOIN
countries
ON
students.id = countries.user_id
このクエリが実行される順番は「FROM」→「JOIN/ON」→「SELECT」です。
FROMの箇所は前回と同じで「students」テーブルをまず見に行きます。
その次に「JOIN countries」で「studentsテーブルにcountriesテーブルを結合するよ」と命令します。
そして、どの行にどのような形で結合するかを決めるために「ON students.id = countries.user_id」を追加します。
7,8行目の意味は「studentsテーブルのidカラムとcountriesテーブルのuser_idが等しくなるように結合してね」となります。
最後の「SELECT *」でデータを取得します。(SELECT *とすると用意されたカラムを全て取得する)
実行すると上の画像のような形でデータが帰ってきます。元々のstudentsテーブルにuser_idから右の列にcountriesテーブルのカラムが追加されているのが分かります。
しかし、countriesテーブルにはなかった、ShinやTaroのレコードが消えていることが分かると思います。
実は今行ったテーブル結合は「内部結合」というもので結合の種類のうちの1つなのです。
他にはどのようなものがあるのかを次の章で解説します。
テーブル結合の注意点として、結合したテーブルに同じ名前のカラムがある際に、どちらのテーブルのカラムを取得するかを指定する必要があるということです。
例えば上の例だと「name」というカラムが2つできてしまいます。
そのため、「students.name」なのか「countries.name」なのかを書いてあげましょう。(「テーブル名.カラム名」という書き方)
)
テーブル結合の種類
テーブル結合には大きく分けて3種類あり、以下の通りです。
テーブル結合の種類
- 内部結合(INNER JOIN)
- 外部結合(LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN)
- 交差結合(CROSS JOIN)
内部結合(INNER JOIN)
先ほど例を使って見せたテーブル結合の種類で「INNER JOIN(JOINと省略可)」を使います。
どのような結合かと言いますと、2つのテーブルに共通するもの同士を結合させ、両方のテーブルに存在するデータのみ表示させます。
上の例でcountriesテーブルに存在しないレコードが削除されていたのはこのためです。
外部結合(OUTER JOIN)
外部結合の中にも3種類あり、LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOINの3つです。
一番実戦で使われる「LEFT OUTER JOIN(LEFT JOINと省略可)」を使って説明します。
SELECT
*
FROM
students
LEFT JOIN
countries
ON
students.id = countries.user_id
これは先ほどのクエリの5行目を「JOIN」から「LEFT JOIN」に変更しただけのものです。
これでどのような結果が表示されるか見てみましょう。
今度はcountriesテーブルには存在しないレコードも残っていることがわかります。
LEFT JOINと言うくらいなので、左側のテーブルを基準に新しいテーブルを結合させる作業のことです。
countriesテーブルにはShinやAiのデータは存在しないためNULL(データが存在しないこと)と表示されています。
LEFT JOINが分かれば、RIGHT JOINも同様で、FULL JOINとはどちらかのテーブルに存在すれば表示させるという結合の仕方です。
交差結合(CROSS JOIN)
最後に交差結合についてですが、こちらは実戦ではほぼ使うことがありませんので詳細は割愛させていただきます。
イメージとしては存在しうる全ての組み合わせを一覧で取得するための結合で下記画像のようなイメージです。
SQLのテーブル結合まとめ
今回は複数のテーブルを結合するやり方と種類について解説させていただきました。
ほぼ全てのクエリに登場するといってもいいくらいテーブル結合は使う頻度が高いので、イメージと合わせてマスターするようにしましょう!
最後まで読んでいただきありがとうございました!