SQL中from后直接列多表与用join关联两表的写法有什么区别
两种SQL多表查询写法的差异说明
1. 执行效率层面
你给出的两种写法逻辑完全等价,都是对account和bank表做内连接,匹配两表id相等的行。所有主流关系型数据库(MySQL、PostgreSQL、Oracle、SQL Server等)的查询优化器,都会把两种写法解析成完全相同的执行计划,编译时间、运行效率没有任何差异,不需要担心性能层面的区别。
2. 语法规范层面
- 第一种是SQL-89旧标准的隐式内连接写法:不明确声明连接类型,把表关联条件、业务过滤条件统一放在
WHERE子句中。 - 第二种是SQL-92新标准的显式内连接写法:明确用
JOIN声明连接类型,把表关联条件单独放在ON子句中,业务过滤条件保留在WHERE子句中。
3. 实际使用建议
优先选择显式JOIN的第二种写法,优势非常明显:
- 可读性更强:关联逻辑和过滤逻辑拆分清晰,多表关联(比如3张以上表连查)时不会出现一堆条件混在
WHERE里,排查逻辑更方便 - 容错率更高:隐式连接如果漏写关联条件会直接生成笛卡尔积,返回大量错误数据且很难定位问题;显式写
JOIN ON漏写条件时,多数SQL编辑器会直接给出错误提示 - 扩展性更好:后续如果需要调整为左连接、右连接等外连接逻辑,直接修改
JOIN类型即可;隐式连接要实现外连接需要依赖不同数据库的方言语法,兼容性非常差
举个扩展场景的例子,增加account表状态为有效、薪资大于5000的过滤条件,显式写法的逻辑非常清晰:
select a.name, b.salary from account a join bank b on a.id = b.id where a.status = '有效' and b.salary > 5000;
内容的提问来源于stack exchange,提问作者mert
相关产品推荐
相关产品推荐

