MySQL之组合查询(UNION)

本文主要介绍如何利用UNION操作符将多条SELECT语句组合成一个结果集。

I、组合查询基础

1、MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为(union)或组合查询。

2、通常情况下,组合相同表的两个查询完成的工作与具有多个WHERE子句条件的单条查询完成的工作相同。

II、创建组合查询

1、使用UNION来创建组合查询。

2.1 使用UNION

UNION的使用非常简单,我们通过一个实例来说明:

我们要组合下面两个SELECT语句:

# SELECT 1
> SELECT vend_id, prod_id, prod_price
   FROM products
   WHERE prod_price <= 5;
# SELECT 2  
> SELECT vend_id, prod_id, prod_price
   FROM products
   WHERE vend_id IN (1001, 1002);
# 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);

2、如果所用UNION的列出现不同,则会报错:The used SELECT statements have a different number of columns

3、可以看出UNION关键字的作用就是,其相当于:

# SELECT OR
> SELECT vend_id, prod_id, prod_price
   FROM products
   WHERE prod_price <= 5
   OR vend_id IN (1001, 1002);
2.2 UNION使用规则

1、UNION必须由两条或两条以上的SELECT语句组成,语句之间,用关键字UNION分割;

2、每个查询中必须包含相同的列、表达式或聚集函数,不过各个列不需要以相同的次序列出。

3、列数据类型必须兼容:不必完全相同,但必须是DBMS可以隐含地转换的类型。

2.3 包含或取消重复的行

1、UNION的查询结果是,即完成了一个去重操作,而UNION ALL则会输出重复查询结果。

# UNION ALL  
> SELECT vend_id, prod_id, prod_price
   FROM products
   WHERE prod_price <= 5
   UNION ALL
   SELECT vend_id, prod_id, prod_price
   FROM products
   WHERE vend_id IN (1001, 1002);  

对比与之前UNION的输出结果,这里UNION ALL会将1002 FU1 3.42一行重复输出。

2.4 查询结果排序

1、同样使用ORDER BY对查询结果进行排序,但需要注意的是UNION组合查询中只能使用一个ORDER BY子句,其作用域整体的查询结果。

# UNION ORDER BY
> 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)
   ORDER BY prod_price;

【参考】
[1] 《MySQL必知必会》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容