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);
MySQL之组合查询(UNION)_第1张图片
# 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);
MySQL之组合查询(UNION)_第2张图片

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);
MySQL之组合查询(UNION)_第3张图片
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);  
MySQL之组合查询(UNION)_第4张图片

对比与之前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;
MySQL之组合查询(UNION)_第5张图片

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

你可能感兴趣的:(MySQL之组合查询(UNION))