多数 SQL 查询都只包含从一个或多个表中返回数据的单条 select 语句。MySQL 也允许执行多个查询(多条 select 语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并(union)或复合查询。
有两种基本情况,需要使用组合查询:
在单个查询中从不同的表返回类似的结果的数据
对单个表执行多个查询,按单个查询返回的数据。
使用 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)
如果第一个 select 语句返回的结果在 第二个中select 语句返回的结果有相同的,那么只会保留一份,如下:
第一个select 返回的结果
1000 1 4
1002 2 3
第二个 select 语句返回的结果
1001 2 10
1002 2 3
用 union 联合查询后的结果如下,一共是 3 条结果
1000 1 4
1002 2 3
1001 2 10
使用 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)
这样就返回 4 条结果。
对查询结果进行排序
使用 union 组合查询时,只能使用一条 order by 字句,它必须出现在最后一条 select 语句之后。对于结果集,不存在用 一 种方式排序一部分,而又用另一种方式排序另一部分的情况,因此不允许使用多条 order by 字句。
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)
order by vend_id, prod_price