大家好,我是宁一。

今天讲解SQL教程第13课:UNION 联合查询。

前两节课讲的JOIN连接,可以对多个表进行横向列合并。

这节课讲的UNION 操作符,是将多个查询结果,按行纵向合并。

基本语法:

SELECT  <字段名>  FROM  <表名>
UNION
SELECT  <字段名>  FROM  <表名>

1、单张表联合查询

UNION 合并结果集的时候,如果合并的结果集中有重复行,只会保留其中一行。

实例: 查询出Students表中,将学生编号Sid为2到5的记录和1到3的记录通过UNION联合起来。

实例解析: UNION上面的结果集中有Sid为1、2、3的记录,UNION下面的结果集中有Sid为2、3、4、5的记录。UNION联合时,会只保留重复行(即Sid为2、3的记录)其中的一行。

SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3

如果想要保留所有重复行,可以使用UNION All合并结果集。

SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION ALL
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3

2、不同表联合查询

UNION 操作符上下两个结果集的列数必须相等,否则会报错。

最终合并表的列名,由上面的结果集决定。

实例: 将Students表中,生日Sage在1995年之前出生的学生姓名Sname与Teachers表中老师姓名Tname合并。

SELECT Sname FROM Students
WHERE Sage < '1995-01-01'
UNION
SELECT Tname FROM Teachers

3、语句执行顺序

如果后面跟了ORDER BY、LIMIT子句,这些子句不是只作用于最后一个查询语句,而是会等UNION将结果集合并之后再执行。

SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3
ORDER BY Sid

ORDER BY 会等结果集合并之后,再给整个结果集排序,不是只作用于最后一个查询语句。

LIMIT子句也会等结果集合并之后,再取前几条记录。

SELECT * FROM Students
WHERE Sid BETWEEN 2 AND 5
UNION
SELECT * FROM Students
WHERE Sid BETWEEN 1 AND 3
LIMIT 2

下节课,我们来讲讲聚合函数。

点击关注,更新课程第一时间通知哦~

更多推荐

零基础自学SQL课程 | UNION 联合查询