SQL入门之第十二讲——UNION 联合查询
·
UNION 联合查询定义:
- 之前的JOIN连接,是可以对多个表进行横向列的合并,而不能对按行进行纵向合并。
- UNION操作符,则是可以将多个查询结果,按行进行纵向合并
基本语法:
SELECT <字段名> FROM <表名>
UNION
SELECT <字段名> FROM <表名>
1. 单表查询
- **UNION **在进行合并结果集的时候,如果合并的结果集中有重复行,只会保留其中一行。
实例1:查询学生表中,将学生编号Sid为2-5的记录和1-3的记录通过UNION联合起来
select * from
students where Sid between 2 and 5
union
select * from
students where Sid between 1 and 3
解析:
union上面的这个表查询出的结果集中有2,3,4,5的记录,union下面的表查询出的结果有1,2,3
而通过union联合查询时,只会保留重复行(Sid为2和3的记录)其中的一行。
执行结果:
- UNION ALL 在进行合并结果集的时候,如果合并的结果集中有重复行,都会将重复行全部显示出来
还是以刚才的那个实例,将 UNION 改成 UNION ALL 在试一试
select * from students
where Sid between 2 and 5
union all
select * from students
where Sid between 1 and 3
执行结果:
2. 多表联合查询
- UNION操作符上下两个结果集的列数必须相等,否则则会报错。
- 最终合并的列名,由UNION上面的结果集决定,上面的列名叫啥最终显示啥。
实例2:查询学生表中,年龄Sage在1995年之前出生的学生姓名和教师表中的老师名字进行合并显示
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 是等union将结果进行合并之后才对结果集排序的。
LIMIT 子句也会等结果集进行合并之后才会执行次操作。
select * from students
where Sid between 2 and 5
union
select * from students
where Sid between 1 and 3
order by Sid
limit 3
执行结果:
更多推荐
已为社区贡献8条内容
所有评论(0)