MySQL查詢資料之合併查詢結果

coldplay.xixi
發布: 2021-03-17 09:32:55
轉載
4699 人瀏覽過

MySQL查詢資料之合併查詢結果.

  • 利用union關鍵字,可以給出多條select語句,並將它們的結果組合成單一結果集。合併時,兩個表對應的列數和資料型別必須相同。各個select語句之間使用union或union all 關鍵字分隔。
  • union不使用關鍵字all,執行的時候刪除重複的記錄,所有傳回的行都是唯一的;使用關鍵字all的作用是不刪除重複行也不對結果進行自動排序。
    基本語法格式為:
select column,...from table1union [all]select column,... from table2
登入後複製

(免費學習推薦:mysql影片教學

【例1】查詢所有價格小於9的水果的信息,查詢s_id等於101和103所有的水果的信息,使用union連接查詢結果,SQL語句如下:

mysql> 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);+------+------------+---------+| s_id | f_name     | f_price |+------+------------+---------+|  104 | lemon      |    6.40 ||  101 | apple      |    5.20 ||  103 | apricot    |    2.20 ||  104 | berry      |    7.60 ||  107 | xxxx       |    3.60 ||  105 | melon      |    8.20 ||  101 | cherry     |    3.20 ||  105 | xbabay     |    2.60 ||  102 | grape      |    5.30 ||  107 | xbabay     |    3.60 ||  101 | apple      |    5.20 ||  103 | apricot    |    2.20 ||  101 | blackberry |   10.20 ||  101 | cherry     |    3.20 ||  103 | coconut    |    9.20 |+------+------------+---------+15 rows in set (0.06 sec)
登入後複製

union將多個select語句的結果組合成一個結果集合。可以分開查看每個select語句的結果:

mysql> select s_id,f_name,f_price    -> from fruits    -> where f_price < 9.0;+------+---------+---------+| s_id | f_name  | f_price |+------+---------+---------+|  104 | lemon   |    6.40 ||  101 | apple   |    5.20 ||  103 | apricot |    2.20 ||  104 | berry   |    7.60 ||  107 | xxxx    |    3.60 ||  105 | melon   |    8.20 ||  101 | cherry  |    3.20 ||  105 | xbabay  |    2.60 ||  102 | grape   |    5.30 ||  107 | xbabay  |    3.60 |+------+---------+---------+10 rows in set (0.00 sec)mysql> select s_id,f_name,f_price    -> from fruits    -> where s_id in(101,103);+------+------------+---------+| s_id | f_name     | f_price |+------+------------+---------+|  101 | apple      |    5.20 ||  103 | apricot    |    2.20 ||  101 | blackberry |   10.20 ||  101 | cherry     |    3.20 ||  103 | coconut    |    9.20 |+------+------------+---------+5 rows in set (0.00 sec)
登入後複製

由分開查詢結果可以看到,第1條select語句查詢價格小於9的水果,第2條select語句查詢供應商101和103提供的水果。

  • 使用union將兩個select語句分隔開,執行完畢之後把輸出結果組合成單一的結果集,並刪除重複的記錄。
  • 使用union all包含重複的行。 union從查詢結果集中自動移除了重複的行,如果要傳回所有符合的行,而不進行刪除,可以用union all。

【例2】查詢所有價格小於9的水果的信息,查詢s_id等於101和103的所有水果的信息,使用union all連接查詢結果,SQL語句如下:

mysql> 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);+------+------------+---------+| s_id | f_name     | f_price |+------+------------+---------+|  104 | lemon      |    6.40 ||  101 | apple      |    5.20 ||  103 | apricot    |    2.20 ||  104 | berry      |    7.60 ||  107 | xxxx       |    3.60 ||  105 | melon      |    8.20 ||  101 | cherry     |    3.20 ||  105 | xbabay     |    2.60 ||  102 | grape      |    5.30 ||  107 | xbabay     |    3.60 ||  101 | apple      |    5.20 ||  103 | apricot    |    2.20 ||  101 | blackberry |   10.20 ||  101 | cherry     |    3.20 ||  103 | coconut    |    9.20 |+------+------------+---------+15 rows in set (0.00 sec)
登入後複製

可以看到,這裡總的記錄等於兩個select語句傳回的記錄數總和,連接查詢結果並沒有移除重複的行。

union和union all的區別:

  • 使用union all的功能是不刪除重複行,all關鍵字語句執行時所需要的資源少, 所以盡可能的使用它。
  • 確定查詢結果中不會有重複資料或不需要去掉重複資料的時候,應盡量使用uninon all以提高查詢效率。

更多相關免費學習推薦:##mysql教學(影片)

#

以上是MySQL查詢資料之合併查詢結果的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板