Skip to content

SQL結合 解説

SQLのJOINタイプを比較:inner、outer、cross、self、lateral、natural — 各タイプが返す結果と1行の例。

結合は共通のキーで2つのテーブルの行を組み合わせます。キーが一致する・欠ける・重複するときにどの行が残るかは、結合のタイプで決まります。

リファレンステーブル · 8 項目
8 of 8 rows
内部結合と外部結合
ON条件が両テーブルで一致する行のみ。一致しない行はどちら側でも破棄されます。SELECT u.name, o.total FROM users u INNER JOIN orders o ON u.id = o.user_id;
左テーブルのすべての行。一致がない部分の右側の列はNULLになります。SELECT u.name, o.total FROM users u LEFT OUTER JOIN orders o ON u.id = o.user_id;
右テーブルのすべての行。一致がない部分の左側の列はNULLになります。SELECT u.name, o.total FROM users u RIGHT OUTER JOIN orders o ON u.id = o.user_id;
両テーブルのすべての行。一致しない側はNULLで埋められます。SELECT u.name, o.total FROM users u FULL OUTER JOIN orders o ON u.id = o.user_id;
交差結合と自己結合
直積。左の各行が右のすべての行とペアになります。ON句はありません。SELECT u.name, o.total FROM users u CROSS JOIN orders o;
別名(エイリアス)を使ってテーブルをそれ自体に結合します。1つのテーブル内で行を比較します。SELECT a.id AS o1, b.id AS o2 FROM orders a JOIN orders b ON a.user_id = b.user_id WHERE a.id < b.id;
高度な結合
FROM内のサブクエリを外側の行ごとに評価します。サブクエリは外側のテーブルの列を参照できます。SELECT u.name, o.total FROM users u, LATERAL (SELECT total FROM orders WHERE user_id = u.id LIMIT 1) o;
同じ名前の列で結合します。ON句はありません。意図しないキーの衝突に注意してください。SELECT u.name, o.total FROM users u NATURAL JOIN orders o;