一文讲懂SQL联合查询UNION

大家好,我是宁一。


今天讲解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


一文讲懂SQL联合查询UNION


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


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


一文讲懂SQL联合查询UNION


2、不同表联合查询


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


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


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


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


一文讲懂SQL联合查询UNION


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


一文讲懂SQL联合查询UNION


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


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


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

一文   SQL   UNION
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章