【MySQL必知必会】第17章:组合查询

多数SQL查询都只使用单条SELECT语句。但MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为(union)或复合查询(compound query)。

以下两种情况时需要使用到组合查询:

  • 单个查询中返回不同表类似结构的数据
  • 执行多个查询,按单个查询返回数据

17.1 创建组合查询

使用UNION函数来组合数条单个SELECT语句的SQL查询:

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来分隔两条SELECT语句,将其各自检索的结果合并后返回称单个查询的结果集

  • 也可以使用WHERE子句,但是对于更复杂的过滤条件或从多表检索数据的情况,使用UNION会更简单而且便于理解

17.2 UNION规则

  • UNION用于分隔两条或两条以上的SELECT语句
  • UNION中的每个查询必须包含相同的列、表达式或聚集函数

17.3 包含或取消重复行

UNION默认会从查询结果中自动去除重复的行,如果需要更改,返回所有匹配行,那么久需要使用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);

17.4 对组合查询结果的排序

在使用UNION时,只能使用一条ORDER BY子句,且必须出现在最后一条SELECT语句之后

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 vend_id, prod_price;
  • 似乎ORDER BY子句只对最后一条SELECT语句的组成部分,但实际上MySQL将其用来排序所有SELECT语句返回的结果

你可能感兴趣的:(【MySQL必知必会】第17章:组合查询)