SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别

679d62948fafebf3e1bcc5f4d56bd906.png

2d5325d561e32a094ed31e31eb075b58.jpeg

前言:

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

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

Students 学生表:

df9b990c7e7542a6948129f0dc673d58.png

Class 班级表:

264ae280f6a9c5a8cf98921fb572e41f.png

Join(where联立查询):

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

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

94ff8eef61bd24ed9ec417a77d5a3262.png

Inner Join(内连接查询):

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

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

3556969b80a7c4bcaeb3f6b8592e0a5d.png

Left Join(左连接查询):

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

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

9b64a3fb6b3a35b438e0634b89f9800d.png

Right Join(右连接查询):

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

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

a4e621563d4b24384563f342a49764c1.png

Full Join(全连接查询):

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

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

15573eb825975683e547d136188dbed2.png

On、Where的异同:

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

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

对于Inner Join 的作用就是起到了与where相同的作用条件筛选:
select * from Students s inner JOIN  Class c  on s.ClassId=c.ClassId and s.Sex='男'

d2c5913cd3399b425f947393a6a4cca1.png

对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:
select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

e029859ec140c86705da9d737f0c8abf.png

对于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='男'

45dedb6b4e88557e05aa68ebca62c6a7.png

1ae67db4b76cbf2db83bad8c2079dfd1.png

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

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

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

总结:

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

See you next good day b5a5f5bc09d85c145451f9f00c304caf.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值