前言

端午节快乐呀~

组合查询

前面我们学习的都只有一条SELECT语句,其实MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并( union) 或复合查询(compound query)。

有两种基本情况,其中需要使用组合查询:
 在单个查询中从不同的表返回类似结构的数据;
 对单个表执行多个查询,按单个查询返回数据。

创建组合查询

组合查询我们借助UNION关键字来实现。

使用UNION

UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。我们来看下面的例子

比如我们想在表student中查询年龄大于18的记录

mysql 两数组匹配 mysql 组合查询_组合查询


并且我们想从表student中查询班级是3班的记录

mysql 两数组匹配 mysql 组合查询_查询语句_02


上面的两个查询,那么我们现在借助关键字UNION来实现组合查询

mysql 两数组匹配 mysql 组合查询_结果集_03


这样我们就得到了四条记录,它分别执行两条查询语句,然后把它们各自的结果组合起来得到一个新的结果集。(当然这样的效果我们也可以通过一条查询语句结合OR关键字来实现)。

需要注意的是,我们在借助关键字UNION组合查询语句A和B是,要保证查询语句A返回的记录的列数与查询语句B返回的记录的列数一致。

mysql 两数组匹配 mysql 组合查询_组合查询_04


这样就是不对的,因为第一条查询返回三列,第二个只有一列。

同样的,多条查询语句的用法也是类似的。

UNION规则

关于UNION的用法,我们需要注意以下四点:

  1. UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个UNION关键字)。
  2. UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)。
  3. 列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)

包含或取消重复的行

这是什么意思呢?我们现在有一个查询语句A,它返回的记录分别是a,b,c,现有另一条查询语句B,它返回的记录分别是a,d,e,那么我们通过关键字UNION把它们组合查询后,返回的记录是什么样的呢?答案是a,b,c,d,e,为什么只有五条记录,而不是六条记录呢?因为a与a重复,UNION自动去掉重复的行,所以结果不是a,b,c,a,d,e。

那么我现在不需要你取消重复的行,我们就需要借助UNION ALL来实现。

mysql 两数组匹配 mysql 组合查询_结果集_05

对组合查询结果排序

SELECT语句的输出用ORDER BY子句排序。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

看下面的例子

mysql 两数组匹配 mysql 组合查询_查询语句_06

我们要搞清楚执行的先后顺序,是先执行完组合查询后,再执行ORDER BY子句。

mysql 两数组匹配 mysql 组合查询_组合查询_07

今天的内容比较简单,祝大家端午安康~