oracle數據庫SQL開發之集合運算
集合運算
一、聯合(UNION)運算
– 返回由任一查詢結果集包含的行,並且去除重複行,並且按照查詢結果集的第一列序排序。
– 使用原則
• 多個被聯合的查詢語句所選擇的列數和列的數據類型必須一致,列的名字不必相同。
• 如果多個查詢結果都有NULL值,整個結果中只包含一個NULL值。
• 每個查詢不能包含自己的Order by子句,只能在聯合之後使用Order by子句。
SQL>SELECT deptno,to_char(NULL),ename,hiredate FROM emp
UNION
SELECT deptno,loc,to_char(NULL),to_date(NULL) FROM dept;
二、完全聯合 (UNION ALL) 運算
– 返回由任一查詢結果集包含的行,並且包含重複行,默認情況下不對結果集進行排序。
– 使用原則
• 多個被聯合的查詢語句所選擇的列數和列的數據類型必須一致,列的名字不必相同。
• 如果多個查詢結果都有NULL值,不被去掉。
• 每個查詢不能包含自己的Order by子句,只能在聯合之後使用Order by子句。
– 注意:使用UNION ALL會比UNION的速度快,因爲省去了去掉重複記錄和排序的時間。
三、相交運算(intersect)
– 返回多個查詢結果集的 公有行。
– 使用原則
• 多個查詢語句所選擇的列數和列的數據類型必須一致,列的名字不必相同。
• 相交運算不忽略空值。
–查詢哪些員工做過崗位調動
SQL>SELECT empno FROM emp
INTERSECT
SELECT empno FROM emp_jobhistory;
四、相減運算 (minus)
– 返回第一個查詢中存在 而第二個查詢中不存在的行記錄。
– 使用原則
• 多個查詢語句所選擇的列數和列的數據類型必須一致,列的名字不必相同。
• 相減運算不忽略空值。
–查詢哪些員工沒做過崗位調動
SQL>SELECT empno FROM emp
MINUS
SELECT empno FROM emp_jobhistory;