集合操作:類型和注意事項
集合操作注意事項
在 SELECT 清單中的列名和表達式在數量上必須比對
第二個查詢中的每一列的資料類型必須與第一個查詢其對應的列的資料類型相比對
可以用括号來改變的執行順序。
ORDER BY 子句:
– 隻能在語句的最後出現
– 可以使用第一個查詢中的列名,别名或相對位置
Oracle 伺服器和集合操作符
除 UNION ALL之外,系統會自動删除重複的記錄
列名為第一個查詢傳回的結果
除 UNION ALL之外,系統自動按照第一個查詢中的第一個列的升序排列
<a href="https://s4.51cto.com/wyfs02/M01/8E/A9/wKiom1jIDvOgDhhBAABa4ngJMgQ867.jpg-wh_500x0-wm_3-wmp_4-s_2625493988.jpg" target="_blank"></a>
使用 UNION 操作符
1、顯示目前和以前的工作的所有員工的詳細資訊。每個雇員隻顯示一次。
select employee_id, job_id
from employees
union
from job_history;
<a href="https://s1.51cto.com/wyfs02/M01/8E/A7/wKioL1jID4DyRrm0AABqp7-dAvo399.jpg-wh_500x0-wm_3-wmp_4-s_637459685.jpg" target="_blank"></a>
使用 UNION ALL 操作符
1、顯示目前和以前的員工的所有部門。
select employee_id, job_id, department_id
union all
from job_history
order by employee_id;
<a href="https://s3.51cto.com/wyfs02/M00/8E/A9/wKiom1jIEIvxFcEkAACXmFAjxsI654.jpg-wh_500x0-wm_3-wmp_4-s_2827213155.jpg" target="_blank"></a>
使用 INTERSECT 操作符
<a href="https://s1.51cto.com/wyfs02/M00/8E/A7/wKioL1jIEMWDdzWsAABMj2Epyfk090.jpg" target="_blank"></a>
顯示員工ID和工作ID,目前的職稱相同(也就是說,他們換工作但是現在已經回到以前同樣的工作)。
intersect
<a href="https://s3.51cto.com/wyfs02/M00/8E/A7/wKioL1jIETfzK_tSAAAzodX47P4590.jpg-wh_500x0-wm_3-wmp_4-s_1949633896.jpg" target="_blank"></a>
1、顯示員工表中一次都沒有改變過工作的的員工ID
select employee_id
minus
<a href="https://s2.51cto.com/wyfs02/M02/8E/A9/wKiom1jIEgrzulf4AAA0p4fq8AU275.jpg" target="_blank"></a>
相比對的 SELECT 語句
使用 UNION 操作符顯示location_id,department_name,state_province
當字段在一個或另一個表中不存在,必須比對上資料類型(使用TO_CHAR函數或其他轉換函數)
select location_id, department_name "Department",
to_char(null) "warehouse location"
from departments
select location_id, to_char(null) "Department",
state_province
from locations;
使用UNION操作符,顯示雇員的ID,工作ID,和所有員工的工資
select employee_id, job_id,salary
select employee_id, job_id,0
<a href="https://s2.51cto.com/wyfs02/M00/8E/A9/wKiom1jIEyCRsC1NAACMyyZrPtU276.jpg" target="_blank"></a>
集合操作中使用 ORDER BY 子句的注意事項
複合查詢中 ORDER BY 子句隻能在結束時出現一次
集合操作中每個查詢不能有單獨的 ORDER BY 子句
ORDER BY 子句中 隻能識别第一個 SELECT 查詢的列。
預設情況下,第一列的第一個 SELECT 查詢使用升序對輸出進行排序。
請查詢出所有的部門下沒有 ST_CLERK 工種的 department_id,要求使用集合操作符
select department_id
where job_id not like 'ST_CLERK';
<a href="https://s2.51cto.com/wyfs02/M00/8E/B1/wKioL1jJPs3CvI0GAABFrpUy1rk938.jpg" target="_blank"></a>
2、請使用集合操作符寫一條 SQL,查出所有的沒有部門坐落的國家的 country_id,country_name
select country_id,country_name
from countries
select l.country_id,c.country_name
from locations l join countries c
on (l.country_id=c.country_id)
join departments d
on d.location_id=l.location_id;
<a href="https://s4.51cto.com/wyfs02/M00/8E/B1/wKioL1jJP2Xwm4fdAAB-BDhj79g137.jpg-wh_500x0-wm_3-wmp_4-s_900270793.jpg" target="_blank"></a>
3、請使用集合操作符寫一條 SQL,查出部門号在 10,50,20 中的所有的 job_id,department_id,
并以 10,50,20 的排列順序顯示。
select distinct job_id,department_id
where department_id = 10
where department_id= 50
where department_id= 20;
<a href="https://s1.51cto.com/wyfs02/M01/8E/B1/wKioL1jJQAaAF1wPAAB8Jl2IoWI887.jpg-wh_500x0-wm_3-wmp_4-s_1175972551.jpg" target="_blank"></a>
4、請查出所有工作發生過變動,但是多次變動後現在的工作是做的以前做過的工作的員工的employee_id 和 job_id
select employee_id,job_id
<a href="https://s5.51cto.com/wyfs02/M00/8E/B1/wKioL1jJQJOC_zXbAAAwuZtWzTs445.jpg-wh_500x0-wm_3-wmp_4-s_3023947394.jpg" target="_blank"></a>
5、HR 部門的同僚希望你能夠幫助他們生成一個報告,要求滿足以下 2 點:
a)從 EMPLOYEES 表中獲得所有員工的 last_name 和 department_id(不管是否屬于同一個部門)
b)從 DEPARTMENTS 表中獲得所有的 department_id 和 department_name(不管是否該部門有員工)
select last_name,department_id,to_char(null) dept_name
select to_char(null),department_id,department_name
from departments;
LAST_NAME DEPARTMENT_ID DEPT_NAME
------------------------- ------------- ------------------------------
Abel 80
Ande 80
Atkinson 50
Austin 60
Baer 70
Baida 30
Banda 80
Bates 80
Bell 50
Bernstein 80
Bissot 50
Bloom 80
Bull 50
Cabrio 50
Cambrault 80
Chen 100
Chung 50
Colmenares 30
Davies 50
De Haan 90
Dellinger 50
Dilly 50
Doran 80
Ernst 60
Errazuriz 80
Everett 50
Faviet 100
Fay 20
Feeney 50
Fleaur 50
Fox 80
Fripp 50
Gates 50
Gee 50
Geoni 50
Gietz 110
Grant 50
Grant
Greenberg 100
Greene 80
Hall 80
Hartstein 20
Higgins 110
Himuro 30
Hunold 60
Hutton 80
Johnson 80
Jones 50
Kaufling 50
Khoo 30
King 80
King 90
Kochhar 90
Kumar 80
Ladwig 50
Landry 50
Lee 80
Livingston 80
Lorentz 60
Mallin 50
Markle 50
Marlow 50
Marvins 80
Matos 50
Mavris 40
McCain 50
McEwen 80
Mikkilineni 50
Mourgos 50
Nayer 50
OConnell 50
Olsen 80
Olson 50
Ozer 80
Partners 80
Pataballa 60
Patel 50
Perkins 50
Philtanker 50
Popp 100
Rajs 50
Raphaely 30
Rogers 50
Russell 80
Sarchand 50
Sciarra 100
Seo 50
Sewall 80
Smith 80
Stiles 50
Sullivan 50
Sully 80
Taylor 50
Taylor 80
Tobias 30
Tucker 80
Tuvault 80
Urman 100
Vargas 50
Vishney 80
Vollman 50
Walsh 50
Weiss 50
Whalen 10
Zlotkey 80
10 Administration
20 Marketing
30 Purchasing
40 Human Resources
50 Shipping
60 IT
70 Public Relations
80 Sales
90 Executive
100 Finance
110 Accounting
120 Treasury
130 Corporate Tax
140 Control And Credit
150 Shareholder Services
160 Benefits
170 Manufacturing
180 Construction
190 Contracting
200 Operations
210 IT Support
220 NOC
230 IT Helpdesk
240 Government Sales
250 Retail Sales
260 Recruiting
270 Payroll
本文轉自 yuri_cto 51CTO部落格,原文連結:http://blog.51cto.com/laobaiv1/1906572,如需轉載請自行聯系原作者