SQLのjoinってなんだっけって思った時に読む用の記事

この記事は最新更新日から、6年以上経過しています。

join句のことすぐ忘れる

毎回毎回検索するし思い出すのに時間かかるのでまとめとこ…と思ったのでまとめます。
SQL直書きする機会そんなにないし年に1日も使うかみたいなレベルだけどそういう問題じゃない…。

両方のテーブルにある値しかほしくないとき

inner joinを使う、内部結合と言うらしい

SELECT *
FROM table1
	INNER JOIN table2 
		ON table1.etc_id = table2.etc_id

ONの行にカラムの値が一致してたらくっつけたいカラムを並べる

3テーブル以上つなげるときの書き方は何回調べても忘れる
asとか使うんだっけ…? と思ったらどうやらinner joinをふやすだけでいいらしい。

SELECT *
FROM table1
	INNER JOIN table2 
		ON table1.etc_id = table2.etc_id
	INNER JOIN table3
		ON table1.etc_id = table3.etc_id

ONの行ににくっつけたいテーブル名とカラム名かけばいいらしい
etc_idは「とにかく一致する値のあるカラム」的な意味で例として書いただけなので、=の両側が一致する該当テーブルの項目ならなんでも大丈夫

片方のテーブルにしかないレコードもとってきてほしい

left join、right joinを使うそうな、外部結合というらしい、ふたつともouter joinなのだそうだ。
leftとrightの差はONの時に左のテーブル優先にするか右のテーブル優先にするかの違いしかないそうなので、
left joinだけ使っておけばいいんじゃないかなって思ってる、プログラム的に左辺が優先される方がわかりやすいし…

SELECT *
FROM table1
	LEFT JOIN table2 
		ON table1.etc_id = table2.etc_id

LEFT JOINなのでON行の左にある「table1」のカラムが優先される。
(もしRIGHT JOINにしたばあいは右側の「table2」のカラムが優先されるよ)

複数行のとき、 inner joinと変わらない…

SELECT *
FROM table1
	LEFT JOIN table2 
		ON table1.etc_id = table2.etc_id
	LEFT JOIN table3 
		ON table1.etc_id = table3.etc_id