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

前言:

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

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

Students 学生表:

Class 班级表:

 

Join(where联立查询):

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

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

 

Inner Join(内链接查询):

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

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

Left Join(左链接查询):

概念:以左表中的数据为主,即便与右表中的数据不匹配也会把左表中的全部数据返回class

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

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

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

对于左右链接而言,不管查询条件是否知足都会返回对应所指向的那边的全部数据:

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

对于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的用法就不描述了由于这个我们用的都比较多,下面说明一下二者的概念问题:

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

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

总结:

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

相关文章
相关标签/搜索