天天看點

SQL基礎之使用集合運算符進行多表查詢(十二)

集合操作:類型和注意事項

集合操作注意事項

在 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,如需轉載請自行聯系原作者