mysql中的union用法

UNION在mysql中被称为集合操作,操作类型分为两种:UNION DISTINCT 和  UNION ALL;注意:UNION和UNION DISTINCT是一样的功能。UNION功能为合并多个查询的结果并去重,UNION ALL的功能为合并多个查询的结果不去重。

集合操作时,两边的输入必须拥有相同的列数,如果数据类型不同的话,mysql会自动进行隐式转化 ;同时,结果列的名称由第一个查询的列的名称决定。下面看一下例子:

sql语句为:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;结果是:

如果是:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha',4 FROM DUAL;

如果两次查询的列个数不一致,如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION ALL SELECT 'abc' as a,'haha' FROM DUAL;

在多个列查询时,只要有一个列的数据不一致时,都是无法去重的;也就是去重是每个列的数据完全一致,比如:SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION DISTINCT SELECT 'abc' as a,'haha',5 FROM DUAL;

这几个例子可以看出UNION (DISTINCT) 与 UNION ALL的用法了吧,下面讲一下UNION (DISTINCT)的实现方式:

一:创建一张虚拟表;

二:对这张虚拟表的列添加唯一索引,即UNIQUE INDEX;

三:将结果插入虚拟表

四:返回虚拟表; 

如何判断是否创建一个虚拟表,我们可以通过一下语句判断:

SHOW STATUS LIKE 'Created_tmp_tables'; 

SELECT 'abc' as o,'haha' as p,4 as q FROM DUAL UNION SELECT 'abc' as a,'haha',4 FROM DUAL;

SHOW STATUS LIKE 'Created_tmp_tables';                                                                                                             结果是:

可见结果3比结果1多1,在操作第二个 UNION语句时创建了一个虚拟表;如果UNION创建了索引,插入会相对变慢

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.简介 数据存储有哪些方式?电子表格,纸质文件,数据库。 那么究竟什么是关系型数据库? 目前对数据库的分类主要是...
    乔震阅读 1,764评论 0 2
  • ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year:...
    雨一流阅读 685评论 0 2
  • 各位看官老爷大家好,今天小的第一次发表文章,请各位大佬么多多指教!最近自己刚整完一个项目,可能有点Low,但是也从...
    L丶宏亮阅读 190评论 0 0
  • String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非...
    西元前__YP阅读 219评论 0 0
  • 有时候,你无意中的一句话,可能就改变了身边人的性格,甚至一生。 但荒唐的是,你毫不知情。 1."你五音不全,比你弟...
    cassie_k阅读 849评论 4 3