大家好,在日常学习中分享一下所学的笔记,希望可以帮助到大家~
本篇将多表联查分为三部分来介绍:
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为例
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.字段 = 表2.字段
**
例:以学生表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.字段 = 表2.字段
**
**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
这种场景下得到的是满足某一条件的公共记录,和独有的记录
以上分享希望能帮到你,有错误及时指正哦~
版权归原作者 Ran959 所有, 如有侵权,请联系我们删除。