明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

MySQL組合查詢中UNION排序規(guī)則示例

[摘要]正如所見,并是非常容易使用的。但在進(jìn)行并時(shí)有幾條規(guī)則需要注意。1.UNION 必須由兩條或兩條以上的 SELECT 語句組成,語句之間用關(guān)鍵字 UNION 分隔(因此,如果組合4條 SELECT 語句,將要使用3個(gè)UNION 關(guān)鍵字)。2. UNION 中的每個(gè)查詢必須包含相同的列、表達(dá)式或聚集函...
正如所見,并是非常容易使用的。但在進(jìn)行并時(shí)有幾條規(guī)則需要注意。

1.UNION 必須由兩條或兩條以上的 SELECT 語句組成,語句之間用關(guān)鍵字 UNION 分隔(因此,如果組合4條 SELECT 語句,將要使用3個(gè)UNION 關(guān)鍵字)。

2. UNION 中的每個(gè)查詢必須包含相同的列、表達(dá)式或聚集函數(shù)(不過各個(gè)列不需要以相同的次序列出)。

3.列數(shù)據(jù)類型必須兼容:類型不必完全相同,但必須是DBMS可以隱含地轉(zhuǎn)換的類型(例如,不同的數(shù)值類型或不同的日期類型)。如果遵守了這些基本規(guī)則或限制,則可以將并用于任何數(shù)據(jù)檢索任務(wù)。


包含或取消重復(fù)的行

我們注意到,在分別執(zhí)行時(shí),第一條 SELECT 語句返回4行,第二條 SELECT 語句返回5行。但在用 UNION 組合兩條 SELECT 語句后,只返回了8行而不是9行。

UNION 從查詢結(jié)果集中自動(dòng)去除了重復(fù)的行(換句話說,它的行為與單條 SELECT 語句中使用多個(gè) WHERE 子句條件一樣)。因?yàn)楣⿷?yīng)商 1002 生產(chǎn)的一種物品的價(jià)格也低于 5 ,所以兩條 SELECT 語句都返回該行。在使用UNION 時(shí),重復(fù)的行被自動(dòng)取消。

這是 UNION 的默認(rèn)行為,但是如果需要,可以改變它。事實(shí)上,如果想返回所有匹配行,可使用 UNION ALL 而不是 UNION 。

請看下面的例子:

輸入:

select vend_id,prod_id,prod_price from products where prod_price <= 5 union all select vend_id,prod_id,prod_price from products where vend_id in (1001,1002);

輸出:

QQ截圖20170512093200.png

分析:使用 UNION ALL ,MySQL不取消重復(fù)的行。因此這里的例子返回9行,其中有一行出現(xiàn)兩次。

UNION 與 WHERE UNION 幾乎總是完成與多個(gè)WHERE 條件相同的工作。 UNION ALL 為 UNION 的一種形式,它完成WHERE 子句完成不了的工作。如果確實(shí)需要每個(gè)條件的匹配行全

部出現(xiàn)(包括重復(fù)行),則必須使用 UNION ALL 而不是 WHERE 。

對(duì)組合查詢結(jié)果排序

SELECT 語句的輸出用 ORDER BY 子句排序。在用 UNION 組合查詢時(shí),只能使用一條 ORDER BY 子句,它必須出現(xiàn)在最后一條 SELECT 語句之后。對(duì)于結(jié)果集,不存在用一種方式排序一部分,而又用另一種方式排序另一部分的情況,因此不允許使用多條 ORDER BY 子句。

下面的例子排序前面 UNION 返回的結(jié)果:

輸入:

select vend_id,prod_id,prod_price from products where prod_price <= 5 union select vend_id,prod_id,prod_price from products where vend_id in (1001,1002) order by vend_id,prod_price;

輸出:

QQ截圖20170512093426.png

分析:這條 UNION 在最后一條 SELECT 語句后使用了 ORDER BY 子句。雖然 ORDER BY 子句似乎只是最后一條 SELECT 語句的組成部分,但實(shí)際上MySQL將用它來排序所有 SELECT 語句返回的所有結(jié)果。

組合不同的表 為使表述比較簡單,本章例子中的組合查詢使用的均是相同的表。但是其中使用 UNION 的組合查詢可以應(yīng)用不同的表。

以上就是MySQL組合查詢中UNION排序規(guī)則示例的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門到精通的SQL知識(shí)。