🐘

SQLのJOINについて

に公開

はじめに

各種

INNER JOIN

n1 n2 t1 t2
2 2 1 2
3 3 1 2

LEFT JOIN

n1 n2 t1 t2
1 - 1 -
2 2 1 2
3 3 1 2

RIGHT JOIN

n1 n2 t1 t2
2 2 1 2
3 3 1 2
- 4 - 2

INNER JOIN

n1 n2 t1 t2
1 - 1 -
2 2 1 2
3 3 1 2
- 4 - 2

CROSS JOIN

n1 n2 t1 t2
1 2 1 2
1 3 1 2
1 4 1 2
2 2 1 2
2 3 1 2
2 4 1 2
3 2 1 2
3 3 1 2
3 4 1 2
  • join on true でも同じ結果。

補足

JOINの左右

select from <> join <>;
  • from で指定したテーブルが (左にある)
  • join で指定したテーブルが (右にある)

テスト用クエリ

select t1.n as n1, t2.n as n2, t1.m as t1, t2.m as t2 from (values 
	(1,1),
	(2,1),
	(3,1)) as t1(n, m)
<joinの種類> join (values
	(2,2),
	(3,2),
	(4,2)) as t2(n, m) using(n); -- crossjoinはusing句なし

joinの構文

<join_type> <from_item> {
    ON <join_condition> |
    USING ( ...<join_column> ) [ AS join_using_alias ] }
-- または
NATURAL <join_type> <from_item>
-- または
CROSS JOIN <from_item>

解説

JOINは全ての組み合わせ(join on trueの結果)毎に、
結合できるかをonで指定されたboolを返す条件式で一つずつ確かめる。
外部結合は二つのテーブルを合体させたもののうち、重複する行を一つにする。
USING句は2テーブルの指定されたカラムを一つに合体させる。
joinの結果のカラムになるイメージ。
naturalは同じ名前のカラム全てをjoinしてくれる。
cross join whereinner join onと一緒。(多分)

参考

リファレンス
https://www.postgresql.jp/document/16/html/sql-select.html
これかんがえたひとすごいわ
https://boost-tool.com/ja/tools/md_table

だいぶ適当な文書で申し訳ありません。

P.S. adobeはなぜ同位置でのコピーをcmd+fにしたんだ! figmaが検索窓を開くじゃないか!

Discussion