Mysql可以将多个查询(多条select语句)的结果作为单个查询结果集返回。
(实质是记录上的拼接,是一种并操作)
基本有两种情况:联合相同表的查询和联合不同表的查询。联合相同表的查询其实等价于某条具有多个where子句的select语句。
例子:
select name,id,age
from students
where age<=20
union
select name,id,age
from studnets
where id in (14,15);
等价于:
select name,id,age
from students
where age <= 20
or id in (14,15);
注意:
1 union必须由两条或两条以上的select语句组成,语句之剑用关键字union分隔
(查询结果的列标题为第一个查询语句的列标题)
2 union中的每个查询必须包含相同的列,表达式或聚集函数(数量相同,类型相同或者可转换)
3 列数据类型必须兼容:类型不必完全相同,但必须是dbms可以隐含转换的类型。
(在自动转换时,对于数值类型,系统将低精度的数据类型转换为高精度的数据类型。)
union默认在查询结果中去除重复的行,如果想返回所有匹配行,使用union all
order by在一个数据集合查询里也只能出现一次并且出现在最后。
因此,在联合查询里,order by 要写在最后一个子查询之后,并且,该排序是对整个联合查询出来的结果集排序的,并不是只对最后一个子查询排序(在union之后)
要在子句中使用 ORDER BY,即将select子句的结果先排序,然后再把这些子句查询的结果进行集合。
在子句中使用 ORDER BY,由于优先级问题,需要将整个子句加圆括号(),且必须与limit 结合使用: