mysql union 与 union all 语法及用法
1.mysql union 語(yǔ)法
mysql union 用于把來(lái)自多個(gè)select 語(yǔ)句的結(jié)果組合到一個(gè)結(jié)果集合中。語(yǔ)法為:
select column,......from table1union [all]select column,...... from table2...在多個(gè)select 語(yǔ)句中,對(duì)應(yīng)的列應(yīng)該具有相同的字段屬性,且第一個(gè)select 語(yǔ)句中被使用的字段名稱也被用于結(jié)果的字段名稱。
1.1 union 與 union all 的區(qū)別
當(dāng)使用union 時(shí),mysql 會(huì)把結(jié)果集中重復(fù)的記錄刪掉,而使用union all ,mysql 會(huì)把所有的記錄返回,且效率高于union 。
2. mysql union 用法示例
union 常用與數(shù)據(jù)類似的兩張或多張表查詢,如不同的數(shù)據(jù)分類表,或者是數(shù)據(jù)歷史表等,下面是用于測(cè)試的兩張表;
2.1使用 UNION 查詢
查詢兩張表中的文章 id 號(hào)及標(biāo)題,并去掉重復(fù)記錄:
SELECT aid,title FROM article UNION SELECT bid,title FROM blog返回查詢結(jié)果如下:
2.2.UNION 查詢結(jié)果說(shuō)明
3.使用 UNION ALL 查詢
查詢兩張表中的文章 id 號(hào)及標(biāo)題,并返回所有記錄:
SELECT aid,title FROM article UNION ALL SELECT bid,title FROM blog返回查詢結(jié)果如下:
顯然,使用 UNION ALL 的時(shí)候,只是單純的把各個(gè)查詢組合到一起而不會(huì)去判斷數(shù)據(jù)是否重復(fù)。因此,當(dāng)確定查詢結(jié)果中不會(huì)有重復(fù)數(shù)據(jù)或者不需要去掉重復(fù)數(shù)據(jù)的時(shí)候,應(yīng)當(dāng)使用 UNION ALL 以提高查詢效率。
4.MySQL UNION ORDER BY
在 MySQL UNION 中使用 ORDER BY 和 LIMIT 是有些需要特別注意的地方,因此單獨(dú)列出來(lái)說(shuō)明一下。
下面是用于例子測(cè)試的兩張?jiān)紨?shù)據(jù)表:
4.1UNION 子句中使用 ORDER BY
子句中使用 ORDER BY,即將 SELECT 子句的結(jié)果先排序,然后再把這些子句查詢的結(jié)果進(jìn)行集合。
在子句中使用 ORDER BY,由于優(yōu)先級(jí)問(wèn)題,需要將整個(gè)子句加圓括號(hào)(),且必須與 LIMIT 結(jié)合使用:
(SELECT aid,title FROM article ORDER BY aid DESC LIMIT 10) UNION ALL (SELECT bid,title FROM blog ORDER BY bid DESC LIMIT 10)返回查詢結(jié)果如下:
4.2UNION 整句中使用 ORDER BY
如果想使用 ORDER BY 或 LIMIT 來(lái)對(duì)全部 UNION 結(jié)果進(jìn)行分類或限制,則應(yīng)對(duì)單個(gè) SELECT 語(yǔ)句加圓括號(hào),并把 ORDER BY 或 LIMIT 放到最后一個(gè)的后面。
(SELECT aid,title FROM article) UNION ALL (SELECT bid,title FROM blog) ORDER BY aid DESC返回查詢結(jié)果如下:
整句中使用 ORDER BY,去掉 SELECT 子句中的圓括號(hào)雖然結(jié)果是一樣的,但為了語(yǔ)句清晰,建議不要省略圓括號(hào)。
4.3 UNION ORDER BY 應(yīng)用于別名
如果 SELECT 中使用到了字段別名,則 OEDER BY 必須引用別名:
(SELECT a AS b FROM table) UNION (SELECT ...) ORDER BY b5.MySQL UNION LIMIT
在 MySQL UNION 中使用 LIMIT 用于限制返回的記錄條數(shù),如果對(duì) SELECT 子句做限制,需要對(duì) SELECT 添加圓括號(hào):
(SELECT aid,title FROM article LIMIT 2) UNION ALL (SELECT bid,title FROM blog LIMIT 2)該 SQL 會(huì)返回個(gè) SELECT 語(yǔ)句的兩條記錄,如果不添加圓括號(hào),則最后一個(gè) LIMIT 2 會(huì)作用于整個(gè) UNION 語(yǔ)句而一共返回 2 條記錄。
同 ORDER BY 類似,當(dāng)需要對(duì)整個(gè) UNION 的結(jié)果進(jìn)行 LIMIT 限制時(shí),建議將各個(gè) SELECT 語(yǔ)句用圓括號(hào)括起來(lái)以使語(yǔ)句更加清晰:
(SELECT aid,title FROM article) UNION ALL (SELECT bid,title FROM blog) LIMIT 2可見(jiàn),LIMIT 與 ORDER BY 經(jīng)常搭配使用,二者在 UNION 中的使用方式也是一致的。
總結(jié)
以上是生活随笔為你收集整理的mysql union 与 union all 语法及用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: erlang精要(3)-变量、原子与布尔
- 下一篇: erlang精要(4)-等于与不等于