在 SQL 中,左连接(LEFT JOIN / LEFT OUTER JOIN)用于查询左表全部记录,以及右表中匹配的记录;如果右表没有匹配,则右表字段以 NULL 填充。
SELECT 列名
FROM 左表
LEFT JOIN 右表
ON 左表.字段 = 右表.字段;
LEFT OUTER JOIN和LEFT JOIN是等价的。
users(用户表)
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
orders(订单表)
| id | user_id | amount |
|---|---|---|
| 1 | 1 | 100 |
| 2 | 1 | 200 |
| 3 | 2 | 150 |
SELECT u.id, u.name, o.amount
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id;
结果:
| id | name | amount |
|---|---|---|
| 1 | 张三 | 100 |
| 1 | 张三 | 200 |
| 2 | 李四 | 150 |
| 3 | 王五 | NULL |
✅ 王五没有订单,但仍然显示。
SELECT u.id, u.name
FROM users u
LEFT JOIN orders o
ON u.id = o.user_id
WHERE o.id IS NULL;
结果:
| id | name |
|---|---|
| 3 | 王五 |
LEFT JOIN orders o
ON u.id = o.user_id
AND o.status = 'paid';
ON 里WHERE 里(可能影响左连接效果)| 连接类型 | 特点 |
|---|---|
| INNER JOIN | 只返回两表都匹配的数据 |
| LEFT JOIN | 左表全有,右表可空 |
| RIGHT JOIN | 右表全有,左表可空 |
| FULL JOIN | 两边全有(MySQL 不支持) |
如果你用的是 MySQL / PostgreSQL / SQL Server,或者想看 多表左连接 / 性能优化,可以继续问我。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。