Mysql 允许执行多个查询(多条 select 语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并或复合查询。
使用组合查询:
- 在单个查询中从不同的表返回类似结构的数据
- 对单个表执行多个查询,按单个查询返回数据
其中组合查询和多个 where 条件查询完成的工作相同。
创建组合查询
SELECT id,NAME,part,age FROM tablea WHERE age<=30
SELECT id,NAME,part,age FROM tablea WHERE id IN (1,4)
SELECT id,NAME,part,age FROM tablea WHERE age<=30
UNION
SELECT id,NAME,part,age FROM tablea WHERE id IN (1,4)
从中可以看出 union 指示 MySql 执行两条 select 语句,并把输出组合成单个查询结果集。
也可以使用多条 where 子句完成相同的功能:
SELECT id,NAME,part,age FROM tablea WHERE age<=30 OR id IN (1,4)
2 种方法都会自动去除了重复的行。如果确实需要每个条件的匹配行全部出现(包括重复行),则必须使用 union all 而不是 where。
union 规则
规则:
- union 必须由两条或两条以上的 select 语句组成,语句之间用关键字 union 分隔。
- union 中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)
- 列数据类型必须兼容:类型不必完全相同,但必须是 DBMS 可以隐含地转换的类型。
对组合查询结果排序
其中只能使用一条 order by 子句,它必须出现在最后一条 select 语句之后:
SELECT id,NAME,part,age FROM tablea WHERE age<=30
UNION
SELECT id,NAME,part,age FROM tablea WHERE id IN (1,4)
ORDER BY id DESC