- 與 查詢與 141 號或 174 號員工的 manager_id 和 和 department_id 相同的
的 其他員工的 employee_id, manager_id, department_id
[ 方式一]
select employee_id,manager_id,department_id
from employees
where manager_id in
(select manager_id
from employees
where employee_id in (174,141))
and
department_id in (
select department_id
from employees
where employee_id in (174,141))
and
employee_id not in(174,141);
[ 方式二]
select employee_id,manager_id,department_id
from employees
where(manager_id,department_id)
in
(
select manager_id,department_id
from employees
where employee_id in (141,174))
and
employee_id not in (174,141);
結果:
EMPLOYEE_ID MANAGER_ID DEPARTMENT_ID
----------- ---------- -------------
199 124 50
198 124 50
197 124 50
196 124 50
144 124 50
143 124 50
142 124 50
179 149 80
177 149 80
176 149 80
175 149 80
已選擇11行。
- 的 返回比本部門平均工資高的員工的 last_name, department_id,
salary
[ 方式一]
select last_name,department_id,salary,
(select avg(salary)from employees e3
where e1.department_id = e3.department_id
group by department_id) avg_salary
from employees e1
where salary >
(select avg(salary)
from employees e2
where e1.department_id = e2.department_id
--group by department_id
)
[ 方式二]
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;
結果:
LAST_NAME DEPARTMENT_ID SALARY AVG_SALARY
------------------------- ------------- ---------- ----------
King 90 24000 19333.3333
Hunold 60 9000 5760
Ernst 60 6000 5760
Greenberg 100 12008 8601.33333
Faviet 100 9000 8601.33333
Raphaely 30 11000 4150
Weiss 50 8000 3475.55556
Fripp 50 8200 3475.55556
Kaufling 50 7900 3475.55556
Vollman 50 6500 3475.55556
Mourgos 50 5800 3475.55556
Ladwig 50 3600 3475.55556
Rajs 50 3500 3475.55556
Russell 80 14000 8955.88235
Partners 80 13500 8955.88235
Errazuriz 80 12000 8955.88235
Cambrault 80 11000 8955.88235
Zlotkey 80 10500 8955.88235
Tucker 80 10000 8955.88235
Bernstein 80 9500 8955.88235
Hall 80 9000 8955.88235
King 80 10000 8955.88235
Sully 80 9500 8955.88235
McEwen 80 9000 8955.88235
Vishney 80 10500 8955.88235
Greene 80 9500 8955.88235
Ozer 80 11500 8955.88235
Bloom 80 10000 8955.88235
Fox 80 9600 8955.88235
Abel 80 11000 8955.88235
Sarchand 50 4200 3475.55556
Bull 50 4100 3475.55556
Chung 50 3800 3475.55556
Dilly 50 3600 3475.55556
Bell 50 4000 3475.55556
Everett 50 3900 3475.55556
Hartstein 20 13000 9500
Higgins 110 12008 10154
已選擇38行。
- 的 顯式員工的 employee_id,last_name 和 和 location 。其中,若員工
department_id 與 與 location_id 爲 爲 1800 的 的 department_id 相同,則
location 爲’Canada’, 其餘則爲’USA’ 。
SELECT employee_id, last_name,
(CASE department_id
WHEN (SELECT department_id FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;
``
結果:
EMPLOYEE_ID LAST_NAME LOCATI
100 King USA
101 Kochhar USA
102 De Haan USA
103 Hunold USA
104 Ernst USA
105 Austin USA
106 Pataballa USA
107 Lorentz USA
108 Greenberg USA
109 Faviet USA
110 Chen USA
111 Sciarra USA
112 Urman USA
113 Popp USA
114 Raphaely USA
115 Khoo USA
116 Baida USA
117 Tobias USA
118 Himuro USA
119 Colmenares USA
120 Weiss USA
121 Fripp USA
122 Kaufling USA
123 Vollman USA
124 Mourgos USA
125 Nayer USA
126 Mikkilineni USA
127 Landry USA
128 Markle USA
129 Bissot USA
130 Atkinson USA
131 Marlow USA
132 Olson USA
133 Mallin USA
134 Rogers USA
135 Gee USA
136 Philtanker USA
137 Ladwig USA
138 Stiles USA
139 Seo USA
140 Patel USA
141 Rajs USA
142 Davies USA
143 Matos USA
144 Vargas USA
145 Russell USA
146 Partners USA
147 Errazuriz USA
148 Cambrault USA
149 Zlotkey USA
150 Tucker USA
151 Bernstein USA
152 Hall USA
153 Olsen USA
154 Cambrault USA
155 Tuvault USA
156 King USA
157 Sully USA
158 McEwen USA
159 Smith USA
160 Doran USA
161 Sewall USA
162 Vishney USA
163 Greene USA
164 Marvins USA
165 Lee USA
166 Ande USA
167 Banda USA
168 Ozer USA
169 Bloom USA
170 Fox USA
171 Smith USA
172 Bates USA
173 Kumar USA
174 Abel USA
175 Hutton USA
176 Taylor USA
EMPLOYEE_ID LAST_NAME LOCATI
177 Livingston USA
178 Grant USA
179 Johnson USA
180 Taylor USA
181 Fleaur USA
182 Sullivan USA
183 Geoni USA
184 Sarchand USA
185 Bull USA
186 Dellinger USA
187 Cabrio USA
188 Chung USA
189 Dilly USA
190 Gates USA
191 Perkins USA
192 Bell USA
193 Everett USA
194 McCain USA
195 Jones USA
196 Walsh USA
197 Feeney USA
198 OConnell USA
199 Grant USA
200 Whalen USA
201 Hartstein Canada
202 Fay Canada
203 Mavris USA
204 Baer USA
205 Higgins USA
206 Gietz USA
已選擇107行。
- 查 詢 員 工 的 employee_id,last_name, 要 求 按 照 員 工 的
department_name 排序
select employee_id,last_name
from employees e
order by(
select department_name
from departments d
where e.department_id = d.department_id
);
結果:
EMPLOYEE_ID LAST_NAME
----------- -------------------------
205 Higgins
206 Gietz
200 Whalen
100 King
101 Kochhar
102 De Haan
109 Faviet
108 Greenberg
112 Urman
111 Sciarra
110 Chen
113 Popp
203 Mavris
107 Lorentz
106 Pataballa
105 Austin
103 Hunold
104 Ernst
201 Hartstein
202 Fay
204 Baer
119 Colmenares
114 Raphaely
115 Khoo
116 Baida
117 Tobias
118 Himuro
167 Banda
168 Ozer
169 Bloom
170 Fox
171 Smith
172 Bates
173 Kumar
174 Abel
175 Hutton
176 Taylor
177 Livingston
179 Johnson
145 Russell
146 Partners
147 Errazuriz
148 Cambrault
149 Zlotkey
150 Tucker
151 Bernstein
152 Hall
153 Olsen
154 Cambrault
155 Tuvault
156 King
157 Sully
158 McEwen
159 Smith
160 Doran
161 Sewall
162 Vishney
163 Greene
164 Marvins
165 Lee
166 Ande
180 Taylor
144 Vargas
182 Sullivan
183 Geoni
184 Sarchand
185 Bull
186 Dellinger
187 Cabrio
188 Chung
189 Dilly
190 Gates
191 Perkins
192 Bell
193 Everett
194 McCain
195 Jones
EMPLOYEE_ID LAST_NAME
----------- -------------------------
196 Walsh
197 Feeney
198 OConnell
199 Grant
120 Weiss
121 Fripp
122 Kaufling
123 Vollman
124 Mourgos
125 Nayer
126 Mikkilineni
127 Landry
128 Markle
129 Bissot
130 Atkinson
131 Marlow
132 Olson
133 Mallin
134 Rogers
135 Gee
136 Philtanker
137 Ladwig
138 Stiles
139 Seo
140 Patel
141 Rajs
142 Davies
143 Matos
181 Fleaur
178 Grant
已選擇107行。
- 查詢員工中工資大於本部門平均工資的員工的 last_name,
salary 和其 department_id
SELECT last_name, salary, department_id
FROM employees outer
WHERE salary >
(SELECT AVG(salary)
FROM employees
WHERE department_id =
outer.department_id) ;
結果:
LAST_NAME SALARY DEPARTMENT_ID
------------------------- ---------- -------------
King 24000 90
Hunold 9000 60
Ernst 6000 60
Greenberg 12008 100
Faviet 9000 100
Raphaely 11000 30
Weiss 8000 50
Fripp 8200 50
Kaufling 7900 50
Vollman 6500 50
Mourgos 5800 50
Ladwig 3600 50
Rajs 3500 50
Russell 14000 80
Partners 13500 80
Errazuriz 12000 80
Cambrault 11000 80
Zlotkey 10500 80
Tucker 10000 80
Bernstein 9500 80
Hall 9000 80
King 10000 80
Sully 9500 80
McEwen 9000 80
Vishney 10500 80
Greene 9500 80
Ozer 11500 80
Bloom 10000 80
Fox 9600 80
Abel 11000 80
Sarchand 4200 50
Bull 4100 50
Chung 3800 50
Dilly 3600 50
Bell 4000 50
Everett 3900 50
Hartstein 13000 20
Higgins 12008 110
已選擇38行。
- 若 若 employees 表中 employee_id 與 job_history 表中 employee_id
於 相同的數目不小於 2 ,輸出這些相同 id 的員工的 employee_id,last_name
其 和其 job_id
select e.employee_id ,last_name,e.job_id
from employees e
where 2<=(select count(*)
from job_history
where employee_id = e.employee_id
);
結果:
EMPLOYEE_ID LAST_NAME JOB_ID
----------- ------------------------- ----------
101 Kochhar AD_VP
176 Taylor SA_REP
200 Whalen AD_ASST
–EXISTS 操作符
• EXISTS 操作符檢查在子查詢中是否存在滿足條件的行
• 如果在子查詢中存在滿足條件的行:
– 不在子查詢中繼續查找
– 條件返回 TRUE
7. 的 查詢公司管理者的 employee_id,last_name,job_id,
department_id
SELECT employee_id, last_name, job_id, department_id
FROM employees outer
WHERE EXISTS ( SELECT 'X'
FROM employees
WHERE manager_id =
outer.employee_id);
- 詢 查 詢 departments 於 表 中, 不存 在於 employees 表 中的 部門 的
department_id 和 和 department_name
SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id
= d.department_id)
修改表 employees, 添加 department_name 列,賦予 department_id
相應的部門名稱。
ALTER TABLE employees
ADD(department_name VARCHAR2(14));
UPDATE employees e
SET department_name =
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
- 刪除表 employees 中,其與 emp_history
DELETE FROM employees E
WHERE employee_id in
(SELECT employee_id
FROM emp_history
WHERE employee_id = E.employee_id);
查詢公司中各部門的總工資大於公司中各部門的平均總工資的部門信息
dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name
12.的 查詢員工的 last_name, department_id, salary. 其中員工的
salary,department_id 與有獎金的任何一個員工的 salary,
department_id 相同即可
select last_name, department_id, salary
from employees
where (salary,department_id) in (
select salary,department_id
from employees
where commission_pct is not null
)
13.有 選擇工資大於所有 JOB_ID = ‘SA_MAN’ 的員工的工資的員工的
last_name, job_id, salary
select last_name, job_id, salary
from employees
where salary > all(
select salary
from employees
where job_id = 'SA_MAN'
)
14選擇所有沒有管理者的員工的 last_name
select last_name
from employees e1
where not exists (
select 'A'
from employees e2
where e1.manager_id = e2.employee_id
)
- 查詢 10 ,50 ,20 號部門的 job_id ,department_id 並且
department_id 按 按 10 ,50 ,20
Column dummy noprint;
select job_id , department_id ,1 dummy
from employees
where department_id = 10
union
select job_id , department_id , 2
from employees
where department_id = 50
union
select job_id , department_id , 3
from employees
where department_id= 20
order by 3
結果:
JOB_ID DEPARTMENT_ID
---------- -------------
AD_ASST 10
SH_CLERK 50
ST_CLERK 50
ST_MAN 50
MK_MAN 20
MK_REP 20
已選擇6行。