在 SQL 中使用 INNER JOIN(内连接) 时,有几个关键点和常见坑需要注意,下面从语法、性能、结果正确性三个角度总结:
-- 正确
SELECT *
FROM A
INNER JOIN B ON A.id = B.a_id;
-- 错误/危险(笛卡尔积)
SELECT *
FROM A
INNER JOIN B;
A.id 是 INT,B.a_id 是 VARCHAR,可能导致:
✅ 建议:保持字段类型、字符集一致
A 表有 100 行
B 表有 80 行
INNER JOIN 后 ≤ 80 行(可能更少)
⚠️ 如果你“以为会看到所有 A 表数据”,那应该用 LEFT JOIN
A.id -- 主键(有索引)
B.a_id -- 外键(应有索引)
没有索引的 INNER JOIN = 全表扫描 × 全表扫描
-- 推荐
SELECT A.id, A.name, B.order_no
FROM A
INNER JOIN B ON A.id = B.a_id;
1 个用户
3 个订单
INNER JOIN 后 → 3 行
⚠️ 聚合统计前要先想清楚是否要去重
| 问题 | 说明 |
|---|---|
| 忘记 ON 条件 | 笛卡尔积 |
| 用 INNER JOIN 代替 LEFT JOIN | 丢数据 |
| 连接字段无索引 | 慢查询 |
| 类型不一致 | 隐式转换 |
| 一对多未处理 | 数据翻倍 |
INNER JOIN = 只保留“两边都有”的数据,连接条件必须明确,字段要索引,结果要确认。
如果你有具体 SQL 或业务场景(比如订单+用户、日志+配置),我可以帮你具体分析。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。