大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~

本篇将多表联查分为三部分来介绍:

1. 通过Select子句进行查询

2.  通过内连接 inner join进行查询

3. 通过外连接left join,left outer join,right join,right outer join,union进行查询
 

一、通过SELECT子句进行多表查询

语法:

select  字段名  

from 表1,表2 …

where 表1.字段 = 表2.字段

and 其它查询条件

例:以学生表student和班级表class为例

Select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student,class

where student.classid = class.classid

注意:上面的代码中,以两张表相同的字段信息作为条件,进行两个表联查,但在实际开发中不建议这样使用,最好用主外键约束来实现。

二、通过内连接 inner join进行查询

语法:

select  字段名  

from 表1

inner join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

510666f618e24343b1d9081bd3e5d97c.png

select   student.sid,  student.sname,  student.classid, class.classid,  class.classname

from student

inner join class

on student.classid = class.classid

38744a32913547258d288ca1c87d50d0.png

这种场景下得到的是满足某一条件的student,class内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

三、通过外连接left join,left outer join,right join,right outer join,union进行查询

1.left join

语法:

select  字段名  

from 表1

left join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

1aa44af455db49b5843f78da4d5ee0c4.png

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

结果如下,class表中不存在的记录填充Null:

56d416ac0afc42109639a44280b1ec85.png

这种场景下得到的是student的所有数据,和满足某一条件的class的数据;

2.left outer join(相当于left join  +  [where 表2.字段 is null])

语法:

select 字段名  

from 表1

left join 表2

on 表1.字段 = 表2.字段

where 表2.字段 is null

例:以学生表student和班级表class为例

6fd97960accc438bb6560c4d93bf9cc3.png

select   student.sid,student.sname,class.classid,class.classname

from student

left join class

on student.classid = class.classid

where class.classid is null

e8ef3b7259044c99a370e41f32acd2e4.png

这种场景下得到的是student中的所有数据减去"与class满足同一条件 的数据",然后得到的student剩余数据 

3.right join

语法:

select  字段名  

from 表1

right  join 表2

on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

cbe34f81009e44fca9497731c0dbcec2.png

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

412b80365d9047eea73ab1de37d13640.png

 这种场景下得到的是class的所有数据,和满足某一条件的student的数据;

4.right outer join(相当于right join  +  [where 表1.字段 is null])

语法:

select 字段名  

from 表1

right join 表2

on 表1.字段 = 表2.字段

where 表1.字段 is null

例:以学生表student和班级表class为例

55042e72fdd9434498cbe6317c972dd9.png

select   student.sid,student.sname,class.classid,class.classname

from student

right join class

on student.classid = class.classid

where student.classid is null

7017d09654ac41b6a1ba7d8cb60b6ad5.png

这种场景下得到的是class中的所有数据减去 "与student满足同一条件 的数据“,然后得到的class剩余数据;

4.left join  union right join

语法:

select  字段名  

from 表1

left join 表2

on 表1.字段 = 表2.字段

union

select  字段名  

from 表1

right  join 表2

​​​​​​​on 表1.字段 = 表2.字段

例:以学生表student和班级表class为例

ec77c80378f34181a1f90554f17bca42.png

select   student.*  , class.*

from student

left join class

on student.classid = class.classid

union

select  student.*  , class.*

from student

right join class

on student.classid = class.classid

d6f62b5ffbff48beb00e5b1e15cd3df6.png

 这种场景下得到的是满足某一条件的公共记录,和独有的记录

以上分享希望能帮到你,有错误及时指正哦~ 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