SQL中关于JoinInner JoinLeft JoinRight JoinFull JoinOn Where区别

Posted can-daydayup

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL中关于JoinInner JoinLeft JoinRight JoinFull JoinOn Where区别相关的知识,希望对你有一定的参考价值。

前言:

  今天主要的内容是要讲解SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别和用法,不用我说其实前面的这些基本SQL语法各位攻城狮基本上都用过。但是往往我们可能用的比较多的也就是左右连接和内连接了,而且对于许多初学者而言不知道什么时候该用哪种语法进行查询,并且对于左右,或者内连接查询的时候关于ON 和Where 的作用也是模糊不清的,说不出其中的一个大概的差别,因此接下来请容我把它们好好描述一遍。

数据库(MS Sql Server)表结构和对应数据:

Students 学生表:

技术图片

Class 班级表:

技术图片

 

Join(where联立查询):

概念:用于两表或多表之间数据联立查询

select * from Students s,Class c where s.ClassId=c.ClassId

技术图片 

Inner Join(内连接查询):

概念:与Join相同,两表或多表之间联立查询数据,因此我们在使用多表join查询的时候既可以使用where关联,也可以是inner join关联查询

select * from Students s inner join  Class c  on s.ClassId=c.ClassId

技术图片

Left Join(左连接查询):

概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回

select * from Students s left join  Class c  on s.ClassId=c.ClassId

技术图片

Right Join(右连接查询):

概念:与Left Join的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回

select * from Students s right join  Class c  on s.ClassId=c.ClassId

 技术图片

Full Join(全连接查询):

概念:返回表中所有的数据数据,无论匹配与否

select * from Students s Full JOIN  Class c  on s.ClassId=c.ClassId

技术图片

On、Where的异同:

这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用On,什么时候使用Where,下面将分别展示两者的异同。

ON的使用无论是左右内全都使用到了On来进行关联:

1.对于Inner Join 的作用就是起到了与where相同的作用条件筛选:

select * from Students s inner JOIN  Class c  on s.ClassId=c.ClassId and s.Sex=‘男‘

技术图片

2.对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:

select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex=‘男‘  

技术图片

3.对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:

--全连接
select * from Students s full join  Class c  on s.ClassId=c.ClassId 

--全连接加on查询
select * from Students s full join  Class c  on s.ClassId=c.ClassId and s.Sex=‘男‘ 

技术图片

技术图片

Where的用法就不描述了因为这个咱们用的都比较多,下面说明一下两者的概念问题:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。
2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

结论:on用作于生成临时表时的条件筛选,where用作于对临时表中的记录进行过滤。

总结:

  最后我想说的是,有时候我们总认为概念性的东西很简单而忽视了实践。其实往往一些基础性的东西才是我们为往后构造的万丈高楼的前提,坚持实践,坚持动手,你会发现许多你没有想到过的问题哟!

 

以上是关于SQL中关于JoinInner JoinLeft JoinRight JoinFull JoinOn Where区别的主要内容,如果未能解决你的问题,请参考以下文章

SQL中inner joinleft joinright joinouter join之间的区别

SQL表连接查询(inner joinfull joinleft joinright join)

SQL表连接查询(inner joinfull joinleft joinright join)

图解SQL的inner joinleft joinright joinfull outer joinunionunion all的区别

sql 表的连接 inner joinfull joinleft joinright joinnatural join

图解SQL的inner joinleft joinright joinfull outer joinunionunion all的区别