SQL必知必會 筆記 第十四章 組合查詢,必知組合查詢
14.1組合查詢
多數SQL查詢都只包含從一個或多個表中返回單條SELECT語句。但是,SQL與允許執行多個查詢(多條SELECT語句),並將結果作為單個查詢結果集返回。這些組合查詢通常稱為並(union)或符合查詢(compound query)。
有兩種基本情況,其中需要使用組合查詢。
(1)在單個查詢中從不同的表類似返回結構資料。
(2)對單個表執行多個查詢,按單個查詢返回資料。
14.2建立組合查詢
可用UNION操作符來組合數條SQL查詢。利用UNION,可給出多條SELECT語句,將他們的結果組合成單個結果集。
14.2.1使用UNION
UNION的使用很簡單。所需做的只是給出每條SELECT語句,在各條語句之間放上關鍵字UNION。
SELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNIONSELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_name = 'Fun4All';
UNION指示DBMS執行兩條SELECT語句,並把輸出組合成單個查詢結果集。
14.2.2UNION規則
(1)UNION必須由兩條或兩條以上的SELECT語句組成,語句之間用關鍵字UNION分隔。
(2)UNION中的每個查詢必須包含相同的列、運算式或聚集合函式(不過各個列不需要以相同的次序列出)。
(3)列資料類型必須相容:類型不必完全相同,但必須是DBMS可以隱含地轉換的類型。
14.2.3包含或取消重複的行
UNION從查詢結果集中自動去除了重複的行。這是UNIO的預設行為,但是如果願意,可以改變它。事實上,如果想返回所有匹配行,可使用UNION ALL而不是UNION。
SELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNION ALLSELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_name = 'Fun4All';
使用UNION ALL,DBMS不取消重複的行。
14.2.4對組合查詢結果排序
在用UNION組合查詢時,只能使用一條ORDER BY子句,他必須出現在最後一條SELECT語句之後。
SELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_state IN ('IL','IN','MI')UNION ALLSELECT cust_name,cust_contact,cust_emailFROM CustomersWHERE cust_name = 'Fun4All'ORDER BY cust_name,cust_contact;