【MySQL】合并查询结果

1,219 阅读1分钟

本人已参与「新人创作礼」活动,一起开启掘金创作之路。

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第25天,点击查看活动详情

目录

34870570.gif 今天阿文介绍的内容:

  • 如何合并查询结果

合并查询结果

在MySQL中可以利用UNION关键字,可以给出多条SELECT语句,并将它们的结果组合成单个结果集。

合并查询结果的要求:

  • 两个表对应的列数和数据类型必须相同
  • 各个SELECT语句之间使用UNIONUNION 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);

查询结果:

image.png

可以分开查看两个SELECT语句的查询结果:

SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0;

查询结果:

image.png

SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN (101, 103);

查询结果:

image.png

可以看到使用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);

查询结果:

image.png 由结果可以看到,这里总的记录数等于两条SELECT语句返回的记录数之和,连接查询结果并没有去除重复的行。

提示: UNION和UNION ALL的区别:使用UNION ALL的功能是不删除重复行,加上ALL关键字语句执行时所需要的资源少,所以尽可能地使用它,因此知道有重复行但是想保留这些行,确定查询结果中不会有重复数据或者不需要去掉重复数据的时候,应当使用UNION ALL以提高查询效率。

总结

  • 使用UNION关键字或UNIOB ALL关键字实现两个及两个以上的SELECT语句查询结果合并
  • UNION和UNION ALL的合并效果是不相同的,前者删除重复的数据,后者则不删除重复的数据

好了,今天阿文就介绍到这了... byebye

3486B03B.gif