乐趣区

组合查询

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

退出移动版