当前位置: 首页 > news >正文

浅谈SQL中的union和union all

文章目录

  • 概念
  • 基础语法
  • 使用技巧
  • 区别
  • 总结

浅谈SQL中的union和union all - Java技术债务

概念

MySQL UNION 操作符用于连接两个以上的 SELECT 语句的结果组合到一个结果集合中。多个 SELECT 语句会删除重复的数据。

UNION 操作符选取不同的值,如果允许得到重复的值,可以使用 UNION ALL

基础语法

-- union
SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;-- union all
SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

注意:
UNION 内部的每个 SELECT 语句必须拥有相同数量的列

列也必须拥有相似的数据类型

每个 SELECT 语句中的列的顺序必须相同

使用技巧

我们发现我们用 UNION 得到的结果都是必须是相同的,这就不得不提 inor 这两个关键字了

-- in
select * from users 
where name in ('sbc', 'bhy');-- or
select * from users
where name = 'sbc' or name = 'bhy';select * from users
where name = 'sbc' or tel = '123456';-- union
select * from users
where name = 'sbc'
union
select * from users
where name = 'bhy';select * from users
where name = 'sbc'
union
select * from users
where tel = '123456';

通过在用户表(users)这几个select语句中我们比较一下

如果我们想要名字为 sbc 或者 bhy 的用户我们可以用inorunion都可以实现

如果在较大的数据量下差距就会有明显的差距,如果 name 字段存在索引,这几种方法都是不分上下的;可是如果像 or 写法的第二种情况,那数据库都会去找两个字段各自的索引吗,答案不是的,数据库只会寻找一个字段的索引,而另一个字段就需要全局查询

这样遇到较大的数据量就会耗费大量的时间,但是 union 方法的第二种方法就会引用两次索引。

区别

  • union :对两个结果集进行并集操作,不包括重复行,相当于distinct,同时进行默认规则的排序
  • union all:对两个结果集进行并集操作,包括重复行,即所有的结果全部显示,不管是不是重复;

tips
union all只是合并查询结果,并不会进行去重和排序操作,在没有去重的前提下,使用union all的执行效率要比union高

总结

如果遇到没有索引的表或者只对单个字段进行筛选,其实推荐使用 or 和 in ,看上去优雅简洁

如果遇到多个索引列的情况,还是推荐使用 union 和 union all


--------------------------------------欢迎叨扰此地址---------------------------------------

本文作者:Java技术债务
原文链接:https://cuizb.top/myblog/article/1676991288
版权声明: 本博客所有文章除特别声明外,均采用 CC BY 3.0 CN协议进行许可。转载请署名作者且注明文章出处。

http://www.lryc.cn/news/15747.html

相关文章:

  • P6软件应用的核心收益
  • 性能测试中,我遇到的8个常见问题总结
  • kafka架构体系
  • 【Kafka】三.Kafka怎么保证高可用 学习总结
  • Python学习笔记7:再谈抽象
  • 钣金行业mes解决方案,缩短产品在制周期
  • 【Linux】——git和gdb的简单使用技巧
  • Fiddler的简单使用
  • MySql 事务
  • 微信社区小程序/h5/圈子论坛贴吧交友/博客/社交/陌生人社交/宠物/话题/私域/同城交友
  • Python os和sys模块
  • JS中数组如何去重(ES6新增的Set集合类型)+经典two sum面试题
  • HDLC简介及相应hdlc实训
  • 公司技术团队为什么选择使用 YApi 作为 Api 管理平台?
  • ts知识点整理
  • 技术分享 | OceanBase 数据处理之控制文件
  • TCP的三次握手、四次挥手
  • C++---特殊类的设计
  • buu [WUSTCTF2020]dp_leaking_1s_very_d@angerous 1
  • 基于SVPWM改进的永磁同步电机直接转矩控制二更
  • ubuntu下磁盘管理
  • Python学习-----排序问题1.0(冒泡排序、选择排序、插入排序)
  • LeetCode 535. TinyURL 的加密与解密
  • 【c++】类和对象2—构造函数、析构函数、拷贝构造函数
  • [C++关键字] const/constexpr
  • FPGA电源电流参数
  • 【Git】Git下载安装与使用(一)
  • 刷题记录:牛客NC20545[HEOI2012]采花
  • 每日学术速递2.21
  • 网络安全之认识挖矿木马