见 “所有” 字眼时注意使用外连接。
SQL92 语法(旧)
SELECT A, B
FROM a,
b
WHERE a.C = b.C -- 靠共有列 C 连接
SQL99 语法(推荐)
内连接
SELECT A, B
FROM a(INNER)
JOIN b ON a.C = b.C
外连接
-- 左外连接:保留左表完整
SELECT A, B
FROM a LEFT (OUTER) JOIN b
ON a.C = b.C
-- 右外连接:保留右表完整
SELECT A, B
FROM a RIGHT (OUTER) JOIN b
ON a.C = b.C
满外连接
-- MySQL 不支持 FULL OUTER JOIN,用 UNION 替代
SELECT A, B
FROM a
LEFT JOIN b ON a.C = b.C
UNION
SELECT A, B
FROM a
RIGHT JOIN b ON a.C = b.C
合并结果集
UNION:去重,效率低UNION ALL:不去重,效率高
其他连接方式
- 自然连接:
NATURAL JOIN,自动匹配同名列 - 指定连接列:
USING(C)