亚洲免费乱码视频,日韩 欧美 国产 动漫 一区,97在线观看免费视频播国产,中文字幕亚洲图片

      1. <legend id="ppnor"></legend>

      2. 
        
        <sup id="ppnor"><input id="ppnor"></input></sup>
        <s id="ppnor"></s>

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

        字號:


            本文詳細介紹了Mysql的聯(lián)合查詢命令UNION和UNION ALL,總結了使用語法和注意事項,以及學習例子和項目例子.
            一、UNION和UNION ALL的作用和語法
            UNION 用于合并兩個或多個 SELECT 語句的結果集,并消去表中任何重復行。
            UNION 內部的 SELECT 語句必須擁有相同數(shù)量的列,列也必須擁有相似的數(shù)據類型。
            同時,每條 SELECT 語句中的列的順序必須相同.
            SQL UNION 語法:
            代碼如下:SELECT column_name FROM table1
            UNION
            SELECT column_name FROM table2
            注釋:默認地,UNION 操作符選取不同的值。如果允許重復的值,請使用 UNION ALL。
            當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重復行
            SQL UNION ALL 語法
            代碼如下:SELECT column_name FROM table1
            UNION ALL
            SELECT column_name FROM table2
            注釋:另外,UNION 結果集中的列名總是等于 UNION 中第一個 SELECT 語句中的列名。
            注意:
            1、UNION 結果集中的列名總是等于第一個 SELECT 語句中的列名
            2、UNION 內部的 SELECT 語句必須擁有相同數(shù)量的列。列也必須擁有相似的數(shù)據類型。同時,每條 SELECT 語句中的列的順序必須相同
            二、union的用法及注意事項
            union:聯(lián)合的意思,即把兩次或多次查詢結果合并起來。
            要求:兩次查詢的列數(shù)必須一致
            推薦:列的類型可以不一樣,但推薦查詢的每一列,想對應的類型以一樣
            可以來自多張表的數(shù)據:多次sql語句取出的列名可以不一致,此時以第一個sql語句的列名為準。
            如果不同的語句中取出的行,有完全相同(這里表示的是每個列的值都相同),那么union會將相同的行合并,最終只保留一行。也可以這樣理解,union會去掉重復的行。
            如果不想去掉重復的行,可以使用union all。
            如果子句中有order by,limit,需用括號()包起來。推薦放到所有子句之后,即對最終合并的結果來排序或篩選。
            如:
            代碼如下:
            (select * from a order by id) union (select * from b order id);
            在子句中,order by 需要配合limit使用才有意義。如果不配合limit使用,會被語法分析器優(yōu)化分析時去除。
            三、學習例子
            下面的例子中使用的原始表:
            Employees_China:
            代碼如下:
            E_ID E_Name
            01 Zhang, Hua
            02 Wang, Wei
            03 Carter, Thomas
            04 Yang, Ming
            Employees_USA:
            代碼如下:
            E_ID E_Name
            01 Adams, John
            02 Bush, George
            03 Carter, Thomas
            04 Gates, Bill
            使用 UNION 命令實例
            列出所有在中國和美國的不同的雇員名:
            代碼如下:SELECT E_Name FROM Employees_China
            UNION
            SELECT E_Name FROM Employees_USA
            結果:
            代碼如下:
            E_Name
            Zhang, Hua
            Wang, Wei
            Carter, Thomas
            Yang, Ming
            Adams, John
            Bush, George
            Gates, Bill
            注釋:這個命令無法列出在中國和美國的所有雇員。在上面的例子中,我們有兩個名字相同的雇員,他們當中只有一個人被列出來了。UNION 命令只會選取不同的值。
            使用 UNION ALL 命令實例
            UNION ALL 命令和 UNION 命令幾乎是等效的,不過 UNION ALL 命令會列出所有的值。
            代碼如下:
            SQL Statement 1
            UNION ALL
            SQL Statement 2
            實例:
            列出在中國和美國的所有的雇員:
            代碼如下:SELECT E_Name FROM Employees_China
            UNION ALL
            SELECT E_Name FROM Employees_USA
            結果
            代碼如下:
            E_Name
            Zhang, Hua
            Wang, Wei
            Carter, Thomas
            Yang, Ming
            Adams, John
            Bush, George
            Carter, Thomas
            Gates, Bill
            四、項目使用例子
            web項目中經常會碰到整站搜索的問題,即客戶希望在網站的搜索框中輸入一個詞語,然后在整個網站中只要包含這個詞的頁面都要出現(xiàn)在搜索結果中。由于一個web項目不可能用一張表就全部搞定的,所以這里一般都是要用union聯(lián)合搜索來解決整個問題的。
            下面列舉一下本次使用的union聯(lián)合搜索的sql語句:
            代碼如下:
            select * from
            (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND `subject` LIKE '%調整圖片%' 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 '%調整圖片%' ORDER BY `class_id` DESC)
            as t2
            union
            select * from
            (SELECT `id`,`subject` FROM `article` WHERE `active`='1' AND (`subject` LIKE '%調整%' OR `subject` LIKE '%圖片%') ORDER BY `add_time` DESC)
            as t3;
            以上SQL語句的聯(lián)合查詢主要用到了union all和union,至于這兩者的區(qū)別就是union all會列舉所有符合條件的查詢結果,而union會將所有符合條件的查詢結果做一下去除重復結果的篩選。
            對于以上SQL語句的解釋就是由于article表和web_class表分屬兩個不同的表,所以這里不用去除重復結果。然而以上聯(lián)合查詢的第三個分支的sql查詢語句是由分詞然后組合出來的查詢語句,這條sql語句查詢的結果是肯定包含第一個分支sql語句的查詢結果的,這里就顯得沒必要了,所以沒有使用all而去掉重復的查詢結果。