集合運算是對輸入的兩個或多個集合進行的運算,最終輸出乙個結果集。
t-sql支援3種集合運算:並集(union),交集(intersect)和差集(except)。
集合運算的基本格式為:
輸入的集合1
<
集合運算》
輸入的集合2
[order by …]
需要注意的是,集合運算涉及的兩個查詢不能包含order by 子句。但可以為整個集合運算的結果集增加乙個order by 子句。
參與集合運算的兩個查詢生成的結果集必須包含相同的列數,而且相應列必須具有相容的資料型別。這裡指的是優先順序較低的資料型別必須能隱式地轉換為較高的資料型別。
集合運算結果中的列名由第乙個查詢決定,因此如果要分配列名,應該在第乙個查詢中分配相應的列名。
集合運算還有乙個特點就是它任務兩個null值是相等的 。
交並差集合運算
union all集合運算返回在輸入的多集中出現的所有行,它實際上不會對行進行比較,也不會刪除重複行。
union (distinct)集合通過刪除重覆記錄,可以把兩個輸入的多集轉變為乙個集合。
從物理處理過程來看,sqlserver 不一定先刪除輸入多集中的重複行,在進行集合運算。相反,它可以先把兩個多集組合到一起,然後再刪除重複行。
運用場景:如果在集合運算中可能存在重複行,且要返回重複行,則使用union all。如果可能存在重複行,但是返回互不相同的行,則使用union。如果在輸入兩個集合中不可能出現重複行,推薦使用union all,因為可以避免sqlserver為檢測重複行而帶來的效能損失。
intersect (distinct)如果乙個行在兩個輸入多集中都至少出現一次,那麼交集返回的結果中將包含這一行。
except (distinct)集合運算是在邏輯上先刪除輸入多集中的重複行,然後返回只在乙個集合中出現,在第二個集合中不出現的所有行。換句話說,乙個行能夠被返回,僅當這個行在第乙個輸入的多集中至少出現一次,而且在第二個集合中沒有出現過。需要注意except是不對稱的。
集合運算優先順序
intersect的優先順序比union和except運算優先順序高,而union和except優先順序相等。
在包含多個集合運算的查詢中,優先計算intersect然後,從左到右的順序依次計算。
我們可以使用括號來提公升到最大優先順序!
SQL集合運算
1.表的加減法 1 定義 集合在數學領域表示 各種各樣的事物的總和 在資料庫領域表示記錄的集合.具體來說,表 檢視和查詢的執行結果都是記錄的集合,其中的元素為表或者查詢結果中的每一行。在標準 sql 中,分別對檢索結果使用union,intersect,except來將檢索結果進行並,交和差運算,像...
SQL集合運算
本系列 t sql基礎 主要是針對t sql基礎的總結。t sql基礎 01.單錶查詢 幾道sql查詢題 t sql基礎 02.聯接查詢 t sql基礎 03.子查詢 t sql基礎 04.表表示式 上篇 t sql基礎 04.表表示式 下篇 t sql基礎 05.集合運算 本系列 t sql基礎 ...
sql的集合運算
交集 內連線 並集全外連線 有的dbms不支援全外連線,比如mysql,可以使用union all來實現全外連線 select from table a inner join table b on table a.id table b.id union allselect from table a ...