SQL多表连接查询是通过join把两个或多个表按字段关系组合成结果集,常用于订单与用户、文章与分类等场景。理解连接类型能避免少数据或笛卡尔积问题。

一、内连接 inner join
内连接只返回两表都匹配的行。比如查有订单的用户:
-- 用户表 users(id, name) -- 订单表 orders(id, user_id, amount) select u.name, o.amount from users u inner join orders o on u.id = o.user_id;
二、左外连接 left join
左外连接返回左表全部行,右表无匹配则补null。可找出没下单的用户:
select u.name, o.amount from users u left join orders o on u.id = o.user_id;
三、右外连接与全外连接
右外连接以右表为主,全外连接返回两侧所有行,缺失侧为null。MySQL不直接支持full join,可用union模拟:
select u.name, o.amount from users u left join orders o on u.id = o.user_id union select u.name, o.amount from users u right join orders o on u.id = o.user_id;
四、连接注意事项
- 连接条件写错会产生笛卡尔积,数据量暴涨
- 多用表别名让SQL清晰,如 u 代表 users
- 在
on后跟连接条件,where做过滤
示例:带过滤的左连接
select u.name, o.amount from users u left join orders o on u.id = o.user_id where o.amount > 100 or o.amount is null;
五、总结
实际开发里,inner join和left join用得最多。先想清以哪张表为基准,再选连接类型,复杂查询就好写了。