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