前言
端午节快乐呀~
组合查询
前面我们学习的都只有一条SELECT语句,其实MySQL也允许执行多个查询(多条SELECT语句),并将结果作为单个查询结果集返回。这些组合查询通常称为并( union) 或复合查询(compound query)。
有两种基本情况,其中需要使用组合查询:
在单个查询中从不同的表返回类似结构的数据;
对单个表执行多个查询,按单个查询返回数据。
创建组合查询
组合查询我们借助UNION关键字来实现。
使用UNION
UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。我们来看下面的例子
比如我们想在表student中查询年龄大于18的记录
并且我们想从表student中查询班级是3班的记录
上面的两个查询,那么我们现在借助关键字UNION来实现组合查询
这样我们就得到了四条记录,它分别执行两条查询语句,然后把它们各自的结果组合起来得到一个新的结果集。(当然这样的效果我们也可以通过一条查询语句结合OR关键字来实现)。
需要注意的是,我们在借助关键字UNION组合查询语句A和B是,要保证查询语句A返回的记录的列数与查询语句B返回的记录的列数一致。
这样就是不对的,因为第一条查询返回三列,第二个只有一列。
同样的,多条查询语句的用法也是类似的。
UNION规则
关于UNION的用法,我们需要注意以下四点:
- UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个UNION关键字)。
- UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)。
- 列数据类型必须兼容:类型不必完全相同,但必须是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来实现。
对组合查询结果排序
SELECT语句的输出用ORDER BY子句排序。在用UNION组合查询时,只能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。
看下面的例子
我们要搞清楚执行的先后顺序,是先执行完组合查询后,再执行ORDER BY子句。
今天的内容比较简单,祝大家端午安康~