通常情况下,SQL查询语句都只包含从一个或多个表中返回数据的单条语句。在MySQL中允许执行多条select语句的查询,并将结果作为单个查询结果集返回,即组合查询。
组合查询,可以使用UNION关键字来组合多条查询语句。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。即给出每条SELECT语句,在各语句之间加上关键字UNION。
示例:查询学生编号小于105的学生列表,而且包括姓‘王’和姓‘李’的所有学生
先实现单条语句:
①学生编号小于105的学生列表
select s.s_no,s.s_name from student s where s.s_no <105
查询结果:

②姓‘王’和姓‘李’的所有学生
select s.s_no,s.s_name from student s where s.s_name like '王%' or s.s_name like '李%'
查询结果:

将上述select语句通过UNION组合起来:
select s.s_no,s.s_name from student s where s.s_no <105
UNION
select s.s_no,s.s_name from student s where s.s_name like '王%' or s.s_name like '李%'
查询结果:

UNION指示MySQL执行两条SELECT语句,并把输出组合成单个查询结果集
上述示例也可以使用多个where子句而不是使用UNION:
select s.s_no,s.s_name from student s where s.s_no <105 or s.s_name like '王%' or s.s_name like '李%' ;
可以看出,上述例子中,使用UNION可能比使用WHERE子句更复杂。对于更复杂的过滤条件,或者从多个表(而不是单个表)中检索数据的情形,使用UNION可能会使处理更简单。
使用UNION组合查询适用于以下两种情况
- 在单个查询中从不同的表中返回类似结构的数据;
- 在对单个表执行多个查询,按照单个查询返回数据。
注意:
1.UNION从查询结果中会自动删除重复行,where也是会自动去除重复行
2.UNIONAll 则不会从结果中自动删除重复行。
3.必须由两条或者两条以上的select语句组成,语句之间用关键字union分隔
4.组合查询可以组合不同的表之间的查询,但是要保证查询的返回的列,表达式,或者聚合函数保持一致。
5、对组合查询结果的排序
Select 语句的输出用order by子句排序,在用union查询时,只能在最后一条select子句之后使用order by,不允许使用多条order by 子句。
网友评论