MySql017——组合查询UNION和UNION ALL

一、UNION作用

可用UNION操作符来组合数条SQL查询。

二、UNION 使用规则

  • 1、UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。
  • 2、UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔(因此,如果组合4条SELECT语句,将要使用3个
    UNION关键字)。
  • 3、UNION中的每个查询必须包含相同的列、表达式或聚集函数(不过各个列不需要以相同的次序列出)。
  • 4、列数据类型必须兼容:类型不必完全相同,但必须是DBMS可以隐含地转换的类型(例如,不同的数值类型或不同的日期类型)。
  • 5、在用UNION组合查询时,只
    能使用一条ORDER BY子句,它必须出现在最后一条SELECT语句之后。

三、UNION和UNION ALL的区别

  • UNION从查询结果集中自动去除了重复的行;

  • 使用UNION ALL,MySQL不取消重复的行。

四、实例

use `study`;

SELECT vend_id, prod_id,prod_price 
FROM products
WHERE prod_price <= 5
UNION
SELECT vend_id, prod_id,prod_price
FROM products
WHERE vend_id IN (1001, 1002)
ORDER BY vend_id, prod_price;

在这里插入图片描述

与君共享

👉👉👉👉👉最后,有兴趣的小伙伴可以点击下面链接,这里有我整理的MySQL学习博客内容,谢谢~ 🌹🌹🌹🌹🌹

《MySQL数据库学习》

### MySQLUNION UNION ALL 的区别与性能比较 #### 差异概述 UNION UNION ALL 都是用来合并多个 `SELECT` 查询结果集的操作符,但在处理重复行的方式上有显著不同。 UNION 会自动去重并返回唯一的结果集[^2],而 UNION ALL 则不会执行任何去重操作,直接将所有匹配的记录组合在一起[^3]。 --- #### 性能对比 从性能角度来看,UNION ALL 通常比 UNION 更高效。原因在于: - **UNION**: 它会在内部创建临表来存储中间结果,并通过排序其他算法检测删除重复项[^1]。这种额外的工作增加了计算开销。 - **UNION ALL**: 不涉及去重逻辑,因此省去了排序其他复杂操作的间成本[^4]。当能够提前确定结果集中不存在重复数据者即使有也不影响业务逻辑,推荐优先考虑使用 UNION ALL 来提升查询速度。 以下是两种方式的一个简单例子: ```sql -- 使用 UNION 去除重复行 SELECT id FROM table_a WHERE condition_1 UNION SELECT id FROM table_b WHERE condition_2; -- 使用 UNION ALL 保留全部行(含可能存在的重复) SELECT id FROM table_a WHERE condition_1 UNION ALL SELECT id FROM table_b WHERE condition_2; ``` 注意,在实际应用过程中,如果确实需要保证最终输出无冗余条目而又希望提高效率的情况下,可以通过其他手段比如 DISTINCT 者 GROUP BY 实现类似效果的同减少不必要的资源消耗。 --- #### 应用场景建议 - 当明确知道两部分的数据源本身就不会产生交叠者是允许存在相同值的候,应该选用 UNION ALL ,因为它不仅速度快而且占用更少内存; - 如果严格要求得到的是不含任何副本的一组独立项目列表,则需采用标准形式即带默认参数设置下的 UNION 功能实现相应目的。 总结来说,选择哪一个主要依据于具体的业务需求以及对于潜在重复元素的态度如何决定——追求极致效能则倾向后者;反之若是看重精确度而非单纯速率表现的话自然前者更为合适一些[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值