MySQL合并查詢(xún)結(jié)果的實(shí)現(xiàn)
利用 UNION 關(guān)鍵字,可以給出多條 SELECT 語(yǔ)句,并將它們的結(jié)果組合成單個(gè)結(jié)果集。合并 時(shí),兩個(gè)表對(duì)應(yīng)的列數(shù)和數(shù)據(jù)類(lèi)型必須相同。各個(gè) SELECT 語(yǔ)句之間使用 UNION 或 UNION ALL 關(guān)鍵字分隔。UNION 不使用關(guān)鍵字 ALL,執(zhí)行的時(shí)候刪除重復(fù)的記錄,所有返回的行都是唯一的; 使用關(guān)鍵字 ALL 的作用是不刪除重復(fù)行也不對(duì)結(jié)果進(jìn)行自動(dòng)排序?;菊Z(yǔ)法格式如下:
SELECT column,... FROM table1 UNION [ALL] SELECT column,... FROM table2
查詢(xún)所有價(jià)格小于 9 的水果的信息,查詢(xún) s_id 等于 101 和 103 所有的水果的信息, 使用 UNION 連接查詢(xún)結(jié)果,SQL 語(yǔ)句如下:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 UNION SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101,103);
合并查詢(xún)結(jié)果如下:
如前所述,UNION 將多個(gè) SELECT 語(yǔ)句的結(jié)果組合成一個(gè)結(jié)果集合。可以分開(kāi)查看每個(gè) SELECT 語(yǔ)句的結(jié)果:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0;
SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101,103);
由分開(kāi)查詢(xún)的結(jié)果可以看到,第 1 條 SELECT 語(yǔ)句查詢(xún)價(jià)格小于 9 的水果,第 2 條 SELECT 語(yǔ)句查詢(xún)供應(yīng)商 101 和 103 提供的水果。使用 UNION 將兩條 SELECT 語(yǔ)句分隔開(kāi),執(zhí)行完畢之后 把輸出結(jié)果組合成單個(gè)的結(jié)果集,并刪除重復(fù)的記錄。
使用 UNION ALL 包含重復(fù)的行,在前面的例子中,分開(kāi)查詢(xún)時(shí),兩個(gè)返回結(jié)果中有相同的 記錄。UNION 從查詢(xún)結(jié)果集中自動(dòng)去除了重復(fù)的行,如果要返回所有匹配行,而不進(jìn)行刪除,可 以使用 UNION ALL。
查詢(xún)所有價(jià)格小于 9 的水果的信息,查詢(xún) s_id 等于 101 和 103 的所有水果的信息, 使用 UNION ALL 連接查詢(xún)結(jié)果,SQL 語(yǔ)句如下:
SELECT s_id, f_name, f_price FROM fruits WHERE f_price < 9.0 UNION ALL SELECT s_id, f_name, f_price FROM fruits WHERE s_id IN(101,103);
查詢(xún)結(jié)果如下:
由結(jié)果可以看到,這里總的記錄數(shù)等于兩條 SELECT 語(yǔ)句返回的記錄數(shù)之和,連接查詢(xún)結(jié)果 并沒(méi)有去除重復(fù)的行。
提 示 :UNION 和 UNION ALL 的區(qū)別:使用 UNION ALL 的功能是不刪除重復(fù)行,加上 ALL 關(guān) 鍵字語(yǔ)句執(zhí)行時(shí)所需要的資源少,所以盡可能地使用它,因此知道有重復(fù)行但是想保留 這些行,確定查詢(xún)結(jié)果中不會(huì)有重復(fù)數(shù)據(jù)或者不需要去掉重復(fù)數(shù)據(jù)的時(shí)候,應(yīng)當(dāng)使用 UNION ALL 以提高查詢(xún)效率。
到此這篇關(guān)于MySQL合并查詢(xún)結(jié)果的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL合并查詢(xún)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
通過(guò)Query Profiler查看MySQL語(yǔ)句運(yùn)行時(shí)間的操作方法
這篇文章主要介紹了通過(guò)Query Profiler查看MySQL語(yǔ)句運(yùn)行時(shí)間的操作方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03mysql之查詢(xún)兩個(gè)時(shí)間段是否有交集的情況
這篇文章主要介紹了mysql之查詢(xún)兩個(gè)時(shí)間段是否有交集的情況,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08MySQL獲得當(dāng)前日期時(shí)間函數(shù)示例詳解
這篇文章主要給大家介紹了關(guān)于MySQL獲得當(dāng)前日期時(shí)間函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12mysql 隊(duì)列 實(shí)現(xiàn)并發(fā)讀
隊(duì)列是常用的數(shù)據(jù)結(jié)構(gòu),基本特點(diǎn)就是先入先出,在事務(wù)處理等方面都要用到它,有的時(shí)候是帶有優(yōu)先級(jí)的隊(duì)列。當(dāng)隊(duì)列存在并發(fā)訪問(wèn)的時(shí)候,比如多線程情況下,就需要鎖機(jī)制來(lái)保證隊(duì)列中的同一個(gè)元素不被多次獲取2012-04-04關(guān)于MySQL的整型數(shù)據(jù)的內(nèi)存溢出問(wèn)題的應(yīng)對(duì)方法
這篇文章主要介紹了關(guān)于MySQL的整型數(shù)據(jù)的內(nèi)存溢出問(wèn)題的應(yīng)對(duì)方法,作者還列出了MySQL所支持的整型數(shù)據(jù)的存儲(chǔ)空間支持大小,需要的朋友可以參考下2015-05-05分享MYSQL插入數(shù)據(jù)時(shí)忽略重復(fù)數(shù)據(jù)的方法
當(dāng)程序中insert時(shí),已存在的數(shù)據(jù)不插入,不存在的數(shù)據(jù)insert。在網(wǎng)上搜了下,可以使用存儲(chǔ)過(guò)程或者是用NOT EXISTS 來(lái)判斷是否存在2013-09-09