SQL关联两表查询作者King的图书 该JOIN写法是否正确?
结论
你写的语句能查出正确结果,但写法不推荐。
对于INNER JOIN(也就是你写的JOIN,默认就是内连接)来说,过滤条件放在ON后面和WHERE后面,执行逻辑和返回结果没有区别,你写的语句跑起来不会报错,返回的title也确实是作者名为King的所有图书,结果准确性没问题。
存在的问题
这种写法把表关联条件和结果过滤条件混在了一起,可读性很差:其他人读代码的时候没法第一眼分清哪个条件是用来做两表匹配的,哪个是用来筛选数据的。
更麻烦的是,如果你之后把连接类型改成LEFT JOIN/RIGHT JOIN这类外连接,把过滤条件写在ON里和写在WHERE里返回的结果会有本质区别,很容易写出隐蔽的逻辑bug。
推荐写法
建议把两类条件按语义拆分书写,标准实现如下:
SELECT book.title FROM book JOIN author ON book.author_id = author.id WHERE author.name = 'King';
额外提两个小规范:
- SQL关键字建议统一大写,表名、字段名按你原本的命名规则书写即可,适当换行缩进,后续维护成本会低很多
JOIN默认等价于INNER JOIN,日常写内连接时可以省略INNER关键字
内容的提问来源于stack exchange,提问作者zeppal
相关产品推荐
相关产品推荐

