MySQL必知必会——第17章 组合查询 读书笔记

如何利用UNION操作符将多条select语句组合成一个结果集
1 what is 组合查询?
多数SQL查询都只包含从一个或多个表中返回数据的单条select语句。MySQL也允许执行多个查询(多条select语句),并将结果作为单个查询结果集返回。
2 how to create 组合查询?
可用UNION操作符来组合数条SQL查询。利用UNION,可给出多条SELECT语句,将它们的结果组合成单个结果集。
UNION的使用很简单, 所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。
举例:假设需要价格小于等于5的所有物品的一个列表,而且还想包括供应商1001和1002生产的所有物品(不考虑价格)。
先实现单条语句:
①价格小于等于5的所有物品列表

select vend_id,prod_id,prod_price
from products
where prod_price <= 5;

查询结果:
在这里插入图片描述
②供应商1001和1002生产的所有物品

select  vend_id,prod_id,prod_price
from products
where vend_id in (1001,1002);

查询结果:
在这里插入图片描述
将多条select语句通过UNION组合起来:

select vend_id,prod_id,prod_price
from products
where prod_price <= 5
UNION
select  vend_id,prod_id,prod_price
from products
where vend_id in (1001,1002);

查询结果:
在这里插入图片描述
UNION指示MySQL执行两条SELECT语句,并把输出组合成单个查询结果集
也可以使用多个where子句而不是使用UNION:

select vend_id,prod_id,prod_price
from products
where prod_price <= 5 OR  vend_id IN (1001,1002);

在这个简单的例子中,使用UNION可能比使用WHERE子句更复杂。对于更复杂的过滤条件,或者从多个表(而不是单个表)中检索数据的情形,使用UNION可能会使处理更简单。
3 UNION规则
①UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
②列数据类型必须兼容,类型不必完全相同,但必须是DBMS可以隐含转换的类型。
4 包含或取消重复的行
看上述举的例子,第一条SELECT语句返回4行,第二条SELECT语句返回5行。在UNION组合两条SELECT语句后,只返回了8行而不是9行。
UNION从查询结果集中自动去除了重复的行。换句话说,它的行为与单条SELECT语句中使用多个WHERE子句条件一样。这是UNION 的默认行为,如果需要,可以改变它。如果想要返回所有匹配行,可使用UNION ALL而不是UNION。
UNION几乎总是完成与多个WHERE条件相同的工作。UNION ALL为UNION 的一种形式,它完成WHERE子句完成不了的工作。如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用UNION ALL 而不是WHERE。
5 对组合查询结果排序
在使用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条ORDER BY子句。
虽然ORDER BY子句似乎只是最后一条SELECT语句的组成部分,但实际上MySQL用它来排序所有SELECT语句返回的所有结果。
使用UNION的组合查询可以应用于不同的表。

发布了90 篇原创文章 · 获赞 8 · 访问量 8233

猜你喜欢

转载自blog.csdn.net/weixin_43854189/article/details/103943360