在 SQL 中,左连接(LEFT JOIN)和内连接(INNER JOIN)是最常见的两种表连接方式,核心差异在于是否保留“左表中没有匹配到的数据”。
SELECT *
FROM A
INNER JOIN B ON A.id = B.a_id;
✅ 结果:A ∩ B
NULL 填充SELECT *
FROM A
LEFT JOIN B ON A.id = B.a_id;
✅ 结果:A 全集(含 B 中无匹配的部分)
| 对比项 | INNER JOIN | LEFT JOIN |
|---|---|---|
| 左表未匹配行 | ❌ 不显示 | ✅ 显示 |
| 右表未匹配行 | ❌ 不显示 | ❌ 不显示 |
| 结果行数 | ≤ 两表行数 | ≥ 左表行数 |
| 常见用途 | 精确匹配查询 | 统计、补漏、查缺失 |
A 表(用户)
| id | name |
|---|---|
| 1 | 张三 |
| 2 | 李四 |
| 3 | 王五 |
B 表(订单)
| id | a_id | amount |
|---|---|---|
| 1 | 1 | 100 |
| 2 | 2 | 200 |
A INNER JOIN B
| name | amount |
|---|---|
| 张三 | 100 |
| 李四 | 200 |
❌ 王五没有订单,被过滤
A LEFT JOIN B
| name | amount |
|---|---|
| 张三 | 100 |
| 李四 | 200 |
| 王五 | NULL |
✅ 王五保留,订单为 NULL
-- 找出没有订单的用户
SELECT A.*
FROM A
LEFT JOIN B ON A.id = B.a_id
WHERE B.a_id IS NULL;
INNER JOIN 取“交集”,LEFT JOIN 保“左全量”。
如果你有具体业务 SQL 或性能问题,也可以直接发出来一起看。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。