联合查询(mysql)

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 结合使用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值