MySQL数据库——组合查询

这一次说下如何利用UNION操作符实现组合查询,即将多条SELECT语句组合成一个结果集。

我们目前每次使用数据库查询都是用单个SELECT来用的,但是MySQL也允许执行多个查询,就是说多个SELECT,但是是一个结果集。这样的组合查询称为并(union),也叫复合查询。

有两种情况,我们需要用到组合查询:
1.在单个查询中从不同的表返回类似结构的数据;
2.对单个表执行多个查询,按单个查询返回数据;

TIP: 组合查询和多个WHERE条件 。 我们可以发现,多数情况下,组合相同表的两个查询和多个WHERE子句条件的单SELECT查询功能类似。但是从性能上讲,我们可以实验一下,看看哪个更好。

part 1 创建组合查询

可用UNION操作符来组合多条SQL语句。

SELECT coder.name FROM coder UNION SELECT git.name FROM git;

可以看见,这条语句由前面两条SELECT语句组成,语句中用UNION关键字分隔。
UNION只是MySQL执行两条SELECT语句,并把输出组合成单个查询结果集。

part 2 组合查询的UNION的规则

1.UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔,所以说如果是4条SELECT语句,需要使用三个UNION关键字。

2.UNION中每个SELECT查询必须包含相同的列、表达式或聚集函数,不过各列不必以相同的顺序出现。

3.列数据类型必须兼容,就是说类型不必完全相同,但是必须是数据库可以隐含转换的类型。

part 3 包含或取消重复的行

不过说 我们只要改一下刚刚的例子就可以

SELECT coder.name FROM coder UNION ALL SELECT git.name FROM git;

在上面返回的结果集中,会发现他是包含重复name行地! 就是说,我们UNION查询在结果集中默认去除了重复的行,这是默认行为,但是如果需要我们可以改变他,我们可以用UNION ALL返回所有匹配的行。

part 4 对组合查询结果进行排序

我们还是看例子吧:

SELECT coder.name FROM coder UNION ALL SELECT git.name FROM git ORDER BY name;

在UNION组合查询中,只能使用一条ORDER BY子句,他必须出啊现在最后一条SELECT语句之后。 但是这个排序是作用于最终的结果集地,不存在排序一部分的问题,也不能使用多条 ORDER BY 子句。

你可能感兴趣的:(MySQL数据库基础)