![f391ce876b2f4f743ccf787feea67843.png](https://i-blog.csdnimg.cn/blog_migrate/cf472eac97c5f9d41f3a00cdafabc644.jpeg)
在上一篇文章里,我们学习了SQL的复杂查询,但是依然只是针对一个表的,但在实际工作中,我们需要的数据,往往分布在多个表中,所以为了更好的解决工作中的实际问题,今天我们一起来学习如何用SQL进行多表查询吧!
1.表的加法
在之前的学习中,我们建了一张表course,大家还记得吗?
![9597a8feb3bcec0b2dd4f8b69cece0d5.png](https://i-blog.csdnimg.cn/blog_migrate/4ad43906691a0d3284e2ee27cef53605.jpeg)
接下来我们再数据库中再添加一张表course1,如下:
![2284baef6f4ccb6c0aa438f6719abcb5.png](https://i-blog.csdnimg.cn/blog_migrate/fe3e1efcfb3342ee8c0c8857a780ce5f.jpeg)
如果大家忘记了如何新建表并向表中插入数据,就回到何书365:轻松搞定数据分析之MySQL——零基础入门里面再复习一下吧!
当然你也可以按如下步骤操作来添加course1:
![9d8e0d3326593d47281e9c13929ec211.png](https://i-blog.csdnimg.cn/blog_migrate/00167003e385a4361e916c93acff16a5.jpeg)
右键,复制表,结构和数据,得到复制的表course_copy
![0617b741c57ad3f169d13fb983926134.png](https://i-blog.csdnimg.cn/blog_migrate/d8a8436517a54ca0a72427220d025cd5.jpeg)
重命名,将表名course_copy重命名为course1
![2adc8ff95ec8770b46a9a0eb83cfa7ea.png](https://i-blog.csdnimg.cn/blog_migrate/5c9f8dcad55ec72fc42d05d27722f2e3.jpeg)
右键,打开表,对数据进行修改并保存。
添加完course1这张表,现在在school数据库中,我们就有了两张关于课程信息的表。大家可以看到course和course1这两张表的结构是一样的,不同的是两张表内在图片红框标出的地方存放的数据是不一样的。
![d09932a93ce0b8c73b198469cc0c9e7a.png](https://i-blog.csdnimg.cn/blog_migrate/f0902b514b90b0a92b2dadeb7a11c434.jpeg)
下面,我们用这两张表来学习表的加法,来把这两张表中的数据组合在一起。表的加法,我们要用UNION来实现。
UNION的作用 UNION运算符用于组合两个或更多SELECT语句的结果集。
UNION使用前提UNION中的每个SELECT语句必须具有相同的列数
- 这些列也必须具有相似的数据类型
- 每个SELECT语句中的列也必须以相同的顺序排列
UNION 语法
SELECT column_name(s) FROM table1UNIONSELECT column_name(s) FROM table2;
下面,我们以上面两张课程表为栗子,看一下union的用法:
SELECT 课程号,课程名称from courseUNIONselect 课程号,课程名称FROM course1;
![03747ddbf3ab5c8eb0b32773a44e4789.png](https://i-blog.csdnimg.cn/blog_migrate/0adac72603bcbb2b2738635de63a4735.jpeg)
从结果表中可以看到,course和course1两张表中不同的数据合并在一起了(红框内的数据),而且绿框中为两张表中重复的数据,SQL会把重复值删除,只保留一个值。
如果允许重复值,请使用 UNION ALL。
UNION ALL 语法
SELECT column_name(s) FROM table1UNION ALLSELECT column_name(s) FROM table2;
※ 注:UNION结果集中的列名总是等于UNION中第一个SELECT语句中的列名。
SELECT 课程号,课程名称from courseUNION ALLselect 课程号,课程名称FROM course1;
![33d4b087443a585390bce23c42916438.png](https://i-blog.csdnimg.cn/blog_migrate/f77898976669c1aa0731362d21a675ca.jpeg)
如结果所示,两个表中的共有的数据“0001,语文”的重复数据都被保留下来了。
总结:
- UNION就是将多段功能类似的SQL连接起来,并且可以去掉重复的行,有DISTINCT的功能。
- UNION ALL则只是单纯的将多段类似SQL连接起来而且。他们的好处是可以将复杂SQL按不同的功能或作用拆分成一小段SQL进行拼接,可以有效提高查询效率。
2.表的联结
学习完了表的加法,接下来我们来学习表的联结。
关系型数据库是由多张表组成的,如下图,即为school数据库中的四张表:
![8293d5cfb4bb43539fd4bb920dd72dee.png](https://i-blog.csdnimg.cn/blog_migrate/9143b3d31be3aadd9d15e28063dfdeaf.jpeg)
看到这四张表,你能发现他们之间有什么关系吗?