大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~
本篇将多表联查分为三部分来介绍:
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.字段 =
例:以学生表student和班级表class为例
select student.sid, student.sname, student.classid, class.classid, class.classname
from student
inner join class
on student.classid = class.classid
这种场景下得到的是满足某一条件的student,class内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。
三、通过外连接left join,left outer join,right join,right outer join,union进行查询
1.left join
语法:
select 字段名
from 表1
left join 表2
on 表1.字段 =
例:以学生表student和班级表class为例
select student.* , class.*
from student
left join class
on student.classid = class.classid
结果如下,class表中不存在的记录填充Null:
这种场景下得到的是student的所有数据,和满足某一条件的class的数据;
2.left outer join(相当于left join + [where 表2.字段 is null])
语法:
select 字段名
from 表1
left join 表2
on表1.字段 =
where 表2.字段
is
null
例:以学生表student和班级表class为例
select student.sid,student.sname,class.classid,class.classname
from student
left join class
on student.classid = class.classid
where class.classid is null
这种场景下得到的是student中的所有数据减去"与class满足同一条件 的数据",然后得到的student剩余数据
3.right join
语法:
select 字段名
from 表1
right join 表2
on 表1.字段 = 表2.字段
例:以学生表student和班级表class为例
select student.* , class.*
from student
right join class
on student.classid = class.classid
这种场景下得到的是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为例
select student.sid,student.sname,class.classid,class.classname
from student
right join class
on student.classid = class.classid
where student.classid is null
这种场景下得到的是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为例
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
这种场景下得到的是满足某一条件的公共记录,和独有的记录