《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条件和组合查询都能够办到的事情,我们最好都测试一下,以确定对特定的查询哪一种性能更好。
相关文章推荐
- MySQL数据库的CRUD操作
- MySQL数据库的连接
- MySQL数据库的连接
- mysql函数编写和存储过程
- mysql索引总结----mysql 索引类型以及创建
- mySQL
- mybatis对mysql进行分页
- MySQL 使用方法简单教程
- MySQL 警告WARN: Establishing SSL connection without server's identity verification is not recommended.解决办法
- mysql安装
- 安装MySQL时停在start server解决办法
- mysql存储过程详解
- mysql自定义函数
- MySQL系列:mysqldump备份具
- mysql小笔记
- MySQL中MySQL Information_Schema表
- mysql常用命令
- MySQL服务基础
- win7 64位下如何安装配置mysql
- Mysql