開発者の備忘

「起」と「結」しか書かないので詳細はご自分でお調べください

【SQL】INNER JOINとLEFT JOIN

INNER JOINとLEFT JOINの使い方を簡単に説明
RIGHT JOINはほぼ使わないので説明しません。


JOINはテーブル同士を結合するもの。
結合元と結合先のテーブルに存在する同じ項目(キー項目)が
一致するレコード同士をくっつける。
INNERとLEFTはくっつけ方が異なる。


内部だ外部だは今は考えなくていいです。
気になる人だけ調べてください


実際に手を動かしたい人は以下のテーブルを作ってください

--テーブル作成
CREATE TABLE A(
	ID VARCHAR(3) NOT NULL
	,NAME VARCHAR(10) NOT NULL
	)
CREATE TABLE B(
	ID VARCHAR(3) NOT NULL
	,NAME VARCHAR(10) NOT NULL

--データ挿入
INSERT INTO A
VALUES ('001', 'ONE'), ('002', 'TWO'), ('003', 'THREE')
INSERT INTO B
VALUES ('003', 'THREE'), ('004', 'FOUR'), ('005', 'FIVE')

INNER JOIN

まずはINNER JOINから理解したほうがLEFT JOINを理解しやすいと思います。


INNER JOINはキー項目が一致するレコードのみくっつけて表示します。

SELECT * FROM A

SELECT * FROM B

SELECT * FROM A AS A
INNER JOIN B AS B
ON A.ID = B.ID

このクエリを実行すると以下の実行結果となります。

f:id:phen1208:20190829233739p:plain
INNER JOIN実行結果


ON句で指定した互いのテーブルの項目「ID」が一致しているレコードのみ結合されました。
結果は一致したレコードのみ出力されます。
これがINNER JOINです。

LEFT JOIN

LEFT JOINもINNER JOINと同様、一致したレコードが結合されて出力されます。
異なる点は、キー項目が一致しない結合元テーブルのレコードも出力される点です。

SELECT * FROM A

SELECT * FROM B

SELECT * FROM A AS A
LEFT JOIN B AS B
ON A.ID = B.ID

SELECT * FROM B AS B
LEFT JOIN A AS A
ON A.ID = B.ID


クエリ実行結果が以下となります。

f:id:phen1208:20190829234434p:plain
LEFT JOIN実行結果


IDが一致しないレコードはNULLの状態で結合元テーブルのレコードが
すべて出力されているのがおわかりでしょうか。

まとめ

キー項目が一致するレコードのみ出力するのがINNER JOIN。
一致しようがしまいが、結合元テーブルのレコードをすべて出力するのがLEFT JOIN。