0


数据库多表链接查询的方式

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

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

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

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

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

标签: sql 数据库 database

本文转载自: https://blog.csdn.net/weixin_67588007/article/details/124832788
版权归原作者 Ran959 所有, 如有侵权,请联系我们删除。

“数据库多表链接查询的方式”的评论:

还没有评论