您的位置:首页 > 数据库 > MySQL

《MySQL必知必会学习笔记》组合查询

2016-04-04 18:49 357 查看

组合查询

到目前为止,我们接触的查询都是只有一个select的查询语句,其实,MySQL也允许通过多个select语句来执行多个查询,并将结果作为单个结果集返回。这种组合查询通过称为并(union)或是复合查询。

有如下两种情况,需要使用组合查询:

在单个查询中从不同的表中返回结构类似的数据结果。

在单个表中多次查询,按单个查询返回数据。

创建组合查询

创建组合查询比较简单,直接用 union将多个查询语句组合起来即可。

下面举个例子来讲解组合查询。

现在有一个student表,里面学生ID、姓名、成绩。

现在我们想查询及格的学生的信息以及我特别关注的人(wu,wuran)这两个人的信息。那面对这个需要我们应该怎么实现呢???

对于这个需求,我们都知道,可以直接利用多个where 条件来实现即可。

的确,用where条件确实可以来实现,如下:



除了利用多个where条件来实现之外,我们也可以利用组合查询来完成。

组合查询就是将单条查询语句通过union组合起来即可。

例如:查询及格的学生信息的查询语句如下所示:

select name,score from student where score>=60;


而查询我特别关注的学生(wu,wuran)这两个人的信息的查询语句如下:

select name,score from student where name in ('wu','wuran');


上面两个单独的查询结果如下:



组合查询就是将上面介绍的两个查询语句用 union连接起来就可以了。

如下:



从结果可以看出两点

第一点为:通过组合查询和通过where查询的结果是一样的。

第二点为:直接用union 来连接单个的select语句,是将重复的结果进行了过滤的。

包含或取消重复的行

如果我们想不过滤重复的结果(即允许结果多次显示),应该怎么做呢?

用多个where条件语句是没有办法做到的,因为where语句是直接将多余的行进行了过滤。而组合查询就能够做到这一点。

直接用union all来连接单个的select语句即可。

如下:



上面对union和union all进行了应用,下面对应用组合查询的规则进行一个介绍。

1、union连接两个select语句。如果有3个select语句,则要2个union关键字进行分隔开。

2、union中的每个单独的查询语句返回的数据必须具有相同的列、表达式或聚集函数。且列的数据类型必须兼容(即要么相同,要么可以隐式的转化为同一数据类型)。

对组合查询结果排序

上面只是进行了组合查询,如果我们想多结果进行排序,是应该在每个select语句后面加了,还是只是在最后一个select语句的后面加order by子句呢??

答案是:对于结果集,不存在用一种方式排序一部分,而又用另一种方式排序零一部分的情况。因此,不允许使用多条order by 子句。



小结

一般用多个where条件完成的查询,用union 组合查询也可以完成。而如果想要求结果中不过滤重复的行,则多个where条件时没有办法办到的,而通过组合查询union all可以做到。

但是,对于多个where条件和组合查询都能够办到的事情,我们最好都测试一下,以确定对特定的查询哪一种性能更好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: