SQL JOIN 连接查询速查表
SQL JOIN 是关联多表查询的核心,整理各种连接类型和用法,快速编写正确的关联查询。
返回 数据库INNER JOIN 2
SELECT * FROM users INNER JOIN orders ON users.id = orders.user_id只返回两表匹配的行
SELECT u.name, o.total FROM users u JOIN orders o ON u.id = o.user_id简写 JOIN(默认 INNER)
LEFT / RIGHT JOIN 3
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id返回左表所有行,右表无匹配则为 NULL
SELECT * FROM users RIGHT JOIN orders ON users.id = orders.user_id返回右表所有行,左表无匹配则为 NULL
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.id IS NULL查找左表独有(无订单的用户)
FULL / CROSS JOIN 2
SELECT * FROM users FULL OUTER JOIN orders ON users.id = orders.user_id返回两表所有行,无匹配则为 NULL
SELECT * FROM table1 CROSS JOIN table2笛卡尔积,每行与另一表所有行组合
自连接与多表 2
SELECT e.name, m.name AS manager FROM employees e LEFT JOIN employees m ON e.manager_id = m.id自连接(员工-经理关系)
SELECT * FROM a JOIN b ON a.id = b.a_id JOIN c ON b.id = c.b_id多表连接
💡 提示
- LEFT JOIN 的 WHERE 条件如果放在 ON 里,只影响右表匹配;放在 WHERE 里会过滤整个结果集。
- CROSS JOIN 会产生笛卡尔积,数据量大时慎用。
- 用表别名(u、o)可以让多表查询更简洁易读。
- EXISTS 子查询在某些场景下比 JOIN 性能更好,特别是只需要判断存在性时。