组合查询
有两种基本情况,其中需要使用组合查询:
- 在单个查询中从不同的表返回类似结构的数据;
- 对单个表执行多个查询,按单个查询返回数据。
任何具有多个WHERE子句的SELECT语句都可以作为一个组合查询给出。
使用组合查询
可用UNION操作符来组合数条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可能会使处理更简单。
UNION规则
- UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔;
- UNION中的每个查询必须包含相同的列、表达式或聚集函数;
- 列数据类型必须兼容:类型不必完全相同,但必须时DBMS可以隐含地转换的类型。
重复的行
UNION从查询结果集中自动去除重复的行。
如果想返回所有匹配行,可使用UNION ALL而不是UNION。
对结果排序
在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。
虽然只在最后一条语句后,但是对所有返回结果进行排序。
使用UNION的组合查询可以应用不同的表。