CodeGym /コース /SQL SELF /データ結合入門: JOIN

データ結合入門: JOIN

SQL SELF
レベル 11, レッスン 0
使用可能

今日はリレーショナルデータベースで一番面白いテーマの一つ、JOINを使って複数のテーブルからデータを結合する話に入るよ。これはマジで強力なツールで、複雑な関係や分析を作る扉を開いてくれるんだ。

イメージしてみて、君のデータベースは巨大なコミックみたいなもので、バラバラのテーブルがそれぞれコマになってる。ストーリーを完成させるには、そのコマを繋げなきゃいけない。そこでJOINの出番!データ結合っていうのは、複数のテーブルから情報を引っ張ってきて、指定した条件で繋げるプロセスなんだ。

リレーショナルデータベースはテーブル同士の関係というコンセプトを中心に作られてる。それぞれのテーブルは特定のエンティティの情報を持ってて、もっと全体像を知りたい時は他のテーブルのデータと繋げたくなるよね。例えば:

  • studentsテーブルは学生のリスト。
  • coursesテーブルはコースのリスト。
  • enrollmentsテーブルは誰がどのコースを受けてるかを示してる。

どの学生がどのコースを受けてるか知りたかったら、これらのテーブルを繋げる必要がある。面接でもJOINを使いこなせるエンジニアは頼もしく見えるし、データ仕事で超重要なスキルなんだ。

JOINの主な種類

PostgreSQLにはいくつかのJOINの種類があって、それぞれ特定の用途に向いてる。難しい例で頭を悩ませる前に、ざっくり全体像を見てみよう:

JOINのタイプ 説明
INNER JOIN 両方のテーブルで一致する行だけ返す。
LEFT JOIN 左側のテーブルの全行と、右側は一致するものだけ返す。
RIGHT JOIN 右側のテーブルの全行と、左側は一致するものだけ返す。
FULL OUTER JOIN 両方のテーブルの全行を返して、一致しない部分はNULLで埋める。

どのJOINを使うかは、やりたいこと次第:

  • 両方のテーブルで一致するデータだけ欲しいならINNER JOINを使おう。
  • 片方のテーブルの全データを残して、もう片方は一致するものだけ欲しいならLEFT JOINかRIGHT JOINがいいよ。
  • 両方のテーブルの全データが欲しい(たとえ一致しなくても)ならFULL OUTER JOINを使おう。

じゃあ、これらのJOINを実際に使ってみよう!

例題 — 「誰がどのコース?」

例えば、こんな3つのテーブルがあるとする:

studentsテーブル

id name
1 Otto
2 Anna
3 Peter

coursesテーブル

id title
101 数学
102 英語

enrollmentsテーブル

student_id course_id
1 101
2 102

これらのテーブルはこんな感じで繋がってる:

  • studentsのidフィールドは学生のユニークID。
  • coursesのidフィールドはコースのユニークID。
  • enrollmentsテーブルのstudent_idとcourse_idカラムが学生とコースを繋げてる。

例えば、「どの学生がどのコースに登録してる?」って知りたいとする。

この答えはJOINで出せる。テーブル同士の関係を使って繋げていくよ:

  • studentsとenrollmentsをid = student_idで繋げる。
  • enrollmentsとcoursesをcourse_id = idで繋げる。

SQLクエリはこんな感じ:

SELECT students.name, courses.title
FROM enrollments
JOIN students ON enrollments.student_id = students.id
JOIN courses ON enrollments.course_id = courses.id;

このクエリがやってること:

  • FROM enrollments — 学生とコースを繋げるテーブルから始める。
  • JOIN students ON enrollments.student_id = students.id — 学生を結合して名前を取得。
  • JOIN courses ON enrollments.course_id = courses.id — コースを結合してタイトルを取得。

結果はこんな感じになる:

name title
Otto 数学
Anna 英語

注意してね:もし学生がどのコースにも登録してなかったら、結果に出てこないよ。なぜならJOINはデフォルトで厳密(INNER JOIN)だから。あとでLEFT JOINを使って、そういう学生も含める方法を説明するね。

もしこのクエリで分からないところがあっても大丈夫!少しずつ理解していくのが次のレクチャーの目標だから!

これって現実世界で何に使うの?

テーブルの繋げ方が分かったところで、リアルな話をしよう。ネットショップがどう動いてるか考えたことある?例えばスマホを選んで、他のユーザーのレビューが見れるよね。

  1. productsテーブルは商品の情報。
  2. reviewsテーブルはお客さんのレビュー。
  3. customersテーブルはお客さん自身の情報。

サイトでレビューを表示するには、products、reviews、customersのテーブルを結合しなきゃいけない。これがまさにJOINの実例だよ。

どこに気をつける?

次のレクチャーでJOINをもっと深掘りする前に、覚えておいてほしいポイントをいくつか:

  1. JOINの順番は大事。 例えばLEFT JOINは左側のテーブルの行を返すから、順番を変えると結果も変わるよ。
  2. 小さいテーブルで練習しよう。 最初は何百万行もあるテーブルは避けて。シンプルなクエリでも分かりやすさが大事!
  3. 関係を意識するクセをつけよう。 テーブルを大きな構造の一部として見るのに慣れると、JOINも自然に使えるようになるよ。

今日からSQLスペシャリストへの道が始まる!次のレクチャーではINNER JOINを使って2つのテーブルからデータを取り出す方法を学ぶよ。これはPostgreSQLを学ぶ上で大きな一歩になるはず!

2
タスク
SQL SELF, レベル 11, レッスン 0
ロック未解除
COALESCEを使って文字列のNULLを処理しよう
COALESCEを使って文字列のNULLを処理しよう
2
タスク
SQL SELF, レベル 11, レッスン 0
ロック未解除
NULLの処理付き平均価格の計算
NULLの処理付き平均価格の計算
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION