欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql聯(lián)合查詢UNION和UNION ALL的使用介紹

 更新時(shí)間:2014年04月12日 09:44:31   作者:  
本文詳細(xì)介紹了Mysql的聯(lián)合查詢命令UNION和UNION ALL,總結(jié)了使用語(yǔ)法和注意事項(xiàng),以及學(xué)習(xí)例子和項(xiàng)目例子,需要的朋友可以參考下

一、UNION和UNION ALL的作用和語(yǔ)法

UNION 用于合并兩個(gè)或多個(gè) SELECT 語(yǔ)句的結(jié)果集,并消去表中任何重復(fù)行。
UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據(jù)類(lèi)型。
同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同.
SQL UNION 語(yǔ)法:

復(fù)制代碼 代碼如下:
SELECT column_name FROM table1
UNION
SELECT column_name FROM table2

注釋?zhuān)耗J(rèn)地,UNION 操作符選取不同的值。如果允許重復(fù)的值,請(qǐng)使用 UNION ALL。
當(dāng) ALL 隨 UNION 一起使用時(shí)(即 UNION ALL),不消除重復(fù)行
SQL UNION ALL 語(yǔ)法
復(fù)制代碼 代碼如下:
SELECT column_name FROM table1
UNION ALL
SELECT column_name FROM table2

注釋?zhuān)毫硗猓琔NION 結(jié)果集中的列名總是等于 UNION 中第一個(gè) SELECT 語(yǔ)句中的列名。
注意:1、UNION 結(jié)果集中的列名總是等于第一個(gè) SELECT 語(yǔ)句中的列名
2、UNION 內(nèi)部的 SELECT 語(yǔ)句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據(jù)類(lèi)型。同時(shí),每條 SELECT 語(yǔ)句中的列的順序必須相同


二、union的用法及注意事項(xiàng)

union:聯(lián)合的意思,即把兩次或多次查詢結(jié)果合并起來(lái)。
要求:兩次查詢的列數(shù)必須一致
推薦:列的類(lèi)型可以不一樣,但推薦查詢的每一列,想對(duì)應(yīng)的類(lèi)型以一樣
可以來(lái)自多張表的數(shù)據(jù):多次sql語(yǔ)句取出的列名可以不一致,此時(shí)以第一個(gè)sql語(yǔ)句的列名為準(zhǔn)。
如果不同的語(yǔ)句中取出的行,有完全相同(這里表示的是每個(gè)列的值都相同),那么union會(huì)將相同的行合并,最終只保留一行。也可以這樣理解,union會(huì)去掉重復(fù)的行。
如果不想去掉重復(fù)的行,可以使用union all。
如果子句中有order by,limit,需用括號(hào)()包起來(lái)。推薦放到所有子句之后,即對(duì)最終合并的結(jié)果來(lái)排序或篩選。
如:

復(fù)制代碼 代碼如下:
(select * from a order by id) union (select * from b order id);

在子句中,order by 需要配合limit使用才有意義。如果不配合limit使用,會(huì)被語(yǔ)法分析器優(yōu)化分析時(shí)去除。

三、學(xué)習(xí)例子

下面的例子中使用的原始表:
Employees_China:

復(fù)制代碼 代碼如下:
E_ID E_Name
01 Zhang, Hua
02 Wang, Wei
03 Carter, Thomas
04 Yang, Ming

Employees_USA:
復(fù)制代碼 代碼如下:
E_ID E_Name
01 Adams, John
02 Bush, George
03 Carter, Thomas
04 Gates, Bill

使用 UNION 命令實(shí)例

列出所有在中國(guó)和美國(guó)的不同的雇員名:

復(fù)制代碼 代碼如下:
SELECT E_Name FROM Employees_China
UNION
SELECT E_Name FROM Employees_USA

結(jié)果:
復(fù)制代碼 代碼如下:
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Gates, Bill

注釋?zhuān)哼@個(gè)命令無(wú)法列出在中國(guó)和美國(guó)的所有雇員。在上面的例子中,我們有兩個(gè)名字相同的雇員,他們當(dāng)中只有一個(gè)人被列出來(lái)了。UNION 命令只會(huì)選取不同的值。

使用 UNION ALL 命令實(shí)例

UNION ALL 命令和 UNION 命令幾乎是等效的,不過(guò) UNION ALL 命令會(huì)列出所有的值。

復(fù)制代碼 代碼如下:
SQL Statement 1
UNION ALL
SQL Statement 2

實(shí)例:
列出在中國(guó)和美國(guó)的所有的雇員:

復(fù)制代碼 代碼如下:
SELECT E_Name FROM Employees_China
UNION ALL
SELECT E_Name FROM Employees_USA

結(jié)果
復(fù)制代碼 代碼如下:
E_Name
Zhang, Hua
Wang, Wei
Carter, Thomas
Yang, Ming
Adams, John
Bush, George
Carter, Thomas
Gates, Bill


四、項(xiàng)目使用例子

