SQL JOIN 子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。

  最常见的 JOIN 类型:SQL INNER JOIN(简单的 JOIN)。 SQL INNER JOIN 从多个表中返回满足 JOIN 条件的所有行。

SQL(1)—— join语句_sql

 

举例说明:

SQL(1)—— join语句_连接查询_02

 SQL(1)—— join语句_全连接_03

1、Join(where联立查询)

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

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

 SQL(1)—— join语句_多表_04

 2、Inner Join(内连接查询)

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

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

结果和Join是一样的。

3、Left Join(左连接查询)

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

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

SQL(1)—— join语句_多表_05

 4、Right Join(右连接查询)

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

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

SQL(1)—— join语句_多表_06

 5、Full Join(全连接查询)

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

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

SQL(1)—— join语句_数据_07

 6、On、Where的异同

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

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

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

SQL(1)—— join语句_sql_08

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

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

SQL(1)—— join语句_数据_09 

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


 SQL(1)—— join语句_全连接_10

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

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。

2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

结论:

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