在数据库中,UNION和UNION ALL关键字都是将两个结果集合并为一个,但这两者从使用和效率上来说都有所不同。

MySQL中的UNION

UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION。如:

select * from gc_dfys union select * from ls_jg_dfys

这个SQL在运行时先取出两个表的结果,再用排序空间进行排序删除重复的记录,最后返回结果集,如果表数据量大的话可能会导致用磁盘进行排序。

MySQL中的UNION ALL

而UNION ALL只是简单的将两个结果合并后就返回。这样,如果返回的两个结果集中有重复的数据,那么返回的结果集就会包含重复的数据了。

从效率上说,UNION ALL 要比UNION快很多,所以,如果可以确认合并的两个结果集中不包含重复的数据的话,那么就使用UNION ALL,如下:

select * from gc_dfys union all select * from ls_jg_dfys 使用Union,则所有返回的行都是唯一的,如同您已经对整个结果集合使用了DISTINCT 使用Union all,则不会排重,返回所有的行 如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到最后一个的后面: (SELECT a FROM tbl_name WHERE a=10 AND B=1)   UNION (SELECT a FROM tbl_name WHERE a=11 AND B=2) ORDER BY a LIMIT 10; 麻烦一点也可以这么干: select userid from ( select userid from testa union all select userid from testb) t order by userid limit 0,1; 如果你还想group by,而且还有条件,那么: select userid from (select userid from testa union all select userid from testb) t group by userid having count(userid) = 2; 注意:在union的括号后面必须有个别名,否则会报错 当然了,如果当union的几个表的数据量很大时,建议还是采用先导出文本,然后用脚本来执行 因为纯粹用sql,效率会比较低,而且它会写临时文件,如果你的磁盘空间不够大,就有可能会出错 Error writing file '/tmp/MYLsivgK' (Errcode: 28)

mysql union 别名报错_MySQL中UNION和UNION ALL的使用相关推荐

  1. Mysql存储过程老是报错_mysql中看看这个存储过程老是报错,该如何处理

    mysql中看看这个存储过程老是报错 我的mysql版本是5.5.21的,下面这个存储过程是需要更加另外3张表的数据来更新strategycontracttemp中数据,但是每次更新到中途报错,先代码 ...

  2. mysql 中文字段报错_mysql 中 王数据表中插入中文字段报错:mysql insert into a values(202,王一); ERROR 1366 (HY000): Incorr...

    报错信息: mysql> insert into a values(202,"王一"); ERROR 1366 (HY000): Incorrect string value ...

  3. mysql查询关键字报错_mysql中in关键字查询时的问题? 400 报错-问答-阿里云开发者社区-阿里云...

    之前也遇到过类似的问题,就是in关键字指定的范围没有数据,会出错######改用exists呢######不行######用join 链接查询过滤一下算了######我是这么做了,但是现在我就想知道, ...

  4. Mysql提示缺少表的别名报错_mysql对sql中别名引起的Column not found问题

    Caused by: java.sql.SQLException: Column 'BTN_ICON' not found. 报错信息是找不到表中的某字段,但是表里确确实实有这个字段. 这个问题,在百 ...

  5. mysql replace报错_Mysql中replace与replace into的用法讲解

    Mysql replace与replace into都是经常会用到的功能:replace其实是做了一次update操作,而不是先delete再insert:而replace into其实与insert ...

  6. mysql用in报错_Mysql子查询IN中使用LIMIT

    学习下Mysql子查询IN中使用LIMIT的方法. 这两天项目里出了一个问题,mysql LIMIT使用后报错. 需求是这样的,我有3张表,infor信息表,mconfig物料配置表,maaply物料 ...

  7. mysql批量更新报错_Mysql批量更新的三种方式

    前言 批量插入由于mysql的VALUES原生支持,使用较为便利. 批量更新的写法一般有三种,在更新数量较少的情况下,前两种性能不相上下.但是在更新字段增加,更新条数较多(500以上)建议使用第三种写 ...

  8. mysql的count报错_mysql的floor()报错注入方法详细分析

    刚开始学习sql注入,遇见了 select count(*) from table group by floor(rand(0)*2); 这么条语句.在此做个总结. (更好的阅读体验可访问 这里 ) ...

  9. mysql的count报错_Mysql报错注入原理分析(count()、rand()、group by)

    报错需要count(*),rand().group by,三者缺一不可 前提:当行数大于等于3行时才会报错. 原链接:https://www.cnblogs.com/xdans/p/5412468.h ...

最新文章

  1. Linux服务器网络故障诊断
  2. 解决雷达图文字显示不全问题
  3. Singleton模式的实现
  4. [BUUCTF-pwn]——picoctf_2018_buffer overflow 0
  5. rust原地复活_植物大战僵尸英雄锈铁螺栓新手卡组推荐 rustbolt多手牌陷阱恢复后期流卡组...
  6. 震撼!寒冬腊月里惊现多台历途外墙清洗机器人
  7. RuntimeError: The Session graph is empty. Add operations to the graph before calling run().
  8. Vmware 的一些序列号
  9. 热电厂sis系统服务器升中标结果,电厂SIS系统简介
  10. 希捷2T硬盘ST2000M001分区读不到变为RAW修复记
  11. HTML基础教程 插图
  12. 马云谈年轻人压力大:年轻人怕压力就白活了
  13. python上机编程报告_Python程序设计实验报告六:函数
  14. 用中文把玩Google开源的Deep-Learning项目word2vec
  15. 一款开源的PHP邮箱系统
  16. DP DD VTL 备份 NBU
  17. linux服务器删除cdn,有惊无险的一次后台删除操作!警告不要乱删除东西
  18. Chromium之工程依赖关系.
  19. 3000左右元笔记本电脑推荐 2022 3000元笔记本电脑性价比排行
  20. C#进行MapX二次开发之MapX基础知识

热门文章

  1. flutter offset_用Flutter实现58App的首页
  2. android bin目录是什么,android bin目录下的.ap_是神马文件?
  3. 【Spring第十篇】Spring整合Mybatis
  4. 事件对象使用方法大全(源码解析)
  5. 测试Join(插队)
  6. java代码块执行顺序_JAVA代码块执行顺序分析测试
  7. nginx nodejs环境配置_Linux基本开发环境配置git,c++,nodejs,nginx
  8. Linux的shell终端常用快捷键大全
  9. osx jni 开发 1
  10. 【Best Time to Buy and Sell Stock III 】cpp