前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL 多表联查学习笔记

SQL 多表联查学习笔记

作者头像
EmoryHuang
发布2022-10-31 15:44:24
4980
发布2022-10-31 15:44:24
举报
文章被收录于专栏:EmoryHuang's Blog

SQL 多表联查学习笔记

前言

在操作数据库时,面对一张表时往往没什么太大问题,但实际上大多数的查询需要涉及到多张表,进行多表联查;本文主要记录了本人在学习 SQL 多表联查的一些操作。

准备工作

在开始之前,我们准备了两张表,作为下面操作的对象。

学生信息表

id

学号

姓名

性别

年龄

1

210001

A

18

2

210002

B

18

3

210003

C

17

4

210004

D

19

5

210005

E

17

6

210006

F

18

专业班级表

id

学号

专业

班级

1

210001

数学

数 1

2

210003

计算机

计 1

3

210004

软件工程

软 2

4

210005

计算机

计 3

5

210007

物理

物 1

6

210008

英语

英 2

内连接(INNER JOIN)

使用场景:获取两个表中指定字段满足匹配关系的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
INNER JOIN Table_B B
ON A.Key = B.Key

查询示例:

获取每个学生的学号、姓名、性别、年龄、专业、班级信息

代码语言:javascript
复制
SELECT A.学号, A.姓名, A.性别, A.年龄, B.专业, B.班级
FROM student A
INNER JOIN class B
ON A.学号 = B.学号

-- 你也可以省去 INNER,直接写 JOIN
SELECT A.学号, A.姓名, A.性别, A.年龄, B.专业, B.班级
FROM student A
JOIN class B
ON A.学号 = B.学号

查询结果:

id

学号

姓名

性别

年龄

专业

班级

1

210001

A

18

数学

数 1

2

210003

C

17

计算机

计 1

3

210004

D

19

软件工程

软 2

4

210005

E

17

计算机

计 3

左连接(LEFT JOIN)

使用场景:获取左表中的所有记录,即使在右表没有对应匹配的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key

查询示例:

获取每个学生的学号、姓名、性别、年龄、专业、班级信息

代码语言:javascript
复制
SELECT A.学号, A.姓名, A.性别, A.年龄, B.专业, B.班级
FROM student A
LEFT JOIN class B
ON A.学号 = B.学号

查询结果:

id

学号

姓名

性别

年龄

专业

班级

1

210001

A

18

数学

数 1

2

210002

B

18

NULL

NULL

3

210003

C

17

计算机

计 1

4

210004

D

19

软件工程

软 2

5

210005

E

17

计算机

计 3

6

210006

F

18

NULL

NULL

右连接(RIGHT JOIN)

使用场景:获取右表中的所有记录,即使在左表没有对应匹配的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key

查询示例:

获取每个学生的学号、姓名、性别、年龄、专业、班级信息

代码语言:javascript
复制
SELECT A.学号, A.姓名, A.性别, A.年龄, B.专业, B.班级
FROM student A
RIGHT JOIN class B
ON A.学号 = B.学号

查询结果:

id

学号

姓名

性别

年龄

专业

班级

1

210001

A

18

数学

数 1

2

210003

C

17

计算机

计 1

3

210004

D

19

软件工程

软 2

4

210005

E

17

计算机

计 3

5

NULL

NULL

NULL

NULL

物理

物 1

6

NULL

NULL

NULL

NULL

英语

英 2

完全连接(FULL JOIN)

使用场景:获取两个表中的所有行

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
FULL JOIN Table_B B
ON A.Key = B.Key

FULL OUTER JOIN 或者 FULL JOIN 都可以

查询示例:

获取每个学生的学号、姓名、性别、年龄、专业、班级信息

代码语言:javascript
复制
SELECT A.学号, A.姓名, A.性别, A.年龄, B.专业, B.班级
FROM student A
FULL JOIN class B
ON A.学号 = B.学号

查询结果:

id

学号

姓名

性别

年龄

专业

班级

1

210001

A

18

数学

数 1

2

210002

B

18

NULL

NULL

3

210003

C

17

计算机

计 1

4

210004

D

19

软件工程

软 2

5

210005

E

17

计算机

计 3

6

210006

F

18

NULL

NULL

7

NULL

NULL

NULL

NULL

物理

物 1

8

NULL

NULL

NULL

NULL

英语

英 2

左表唯一(LEFT Excluding JOIN)

使用场景:获取左表有但右表没有关联数据的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
LEFT JOIN Table_B B
ON A.Key = B.Key
WHERE B.Key IS NULL

右表唯一(RIGHT Excluding JOIN)

使用场景:获取右表有但左表没有关联数据的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
RIGHT JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL

非交集连接(Outer Excluding JOIN)

使用场景:获取左表和右表里没有相互关联的记录

代码语言:javascript
复制
SELECT <select_list>
FROM Table_A A
FULL OUTER JOIN Table_B B
ON A.Key = B.Key
WHERE A.Key IS NULL OR B.Key IS NULL

总结

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-09-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SQL 多表联查学习笔记
    • 前言
      • 准备工作
        • 学生信息表
        • 专业班级表
      • 内连接(INNER JOIN)
        • 左连接(LEFT JOIN)
          • 右连接(RIGHT JOIN)
            • 完全连接(FULL JOIN)
              • 左表唯一(LEFT Excluding JOIN)
                • 右表唯一(RIGHT Excluding JOIN)
                  • 非交集连接(Outer Excluding JOIN)
                    • 总结
                      • 参考资料
                      领券
                      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档