web項(xiàng)目中經(jīng)常會(huì)碰到整站搜索的問(wèn)題,即客戶希望在網(wǎng)站的搜索框中輸入一個(gè)詞語(yǔ),然后在整個(gè)網(wǎng)站中只要包含這個(gè)詞的頁(yè)面都要出現(xiàn)在搜索結(jié)果中。由于一個(gè)web項(xiàng)目不可能用一張表就全部搞定的,所以這里一般都是要用union聯(lián)合搜索來(lái)解決整個(gè)問(wèn)題的。

下面列舉一下本次使用的union聯(lián)合搜索的sql語(yǔ)句:

復(fù)制代碼 代碼如下:

select * from

(SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND `subject` LIKE '%調(diào)整圖片%' ORDER BY `add_time` DESC)

as t1

union all

select * from

(SELECT `id`,`class_name` AS `subject` FROM `web_class` WHERE `active`='1' AND `class_name` LIKE '%調(diào)整圖片%' ORDER BY `class_id` DESC)

as t2

union

select * from

(SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND (`subject` LIKE '%調(diào)整%' OR `subject` LIKE '%圖片%') ORDER BY `add_time` DESC)

as t3;

以上SQL語(yǔ)句的聯(lián)合查詢主要用到了union all和union,至于這兩者的區(qū)別就是union all會(huì)列舉所有符合條件的查詢結(jié)果,而union會(huì)將所有符合條件的查詢結(jié)果做一下去除重復(fù)結(jié)果的篩選。

對(duì)于以上SQL語(yǔ)句的解釋就是由于article表和web_class表分屬兩個(gè)不同的表,所以這里不用去除重復(fù)結(jié)果。然而以上聯(lián)合查詢的第三個(gè)分支的sql查詢語(yǔ)句是由分詞然后組合出來(lái)的查詢語(yǔ)句,這條sql語(yǔ)句查詢的結(jié)果是肯定包含第一個(gè)分支sql語(yǔ)句的查詢結(jié)果的,這里就顯得沒(méi)必要了,所以沒(méi)有使用all而去掉重復(fù)的查詢結(jié)果。

相關(guān)文章

  • mysql的日期和時(shí)間函數(shù)大全

    mysql的日期和時(shí)間函數(shù)大全

    mysql的日期和時(shí)間函數(shù) 這里是一個(gè)使用日期函數(shù)的例子。下面的查詢選擇所有 date_col 值在最后 30 天內(nèi)的記錄。
    2008-04-04
  • MySQL約束和事務(wù)知識(shí)點(diǎn)詳細(xì)歸納

    MySQL約束和事務(wù)知識(shí)點(diǎn)詳細(xì)歸納

    在關(guān)系型數(shù)據(jù)庫(kù)中,事務(wù)的重要性不言而喻,只要對(duì)數(shù)據(jù)庫(kù)稍有了解的人都知道事務(wù),下面這篇文章主要給大家介紹了關(guān)于MySQL約束和事務(wù)知識(shí)點(diǎn)歸納的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • mysql占用CPU超過(guò)100%的詳細(xì)解決過(guò)程

    mysql占用CPU超過(guò)100%的詳細(xì)解決過(guò)程

    前段時(shí)間我的一個(gè)網(wǎng)站經(jīng)常打不開(kāi),通過(guò)檢查發(fā)現(xiàn)服務(wù)器cpu占用超過(guò)100%,通過(guò)top命令發(fā)現(xiàn)是mysql占用cpu特別高導(dǎo)致的,下面這篇文章主要給大家介紹了關(guān)于mysql占用CPU超過(guò)100%的詳細(xì)解決過(guò)程,需要的朋友可以參考下
    2023-10-10
  • 解決MySQL添加新用戶-ERROR?1045?(28000)的問(wèn)題

    解決MySQL添加新用戶-ERROR?1045?(28000)的問(wèn)題

    這篇文章主要介紹了MySQL添加新用戶-ERROR?1045?(28000)解決辦法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • clickhouse分布式表的操作示例詳解

    clickhouse分布式表的操作示例詳解

    這篇文章主要為大家介紹了clickhouse分布式表的操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 解決MySQL8.0時(shí)區(qū)的問(wèn)題步驟

    解決MySQL8.0時(shí)區(qū)的問(wèn)題步驟

    這篇文章主要介紹了解決MySQL8.0時(shí)區(qū)的問(wèn)題步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說(shuō)明

    MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說(shuō)明

    這篇文章主要介紹了MySQL用戶管理與PostgreSQL用戶管理的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • mysql整數(shù)數(shù)據(jù)類(lèi)型深入解析

    mysql整數(shù)數(shù)據(jù)類(lèi)型深入解析

    本篇文章是對(duì)mysql中的整數(shù)數(shù)據(jù)類(lèi)型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • MySQL8.0中的my.ini文件位置說(shuō)明

    MySQL8.0中的my.ini文件位置說(shuō)明

    這篇文章主要介紹了MySQL8.0中的my.ini文件位置說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • mysql實(shí)現(xiàn)事務(wù)的提交和回滾實(shí)例

    mysql實(shí)現(xiàn)事務(wù)的提交和回滾實(shí)例

    這篇文章主要介紹了mysql實(shí)現(xiàn)事務(wù)的提交和回滾,需要的朋友可以參考下
    2014-06-06

最新評(píng)論