您好,登錄后才能下訂單哦!
這篇文章主要介紹了SQL中的union和union all怎么使用的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇SQL中的union和union all怎么使用文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。
MySQL UNION
操作符用于連接兩個(gè)以上的 SELECT
語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。多個(gè) SELECT
語(yǔ)句會(huì)刪除重復(fù)的數(shù)據(jù)。
UNION
操作符選取不同的值,如果允許得到重復(fù)的值,可以使用 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
內(nèi)部的每個(gè)SELECT
語(yǔ)句必須擁有相同數(shù)量的列列也必須擁有相似的數(shù)據(jù)類型
每個(gè)
SELECT
語(yǔ)句中的列的順序必須相同
我們發(fā)現(xiàn)我們用 UNION
得到的結(jié)果都是必須是相同的,這就不得不提 in
和 or
這兩個(gè)關(guān)鍵字了
-- 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';
通過(guò)在用戶表(users)這幾個(gè)select語(yǔ)句中我們比較一下
如果我們想要名字為 sbc 或者 bhy 的用戶我們可以用in
、or
和union
都可以實(shí)現(xiàn)
如果在較大的數(shù)據(jù)量下差距就會(huì)有明顯的差距,如果 name 字段存在索引,這幾種方法都是不分上下的;可是如果像 or
寫法的第二種情況,那數(shù)據(jù)庫(kù)都會(huì)去找兩個(gè)字段各自的索引嗎,答案不是的,數(shù)據(jù)庫(kù)只會(huì)尋找一個(gè)字段的索引,而另一個(gè)字段就需要全局查詢
這樣遇到較大的數(shù)據(jù)量就會(huì)耗費(fèi)大量的時(shí)間,但是 union
方法的第二種方法就會(huì)引用兩次索引。
union
:對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作,不包括重復(fù)行,相當(dāng)于distinct
,同時(shí)進(jìn)行默認(rèn)規(guī)則的排序
union all
:對(duì)兩個(gè)結(jié)果集進(jìn)行并集操作,包括重復(fù)行,即所有的結(jié)果全部顯示,不管是不是重復(fù);
tips
union all只是合并查詢結(jié)果,并不會(huì)進(jìn)行去重和排序操作,在沒(méi)有去重的前提下,使用union all的執(zhí)行效率要比union高
關(guān)于“SQL中的union和union all怎么使用”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“SQL中的union和union all怎么使用”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。