10-SET運算子
阿新 • • 發佈:2020-08-09
將多個查詢用 SET 操作符連線組成一個新的查詢
-UNION/UNION ALL
-INTERSECT
-MINUS
排序:ORDER BY
1 --UNION: 操作符返回兩個查詢的結果集的並集
2 SELECT employee_id, job_id
3 FROM employees
4 UNION
5 SELECT employee_id, job_id
6 FROM job_history;
7
8 --UNION ALL 操作符返回兩個查詢的結果集的並集。對於兩個結果集的重複部分,不去重。
9 SELECT employee_id, job_id, department_id
10 FROM employees
11 UNION ALL
12 SELECT employee_id, job_id, department_id
13 FROM job_history
14 ORDER BY employee_id;
15
16 --INTERSECT 操作符返回兩個結果集的交集
17 SELECT employee_id, job_id
18 FROM employees
19 INTERSECT
20 SELECT employee_id, job_id
21 FROM job_history;
22
23 --MINUS操作符:返回兩個結果集的差集
24 SELECT employee_id,job_id
25 FROM employees
26 MINUS
27 SELECT employee_id,job_id
28 FROM job_history;
使用 SET 操作符注意事項
*在SELECT 列表中的列名和表示式在數量和資料型別上要相對應
*括號可以改變執行的順序
*ORDER BY 子句:
只能在語句的最後出現
可以使用第一個查詢中的列名, 別名或相對位置
*除 UNION ALL之外,系統會自動將重複的記錄刪除
*系統將第一個查詢的列名顯示在輸出中
*除 UNION ALL之外,系統自動按照第一個查詢中的第一個列的升序排列
1 --匹配各SELECT 語句舉例1
2 SELECT department_id, TO_NUMBER(null)
3 location, hire_date
4 FROM employees
5 UNION
6 SELECT department_id, location_id, TO_DATE(null)
7 FROM departments;
8
9 --匹配各SELECT 語句舉例2
10 SELECT employee_id, job_id,salary
11 FROM employees
12 UNION
13 SELECT employee_id, job_id,0
14 FROM job_history;
15
16 --使用相對位置排序舉例
17 COLUMN a_dummy NOPRINT --查詢結果不顯示a_dummy列
18 SELECT 'sing' AS "My dream", 1 a_dummy
19 FROM dual
20 UNION
21 SELECT 'I`d like to teach', 2
22 FROM dual
23 UNION
24 SELECT 'the world to',3
25 FROM dual
26 ORDER BY 2 asc;
eg:
1 --查詢部門的部門號,其中不包括job_id是”ST_CLERK”的部門號
2 --select department_id
3 --from departments
4 --where department_id not in (
5 -- select distinct department_id
6 -- from employees
7 -- where job_id = 'ST_CLERK'
8 -- )
9 select department_id
10 from departments
11 minus
12 select department_id
13 from employees
14 where job_id = 'ST_CLERK';
15
16 --查詢10,50,20號部門的job_id,department_id並且department_id按10,50,20的順序排列
17 column a_dummy noprint;
18 SELECT job_id,department_id,1 a_dummy
19 from employees
20 where department_id = 10
21 union
22 SELECT job_id,department_id,2
23 from employees
24 where department_id = 50
25 union
26 SELECT job_id,department_id,3
27 from employees
28 where department_id = 20
29 order by 3 asc;
30
31 --查詢所有員工的last_name ,department_id 和department_name
32 select last_name,department_id,to_char(null)
33 from employees
34 union
35 select to_char(null),department_id,department_name
36 from departments;