以下是Oracle 數據庫中hr 用戶下面的表。下面的sql語句是以hr身份進入的。若是以system 身份進入需要在表名前面加hr. (如hr.employees)。
以下是表的基本結構
employees 表:
EMPLOYEE_ID NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME VARCHAR2(25)
EMAIL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE DATE
JOB_ID VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)
departments
DEPARTMENT_ID NUMBER(4)
DEPARTMENT_NAME VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)
locations
LOCATION_ID NUMBER(4)
STREET_ADDRESS VARCHAR2(40)
POSTAL_CODE VARCHAR2(12)
CITY VARCHAR2(30)
STATE_PROVINCE VARCHAR2(25)
COUNTRY_ID CHAR(2)
jobs 表
JOB_ID VARCHAR2(10)
JOB_TITLE VARCHAR2(35)
MIN_SALARY NUMBER(6)
MAX_SALARY NUMBER(6)
- 查詢每個月倒數第 2 天入職的員工的信息.
sql 語句如下:
select last_name, hire_date from employees where hire_date = last_day(hire_date) – 1
結果
LAST_NAME HIRE_DATE
------------------------- --------------
Atkinson 30-10月-05
Tucker 30-1月 -05
Olsen 30-3月 -06
King 30-1月 -04
- 查詢出 last_name 爲 ‘Chen’ 的 manager 的信息.
1). 通過兩條 sql 查詢:
select manager_id
from employees
where lower(last_name) = 'chen' --返回的結果108
select *
from employees
where employee_id = 108
2). 通過一條 sql 查詢(自連接):
select m.*
from employees e, employees m
where e.manager_id = m.employee_id and e.last_name
= 'Chen'
3). 通過一條 sql 查詢(子查詢):
select *
from employees
where employee_id = (
select manager_id
from employees
where last_name = 'Chen'
)
結果
EMPLOYEE_ID FIRST_NAME LAST_NAME
----------- -------------------- -------------------------
EMAIL PHONE_NUMBER HIRE_DATE JOB_ID
------------------------- -------------------- -------------- ----------
SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
---------- -------------- ---------- -------------
108 Nancy Greenberg
NGREENBE 515.124.4569 17-8月 -02 FI_MGR
12008 101 100
- 查詢平均工資高於 8000 的部門 id 和它的平均工資
SELECT department_id, avg(salary)
FROM employees e
GROUP BY department_id
HAVING avg(salary) > 8000
結果
DEPARTMENT_ID AVG(SALARY)
------------- -----------
100 8601.33333
90 19333.3333
20 9500
70 10000
110 10154
80 8955.88235
已選擇6行。
- 查詢工資最低的員工信息: last_name, salary
SELECT last_name, salary
FROM employees
WHERE salary = (
SELECT min(salary)
FROM employees
)
結果:
LAST_NAME SALARY
------------------------- ----------
Olson 2100
- 查詢平均工資最低的部門信息
select *
from departments
where department_id =(
select department_id
from employees
group by department_id
having avg (salary) =
(
select min (avg(salary))
from employees
group by department_id
)
)
結果:
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
50 Shipping 121 1500
- 查詢平均工資最低的部門信息和該部門的平均工資
select d.*,(select avg(salary) from employees where department_id=d.department_id)
from departments d
where d.department_id=(
select department_id
from
employees
group by department_id
having avg(salary) =(
select min (avg(salary))
from employees
group by department_id
)
)
結果:
DEPARTMENT_ID DEPARTMENT_NAME MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
(SELECTAVG(SALARY)FROMEMPLOYEESWHEREDEPARTMENT_ID=D.DEPARTMENT_ID)
------------------------------------------------------------------
50 Shipping 121 1500
3475.55556
- 查詢平均工資最高的 job
1). 按 job_id 分組, 查詢最高的平均工資
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
2). 查詢出平均工資等於 1) 的 job_id
SELECT job_id
FROM employees
GROUP BY job_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
)
3). 查詢出 2) 對應的 job 信息
SELECT *
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
)
)
結果
JOB_ID JOB_TITLE MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES President 20080 40000
- 查詢平均工資高於公司平均工資的部門有哪些?
1). 查詢出公司的平均工資
SELECT avg(salary)
FROM employees
2). 查詢平均工資高於 1) 的部門 ID
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) > (
SELECT avg(salary)
FROM employees
)
結果:
DEPARTMENT_ID
-------------
100
90
20
70
110
80
40
已選擇8行。
- 查詢出公司中所有 manager 的詳細信息
SELECT employee_id, last_name
FROM employees
WHERE employee_id in (
SELECT distinct manager_id
FROM employees
)
結果
EMPLOYEE_ID LAST_NAME
----------- -------------------------
148 Cambrault
102 De Haan
147 Errazuriz
121 Fripp
108 Greenberg
201 Hartstein
205 Higgins
103 Hunold
122 Kaufling
100 King
101 Kochhar
124 Mourgos
146 Partners
114 Raphaely
145 Russell
123 Vollman
120 Weiss
149 Zlotkey
已選擇18行。
- 各個部門中 最高工資中最低的那個部門的
1). 查詢出各個部門的最高工資
SELECT max(salary)
FROM employees
GROUP BY department_id
2). 查詢出 1) 對應的查詢結果的最低值: 各個部門中最低的最高工
資(無法查詢對應的 department_id)
SELECT min(max(salary))
FROM employees
GROUP BY department_id
3). 查詢出 2) 所對應的部門 id 是多少: 各個部門中最高工資等於
2) 的那個部門的 id
SELECT department_id
FROM employees
GROUP BY department_id
HAVING max(salary) = (
SELECT min(max(salary))
FROM employees
GROUP BY department_id
)
4). 查詢出 3) 所在部門的最低工資
select min (salary)
from employees
where department_id =(
select department_id
from employees
group by department_id
having max(salary) = (
select min (max(salary))
from employees
group by department_id
)
)
結果:
MIN(SALARY)
-----------
4400
- 查詢平均工資最高的部門的 manager 的詳細信息: last_name,department_id, email,salary
1). 各個部門中, 查詢平均工資最高的平均工資是多少
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
2). 各個部門中, 平均工資等於 1) 的那個部門的部門號是多少
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
)
3). 查詢出 2) 對應的部門的 manager_id
SELECT manager_id
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
)
)
4). 查詢出 employee_id 爲 3) 查詢的 manager_id 的員工的
last_name, department_id, email, salary
select last_name,department_id,email,salary
from employees
where employee_id = (
select manager_id
from departments
where department_id = (
select department_id
from employees
group by department_id
having avg (salary) = (
select max(avg(salary))
from employees
group by department_id
)
)
)
結果:
LAST_NAME DEPARTMENT_ID EMAIL SALARY
------------------------- ------------- ------------------------- ----------
King 90 SKING 24000
- 查詢 1999 年來公司的人所有員工的最高工資的那個員工的信息.
1). 查詢出 1999 年來公司的所有的員工的 salary
SELECT salary
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
2). 查詢出 1) 對應的結果的最大值
SELECT max(salary)
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
3). 查詢工資等於 2) 對應的結果且 1999 年入職的員工信息
SELECT *
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999' AND salary
= (
SELECT max(salary)
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
)
- 比 返回其它部門中比 job_id 爲‘IT_PROG’ 部門所有工資都低的員工的員
工號、姓名、job_id 以及 salary
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG'
結果:
EMPLOYEE_ID LAST_NAME JOB_ID SALARY
----------- ------------------------- ---------- ----------
185 Bull SH_CLERK 4100
192 Bell SH_CLERK 4000
193 Everett SH_CLERK 3900
188 Chung SH_CLERK 3800
137 Ladwig ST_CLERK 3600
189 Dilly SH_CLERK 3600
141 Rajs ST_CLERK 3500
186 Dellinger SH_CLERK 3400
133 Mallin ST_CLERK 3300
129 Bissot ST_CLERK 3300
180 Taylor SH_CLERK 3200
138 Stiles ST_CLERK 3200
125 Nayer ST_CLERK 3200
194 McCain SH_CLERK 3200
115 Khoo PU_CLERK 3100
196 Walsh SH_CLERK 3100
142 Davies ST_CLERK 3100
181 Fleaur SH_CLERK 3100
187 Cabrio SH_CLERK 3000
197 Feeney SH_CLERK 3000
116 Baida PU_CLERK 2900
190 Gates SH_CLERK 2900
134 Rogers ST_CLERK 2900
183 Geoni SH_CLERK 2800
130 Atkinson ST_CLERK 2800
117 Tobias PU_CLERK 2800
195 Jones SH_CLERK 2800
126 Mikkilineni ST_CLERK 2700
139 Seo ST_CLERK 2700
143 Matos ST_CLERK 2600
199 Grant SH_CLERK 2600
118 Himuro PU_CLERK 2600
198 OConnell SH_CLERK 2600
140 Patel ST_CLERK 2500
131 Marlow ST_CLERK 2500
119 Colmenares PU_CLERK 2500
191 Perkins SH_CLERK 2500
182 Sullivan SH_CLERK 2500
144 Vargas ST_CLERK 2500
127 Landry ST_CLERK 2400
135 Gee ST_CLERK 2400
128 Markle ST_CLERK 2200
136 Philtanker ST_CLERK 2200
132 Olson ST_CLERK 2100
已選擇44行。