CROSS JOIN 等同 INNER JOIN。-- 以下兩句結果相同
SELECT A.name, B.name FROM A LEFT JOIN B ON A.id = B.id;
SELECT A.name, B.name FROM B RIGHT JOIN A ON B.id = A.id;
記憶口訣:左聯結保左、右聯結保右,被保留的那張表所有行一定會出現在結果集中。
table_reference [INNER | CROSS] JOIN table_factor [join_condition]
| table_reference STRAIGHT_JOIN table_factor [ON condition]
| table_reference LEFT [OUTER] JOIN table_reference join_condition
| table_reference RIGHT [OUTER] JOIN table_reference join_condition
| table_reference NATURAL [LEFT | RIGHT [OUTER]] JOIN table_factor
join_condition: ON conditional_expr | USING (column_list)
table_factor 允許在 JOIN 後使用括號包裹多張表,實現複雜聯結:
SELECT * FROM t1
LEFT JOIN (t2, t3, t4) ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);
等同於:
SELECT * FROM t1
LEFT JOIN (t2 CROSS JOIN t3 CROSS JOIN t4)
ON (t2.a = t1.a AND t3.b = t1.b AND t4.c = t1.c);
LEFT JOIN,以「主表在左」為習慣,閱讀性更佳。ON 條件中使用函數或運算式,導致索引失效。STRAIGHT_JOIN 強制連接順序,但需深度理解執行計畫。