关于sql语句中union和or的区别

先看两者定义:

union

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。

即我们在查询的时候需要保证查询的字段,字段类型同时顺序都需要保持一致。

or

or用于连接两个条件,只要满足其中一个就输出一条记录

区别

  • 光从定义上其实就能看出,union是可以连接两个以上的SELECT语句的,即可在不同的表内进行查询,or的对象则是一张表内
  • union会对结果进行排序去重,而or不会,or会直接把最后的结果拿出来取并集(大部分情况下其实两者结果都一致)
  • 这点是最大区别,对于每张表,每次查询只会用一个索引,例如下面这条判断:where age > 25 or money > 100,如果该表选择了age作为索引,那么在判断money > 100时就只能进行全表扫描,选择money时同理。但是union可以连接两个查询,每个查询可以用不同的索引,因此可以避开这个问题。

总结

union虽然可以避免一些问题,但是因为涉及到排序去重,所以效率也会下降一下,但一般数据量较大时union都是要优于or的,可以根据实际业务情况来进行选择。但如果or两边的查询条件是同一个字段时就可以直接选择or,毕竟省去了union的排序去重。如where age > 25 or age is NULL

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值