9.4.2? UNION運算符
在SQL中,UNION運算符用于執行集合并的運算。關于UNION運算符的使用,這里通過實例來說明。
實例16? 使用UNION運算符執行集合并的運算
在STUDENT表中,查詢選修了1號或者10號課程的學生的學號、姓名、所在系信息。實例代碼:
SELECT????? ?SNO,? SNAME, DNAME |
運行結果如圖9.28所示。
![]() |
圖9.28? 使用UNION運算符執行集合并的查詢結果 |
上述代碼的執行過程可表示為,首先從STUDENT表中選出選修了1號課程的學號、姓名、所在系信息,作為一個集合(中間表),而后從STUDENT表中選出選修了10號課程的學號、姓名、所在系信息,作為另一個集合(中間表),最后對這兩個集合進行UNION,即并運算,從而得到了最終的結果表。
說明?UNION運算符執行集合并運算,自動從結果表中消除重復的行。
上面的實例也可以通過“OR”運算符來實現。
實例17? 使用“OR”運算符來實現實例16
代碼如下:
SELECT????? ?SNO,? SNAME, DNAME |
運行結果如圖9.29所示。
![]() |
圖9.29? 使用“OR”運算符實現并的查詢結果 |
與采用UNION運算符的結果相比,只是結果表中多了兩條重復記錄。因為集合操作自動去除重復元組,而OR運算符則不具備這個功能。當然,也可以通過DISTINCT關鍵字去除上面結果的重復記錄。
使用UNION運算符進行并操作,如果要保留重復元組的話,必須在UNION運算符后使用ALL關鍵詞指明。
實例18? 使用ALL關鍵詞保留重復元組
同樣的例子,代碼如下。
SELECT????? ?SNO,? SNAME, DNAME |
運行結果如圖9.30所示。
![]() |
圖9.30? 使用UNION運算符進行并操作且保留重復元組 |
前面介紹的UNION運算符進行并操作,參與并運算的兩個集合是來自同一個表的相同字段,而不同表的不同字段組成的集合也可以采用UNION運算符進行并操作。但是要求這兩個集合(表)必須選擇同樣數量的列,并且相應的列必須具有相同的類型。
實例19? 對不同表的不同字段組成的集合采用UNION運算符
在STUDENT表和TEACHER表中,查詢選修了1號或者10號課程的學生的姓名、所在系、課程號信息以及1號或者10號課程的教師的姓名、所在系、課程號信息。實例代碼:
SELECT????? ?SNAME AS NAME, DNAME, CNO |
運行結果如圖9.31所示。
![]() |
圖9.31? 選修1號或者10號課程學生的相關信息 |
可見,UNION運算符只要求列的類型匹配即可,而對應列的列名可以是不同的,如上例中的“SNAME”和“TNAME”。
說明?一些DBMS產品對每個名稱不同的SELECT語句的列,UNION運算后,結果表中的列是沒有名字的,而其他DBMS產品,如SQL Server,將使用UNION運算中第一條SELECT語句中的列名作為結果表中的列名。