国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

MS-SQL中多個表或結果集的組合的方法

2024-07-21 02:32:06
字體:
來源:轉載
供稿:網友
    在MS-SQL如果將兩個或更多查詢的結果組合為單個結果集,該結果集包含聯合查詢中的所有查詢的全部行,常用的方法如下:
一.       使用union 或union All語句
1.   union 與 union all語句的區別
Ø         UNION 組合多個表(或結果集)并將其作為單個結果集返回;
Ø         UNION ALL 在結果中包含所有的行,包括重復行。
Ø         也就是說,使用UNION組合兩個表時,將重復的記錄刪除;而使用UNION ALL組合兩多個表時,不考慮結果集中是否存在重復記錄。
2.   使用 UNION 運算符時請注意:
Ø         所有查詢中的列數和列的順序必須相同。
     在使用 UNION 運算符組合的語句中,所有顯示列表的數目必須相同(列表內容可以包括:列名、算術表達式、聚合函數等);
Ø         數據類型必須兼容。
     在使用 UNION 組合的結果集中的相應列必須具有相同數據類型,或者兩種數據類型之間存在隱性數據轉換,或提供了類型轉換。例如,在datetime 數據類型的列和 binary 數據類型的列之間不可能存在 UNION 運算符,除非提供了顯式轉換,而在 money 數據類型的列和 int 數據類型的列之間可以存在 UNION 運算符,因為它們可以進行隱性轉換。
Ø         用 UNION 運算符組合的各語句中對應的結果集列出現的順序必須相同,因為 UNION 運算符是按照各個查詢給定的順序逐個比較各列。   
3.   與其它 Transact-SQL語句一起使用 UNION 語句時,應注意:
Ø         如果在有UNION的語句中使用INTO語句,則只能在最終表(或結果集)中使用,如果要在單個表(或結果集)中使用INTO語句,MS-SQL將會提示錯誤;
錯誤語句:Select AID,AName,ADemo Into From ATable Union All Select BID,BName,BDemo Into From Btable
Ø         只有在 UNION 語句的結尾,才允許使用 ORDER BY 和 COMPUTE 子句以定義最終結果的順序或計算匯總值。不能在組建 UNION 語句的單獨查詢中使用這些子句。
錯誤語句:
Select AID,AName,ADemo From ATable order by AID
Union All
Select BID,BName,BDemo From BTable Order By BID  
可以這樣寫:
Select * From
(Select AID,AName,ADemo From ATable Union All Select BID,BName,BDemo From BTable) a
Order By a.AID
也可以這樣寫:
    Select AID,AName,ADemo From ATable
    Union All
    Select BID,BName,BDemo From BTable
      Order By AID
   此處之所以按AID來排序,是因為MS-SQL中將最后的結果表中的第一列命名為AID。某些DBMS的系統并不對使用不同列名的查詢的表列命名,這樣就不能使用Order By 列名的方式來排序,不過可以引用結果表中列的順序來排序,例如:Order By 1,則相當于Order By AID
Ø         GROUP BY 和 HAVING 子句只能在單獨的查詢中使用;它們不能用來影響最終的結果集。
Ø         UNION 運算符可用于 INSERT 語句中。
     FOR BROWSE 子句不能在包含 UNION 運算符的語句中使用。(FOR BROWSE使用及說明可以參考SELECT語句的說明)
   注意:某些DBMS系統在由UNION組合查詢的Select子句中不允許使用函數和表達式。
 
二.       使用except 或 INTERSECT 運算符
      與UNION相似,except 或 INTERSECT 運算符也可以將多個表(或結果集)組合生成一個新表(或結果集),只是結果不同而已。
1.   Except運算符
    和 UNION 指令類似, Except也是對兩個 SQL 語句所產生的結果做處理的。不同的地方是Except在每一個表(或結果集)與第二個表(或結果集)比較前,已從每一個表的結果集中清除了所有重復的信息。也就是從Except運算所得到的結果集絕不會包含重復的記錄(行)。
    例如:我們要在Table_A(學生信息表)與Table_B(學生必修課完成信息表)中找出未完成的學生信息
       Select * From Table_A
       Except
       Select * From Table_B
    注意:許多DBMS系統不支持EXCEPT運算符,則此時不得不使用Left Outer Join運算符來實現。而在Oracle中的Minus與EXCEPT相似。
2.      INTERSECT運算符
    和 UNION 指令類似, INTERSECT 也是對兩個 SQL 語句所產生的結果做處理的。不同的地方是,UNION 是聯集,而 INTERSECT 是交集。也就是說,INTERSECT生成的結果集是多個表或結果集所共有的記錄(行)。
       Select AID,AName,ADemo From ATable
       INTERSECT
Select BID,BName,BDemo From Btable
 
三.    使用UNION Corresponding組合來自兩個或多個與UNION不兼容的表中的行
 例如:有兩個表
   Create Table Table_A(ID int,office int,address varchar(20),department char(5),pay money)
   Create Table Table_B(office int,ID int,address varchar(20),department char(5))
   可以使用UNION Corresponding來獲取兩個表中有共同列名的列中數據:
   Select * From table_A UNION Corresponding Select * From Table_b
  
  
注意:并不是所有的DBMS都支持UNION Corresponding運算,包括MS-SQL Server。
http://blog.csdn.net/sxycgxj/archive/2007/03/02/1518751.aspx
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 那曲县| 吐鲁番市| 兴山县| 绵竹市| 福泉市| 冀州市| 开阳县| 刚察县| 保德县| 崇明县| 景泰县| 莆田市| 太仓市| 怀化市| 纳雍县| 洛川县| 娄底市| 白沙| 曲水县| 启东市| 米林县| 全州县| 西丰县| 长治市| 陆河县| 鄂温| 突泉县| 黄山市| 若尔盖县| 扶风县| 邢台县| 嫩江县| 苍山县| 文登市| 正镶白旗| 华坪县| 曲阳县| 阳信县| 夹江县| 吐鲁番市| 雷州市|