( New ) 新連載スタート!2人の会話形式でPythonを学ぶ「週末Pythonゆる講座」はこちら ▶▶

【SQL】JOIN|2つのテーブルを結合する

JOINとは?

JOIN(ジョイン)

結合する、(…を)接合する、つなぐ、取り付ける、結合させる、加わる、加入する、(…の)仲間になる、帰任する、一緒になる

Weblio英和辞書

SQLでの「JOIN」とは、「2つのデータテーブルを結合する」という意味があります

片方のテーブルに無い情報を別のテーブルから取ってくることができます

SQL JOINのイメージ

データベース(正確にはリレーショナルデータベース)では情報を細分化して格納します

学校の情報」で例えるなら、下記ようなデータが複数のテーブル内で存在します

  • 生徒名簿:生徒名、部活、出身学校など
  • 出席簿:日付、欠席数、遅刻数
  • 中間テスト点数:国語、英語、数学など
  • 期末テスト点数:国語、英語、数学など
  • 運動テスト:50m走タイム、幅跳び距離など

「中間テスト」の点数の平均点を「部活ごと」に見たいとなったとき

「中間テスト」のテーブルに「生徒名簿」をJOIN(結合)することで

1つのテーブルとして処理をすることができるようになります

SQL JOINのイメージ
1つのテーブルで管理すれば!?

複数の細分化されたテーブルで管理する理由は、「データの変更」に対応するためです

例えば「生徒の名前」が変わったときなど…

「すべてのテーブル情報を変える」のと「マスターの生徒名簿だけ変える」のとでは、作業の手間が段違いですよね

4種類のJOIN方法

SQLの4種類のJOIN

SQLでは結合方法が4つもあります

2つのテーブルの情報を「どのように取ってくるか」によって使い分ける必要があります

ただし!この4種類の中からよく使うのは2種類!

  1. 2つの中から共通した情報だけを結合する「INNER JOIN
  2. 片方のテーブルはそのままに、もう片方の情報があれば結合する「LEFT JOIN
INNER JOINとLEFT JOINの違い

この2種類のJOINの違いは、「共通するデータを消すか・残すか」です

同じデータがない場合は、使わないから消してしまおうの「INNER JOIN

もし追加のデータ(右側)があれば、データを結合してしまおうの「LEFT JOIN

このスタンスです

RIGHT JOINは使わない

RIGHT JOIN」という結合方法がありますが、これは使わないようにしましょう

テーブルの位置を左右逆にすれば「LEFT JOIN」で事足りますし、左のテーブルに対し右側に情報を追加する方がイメージがしやすいためです

JOINの重要な要素「キー」とは?

キーのイメージ

「JOIN」を実施するには「キー」という概念を理解する必要があります

「キー」とは2つのテーブルの両方に存在する共通のデータです

とくにテーブル内で重複せず、必ず入っているキーを「プライマリーキー(主キー)」と呼びます

JOINではこの「キー」を明示する必要があります

SQL JOINのイメージ

上記の例ではIDをキーとして「LEFT JOIN」を実施しました

AとBの表に共通する「キー」=「 001 / 003 / 005 」 が結合されました

キーにはIDを指定せよ!

JOINのキー(ON句)ではIDを指定しましょう

「名前」などの名称でも指定できますが、同姓同名がいた場合や名前の形式が違う場合などがあるため、ずれにくい「数値型のID」を指定する癖をつけましょう

「佐藤 太郎」「佐藤太郎」などスペースの有り無しなど、システムでは別扱いになる場合があります

JOINの設定方法

SQL JOINの設定イメージ
SELECT 
    a.名前, a.点数, b.部活
FROM 
    テスト点数テーブル a
LEFT JOIN
    生徒名簿 b
ON 
    a.名前 = b.名前
;

JOINの使い方は若干複雑です

左側に来るテーブル」と「右側に来るテーブル」に名前を付けて、

抽出する項目を分ける必要があります

ステップに分けて説明します

FROM句で左側に来るテーブルを指定し、名前を付ける

FROM

テスト点数テーブル a ←左側に来るテーブル

4種類のJOINから1つを選択する

FROM

テスト点数テーブル a

LEFT JOIN ←LEFT JOINを選択

続いて右側に来るテーブルを指定し、名前を付ける

FROM

テスト点数テーブル a

LEFT JOIN

生徒名簿 b ←右側に来るテーブル

ON」に続いて左右のテーブルの「キー」を指定する
※頭にテーブル名(a.b)を付ける

FROM

テスト点数テーブル a

LEFT JOIN

生徒名簿 b

ON a.名前 = b.名前 ←ON句でそれぞれのキーを指定

SELECT句でテーブル名(.)カラム名を指定する

SELECT

a.名前, a.点数, b.部活 ←テーブル名を指定して、取り出したいカラムを指定

FROM

テスト点数テーブル a

LEFT JOIN

生徒名簿 b

ON a.名前 = b.名前

SELECT句を最後にご紹介していますが、慣れてくれば頭から書き始めてみましょう

またカラム名の頭にテーブル名を付けずに実行すると、エラーが発生します

SQL JOINのイメージ

テーブル名は「a.b」でも「x.y」でも何でもよいので、

どちらのテーブルから抽出したいのか、しっかり明示しましょう

SELECT句でJOINのテーブル名を記載する

まとめ

今回はJOINの基礎についてご紹介してきました

INNER JOIN」と「LEFT JOIN」を使いこなせるようになってください

コメントを残す

メールアドレスが公開されることはありません。