🐘
SQLのJOINについて
はじめに
-
join ・ inner join
- 内部結合
-
left join ・ left outer join
- 左外部結合
-
right join ・ right outer join
- 右外部結合
-
full join ・ full outer join
- 外部結合
-
cross 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 where
はinner join on
と一緒。(多分)
参考
リファレンス
これかんがえたひとすごいわだいぶ適当な文書で申し訳ありません。
P.S. adobeはなぜ同位置でのコピーをcmd+fにしたんだ! figmaが検索窓を開くじゃないか!
Discussion