大家好,我是宁一。
今天讲解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
下节课,我们来讲讲聚合函数。
点击关注,更新课程第一时间通知哦~
留言与评论(共有 0 条评论) “” |