工作面试必备:SQL 中的各种连接 JOIN 的区别总结
前言
尽管大多数开发者在日常工作中经常用到 Join 操作,如 Inner Join、Left Join、Right Join 等,但在面对特定查询需求时,选择哪种 Join 类型以及如何使用 On 和 Where 子句往往成为一大挑战。特别是对于初学者而言,这些概念可能显得抽象且难以区分。在实际应用中,错误地使用 Join 类型或混淆 On 与 Where 子句的功能,都可能导致数据查询结果的不准确或遗漏关键信息。
今天大姚给大家讲解一下 SQL 中关于 Join、Inner Join、Left Join、Right Join、Full Join、On、Where 区别和用法。
SQL 连接 JOIN 图解
数据库表结构和对应数据
本文咱们用的是 MS Sql Server 作为数据操作示例。
Students 学生表:
Class 班级表:
Join(where 联立查询)
概念:用于两表或多表之间数据联立查询。
Inner Join(内连接查询)
概念:与 Join 相同,两表或多表之间联立查询数据,因此我们在使用多表 join 查询的时候既可以使用 where 关联,也可以是 inner join 关联查询。
Left Join(左连接查询)
概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回。
Right Join(右连接查询)
概念:与 Left Join 的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回。
Full Join(全连接查询)
概念:返回表中所有的数据数据,无论匹配与否。
On、Where 的异同
这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用 On,什么时候使用 Where,下面将分别展示两者的异同。
On 条件的作用:
ON 的使用无论是左右内全都使用到了 On 来进行关联!
对于 inner join 的作用就是起到了与 where 相同的作用条件筛选:
对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:
对于 Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:
WHERE 条件的作用:
WHERE 条件在临时表生成后的过滤阶段应用,对最终结果进行筛选。此时 LEFT JOIN 的“保留左表所有记录”特性已失效,WHERE 会过滤掉不符合条件的行(包括左表记录),如下所示:
仅返回右表
ClassId=1的匹配记录,左表中无匹配的记录会被过滤掉。
区别总结:
一句话概括:ON 用作于生成临时表时的条件筛选,WHERE 用作于对临时表中的记录进行过滤。
ON 条件是在生成临时表时使用的条件,它不管 ON 中的条件是否为真,都会返回左边表中的记录(以左连接为例)。
WHERE 条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。
版权声明: 本文为 InfoQ 作者【追逐时光者】的原创文章。
原文链接:【http://xie.infoq.cn/article/9709a44e1ac0ce9cceecca73c】。文章转载请联系作者。







评论