本人已参与「新人创作礼」活动,一起开启掘金创作之路。
持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情
目录
今天阿文介绍的内容:
- 如何
合并查询结果?
合并查询结果
在MySQL中可以利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。
合并查询结果的要求:
- 两个表对应的列数和数据类型必须
相同 - 各个SELECT语句之间使用
UNION或UNION ALL关键字分隔。 - UNION不适用关键字ALL,执行后将
删除重复的记录,返回的行都是唯一的 - 使用关键字ALL的作用是
不删除重复行也不对结果自动排序
语法格式:
SELECT 字段1,... FROM 表名1
UNION [ALL]
SELECT 字段1,... FROM 表名2;
例子:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0
UNION SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN (101, 103);
查询结果:
可以分开查看两个SELECT语句的查询结果:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0;
查询结果:
SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN (101, 103);
查询结果:
可以看到使用UNION关键字将两个SELECT语句的查询出的结果组合成一个结果集合,并删除重复的记录。
在前面的例子中,分开查询时,两个返回结果中有相同的记录,将自动删除。UNION从查询结果集中自动去除了重复的行,如果要返回所有匹配行,而不进行删除,可以使用UNION ALL。
例子:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0
UNION ALL
SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN (101, 103);
查询结果:
由结果可以看到,这里总的记录数等于两条SELECT语句返回的记录数之和,连接查询结果并没有去除重复的行。
提示: UNION和UNION ALL的区别:使用UNION ALL的功能是不删除重复行,加上ALL关键字语句执行时所需要的资源少,所以尽可能地使用它,因此知道有重复行但是想保留这些行,确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用UNION ALL以提高查询效率。
总结
- 使用UNION关键字或UNIOB ALL关键字实现两个及两个以上的SELECT语句查询结果合并
- UNION和UNION ALL的合并效果是
不相同的,前者删除重复的数据,后者则不删除重复的数据
好了,今天阿文就介绍到这了... byebye