union distinct_当面试官问你UNION 和UNION ALL之间的区别时该怎么答?
概述
MySQL數據庫支持兩種集合操作:UNION DISTINCT和UNION ALL。 UNION DISTINCT組合兩個輸入,并應用DISTINCT過濾重復項,一般可以直接省略DISTINCT關鍵字,直接使用UNION。 在多個SELECT語句中,對應的列應該具有相同的字段屬性,且第一個SELECT語句中被使用的字段名稱也被用于結果的字段名稱。
建表數據
為了更好的理解,造了下面mysql的兩張表和一些數據。兩張表中的數據其實是一樣的(比較懶了,^_^),表及表字段略加改動。
create table name( id int(4) not null auto_increment comment 'key', name varchar(16) not null comment 'Name', agend int(1) comment 'agend', PRIMARY key(id))ENGINE=INNODB DEFAULT charset='utf8' comment 'name';insert into name(name,agend) values('ck1','1');insert into name(name,agend) values('ck2','0');insert into name(name,agend) values('ck3','1');insert into name(name,agend) values('ck4','0');insert into name(name,agend) values('ck1','1');create table name2( id2 int(4) not null auto_increment comment 'key', name2 varchar(16) not null comment 'Name', agend2 int(1) comment 'agend', PRIMARY key(id2))ENGINE=INNODB DEFAULT charset='utf8' comment 'name2';insert into name2(name2,agend2) values('ck1','1');insert into name2(name2,agend2) values('ck2','0');insert into name2(name2,agend2) values('ck3','1');insert into name2(name2,agend2) values('ck4','0');insert into name2(name2,agend2) values('ck1','1');union distinct
其實union 相當于 union distinct,個人覺得寫全比較好,不要偷懶。
當A查詢中有數據a,B查詢中有數據a,對兩個查詢使用union distinct方法,那么查詢結果只有一條數據a記錄。
舉例如下:
(select * from name where name = 'ck1' AND agend = '1') UNION DISTINCT (SELECT * from name2 where agend2 = '1');union distinctunion all
當A查詢中有數據a,B查詢中有數據a,對兩個查詢使用union all方法,那么查詢結果會出現兩條數據a。
舉例如下:
(SELECT * from name2 where agend2 = '1') UNION ALL (select * from name where name = 'ck1' AND agend = '1');說明:
1、當A查詢中有數據a,B查詢中有數據a,不管對兩個查詢使用union all/distinct方法,查詢結果的字段展示是根據union all/distinct前的查詢結果字段展示的。例如前面union all,查詢語句為:
(SELECT * from name2 where agend2 = '1') UNION ALL (select * from name where name = 'ck1' AND agend = '1');那么展示的字段是 name2 表中的字段。
2、union all 在使用UNION DISTINCT的時候,由于向臨時表中添加了唯一索引,插入的速度顯然會因此而受到影響。如果確認進行UNION操作的兩個集合中沒有重復的選項,最有效的辦法應該是使用UNION ALL。
union會自動壓縮多個結果集合中的重復結果,而union all則將所有的結果全部顯示出來,不管是不是重復。
Union:對兩個結果集進行并集操作,不包括重復行,同時進行默認規則的排序。
Union在進行表鏈接后會篩選掉重復的記錄,所以在表鏈接后會對所產生的結果集進行排序運算,刪除重復的記錄再返回結果。實際大部分應用中是不會產生重復的記錄,最常見的是過程表與歷史表Union。
Union All:對兩個結果集進行并集操作,包括重復行,不進行排序。
后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~
總結
以上是生活随笔為你收集整理的union distinct_当面试官问你UNION 和UNION ALL之间的区别时该怎么答?的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 周鸿祎透露360大语言模型进展 将推智能
 - 下一篇: 明查|中国高铁“一公里耗电一万度”?太假