sql テーブル結合

SQL データアナリティクス

データアナリストがSQLのテーブル結合について解説!

皆さんこんにちは。データアナリストのりゅうです。

前回はSQLとは?DBとは?といったことから基礎的なクエリの作り方について解説させていただきました。

前回の記事 → SQLとは?DBとは?

今回は少し複雑なクエリを書くために、デーブル結合についてやり方も含め解説していきます!

SQLのテーブル結合とは

SQLにおけるテーブル結合とは、読んで字のごとく「複数のテーブルを繋げて1つのテーブルにする作業」のことです。

前回使用したテーブルを例として用いて解説します。

データベース human2

▽studentsテーブル

これに加えて下記のようなcountriesテーブルを用意しました。

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 countries join

実行すると上の画像のような形でデータが帰ってきます。元々の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」に変更しただけのものです。

これでどのような結果が表示されるか見てみましょう。

students countries left join

今度はcountriesテーブルには存在しないレコードも残っていることがわかります。

LEFT JOINと言うくらいなので、左側のテーブルを基準に新しいテーブルを結合させる作業のことです。

countriesテーブルにはShinやAiのデータは存在しないためNULL(データが存在しないこと)と表示されています。

LEFT JOINが分かれば、RIGHT JOINも同様で、FULL JOINとはどちらかのテーブルに存在すれば表示させるという結合の仕方です。

交差結合(CROSS JOIN)

最後に交差結合についてですが、こちらは実戦ではほぼ使うことがありませんので詳細は割愛させていただきます。

イメージとしては存在しうる全ての組み合わせを一覧で取得するための結合で下記画像のようなイメージです。

students countries cross join

SQLのテーブル結合まとめ

今回は複数のテーブルを結合するやり方と種類について解説させていただきました。

ほぼ全てのクエリに登場するといってもいいくらいテーブル結合は使う頻度が高いので、イメージと合わせてマスターするようにしましょう!

最後まで読んでいただきありがとうございました!

-SQL, データアナリティクス
-, ,

© 2024 Ryu'sHelloWorld Powered by AFFINGER5