문제 1
- Zlotkey 와 동일한 부서에 근무하는 다른 모든 사원들의 사번 및 고용날짜를 출력하시오.
1 select employee_id, hire_date
2 from employees
3 where department_id = (
4 select department_id
5 from employees
6 where last_name='Zlotkey')
7* and last_name != 'Zlotkey'
// Zlotkey 본인은 빼줘야함!!
SQL> // result
EMPLOYEE_ID HIRE_DAT
----------- --------
145 04/10/01
146 05/01/05
147 05/03/10
148 07/10/15
150 05/01/30
...
173 08/04/21
174 04/05/11
175 05/03/19
176 06/03/24
177 06/04/23
179 08/01/04
33 rows selected.
문제 2
- 회사 전체 평균 급여보다 더 급여를 많이 받는 사원들의 사번 및 이름을 출력하시오.
1 select employee_id, first_name
2 from employees
3 where salary > (
4 select avg(salary)
5* from employees)
SQL> // result
EMPLOYEE_ID FIRST_NAME
----------- --------------------
100 Steven
101 Neena
102 Lex
103 Alexander
108 Nancy
109 Daniel
...
201 Michael
203 Susan
204 Hermann
205 Shelley
206 William
51 rows selected.
문제 3
- 이름에 u가 포함되는 사원들과 동일 부서에 근무하는 사원들의 사번 및 이름을 출력하시오.
1 select employee_id, first_name
2 from employees
3 where department_id in (
4 select department_id
5 from employees
6* where first_name like '%u%')
// 복수개의 값이 return 되면 복수연산자를 사용한다.
SQL> // result
EMPLOYEE_ID FIRST_NAME
----------- --------------------
179 Charles
177 Jack
176 Jonathon
175 Alyssa
174 Ellen
173 Sundita
172 Elizabeth
...
112 Jose Manuel
111 Ismael
110 John
109 Daniel
108 Nancy
97 rows selected.
문제 4
- 141번 사원과 동일한 업무를 수행하는 사원의 이름과 업무를 출력하시오.
1 select first_name, job_id
2 from employees
3 where job_id = (
4 select job_id
5 from employees
6 where employee_id = 141)
7* and employee_id != 141 // 마지막 본인은 빼준다.
SQL> // result
FIRST_NAME JOB_ID
-------------------- --------------------
Julia ST_CLERK
Irene ST_CLERK
James ST_CLERK
Steven ST_CLERK
Laura ST_CLERK
Mozhe ST_CLERK
James ST_CLERK
TJ ST_CLERK
Jason ST_CLERK
Michael ST_CLERK
Ki ST_CLERK
FIRST_NAME JOB_ID
-------------------- --------------------
Hazel ST_CLERK
Renske ST_CLERK
Stephen ST_CLERK
John ST_CLERK
Joshua ST_CLERK
Curtis ST_CLERK
Randall ST_CLERK
Peter ST_CLERK
19 rows selected.
문제 5
- Ernst와 동일한 부서에 근무하는 사원중 급여가 5000보단 큰 사원의 이름과 급여를 출력하시오.
1 select first_name, salary
2 from employees
3 where department_id in (
4 select department_id
5 from employees
6 where last_name = 'Ernst')
7* and salary > 5000
SQL> // result
FIRST_NAME SALARY
-------------------- ----------
Alexander 9000
Bruce 6000
문제 6
- 이름에 t가 들어가는 사원과 같은 분서에 근무하는 사원의 이름과 사원번호와 부서번호를 출력하시오.
1 select first_name, employee_id, department_id
2 from employees
3 where department_id in (
4 select department_id
5 from employees
6* where last_name like '%t%')
SQL> // result
FIRST_NAME EMPLOYEE_ID DEPARTMENT_ID
-------------------- ----------- -------------
Douglas 199 50
Donald 198 50
Kevin 197 50
Alana 196 50
Vance 195 50
Samuel 194 50
Britney 193 50
...
William 206 110
Shelley 205 110
Pat 202 20
Michael 201 20
94 rows selected.
문제 7
- 최저급여를 받는 사원보다 더 많은 급여를 받는 사원의 이름과 급여를 출력하시오.
1 select first_name, salary
2 from employees
3 where salary > (
4 select min(salary)
5* from employees)
SQL> // result
FIRST_NAME SALARY
-------------------- ----------
Steven 24000
Neena 17000
Lex 17000
Alexander 9000
Bruce 6000
...
Pat 6000
Susan 6500
Hermann 10000
Shelley 12008
William 8300
106 rows selected.
문제 8
- 50번 부서의 평균 급여보다 더 많이 급여를 받는 사원의 급여와 부서번호를 출력하시오.
1 select first_name, salary, department_id
2 from employees
3 where salary > (
4 select avg(salary)
5 from employees
6* where department_id = 50)
SQL> // result
FIRST_NAME SALARY DEPARTMENT_ID
-------------------- ---------- -------------
Steven 24000 90
Neena 17000 90
Lex 17000 90
Alexander 9000 60
Bruce 6000 60
David 4800 60
...
Michael 13000 20
Pat 6000 20
FIRST_NAME SALARY DEPARTMENT_ID
-------------------- ---------- -------------
Susan 6500 40
Hermann 10000 70
Shelley 12008 110
William 8300 110
70 rows selected.
문제 9
- 부서별 최대 급여를 받는 사원의 번호, 이름과 급여를 출력하시오.
1 select employee_id, first_name, salary, department_id
2 from employees
3 where salary in (
4 select max(salary)
5 from employees
6* group by department_id)
// sub-query 는 현재 11개 그런데 24개가 나옴.
SQL> // result
EMPLOYEE_ID FIRST_NAME SALARY DEPARTMENT_ID
----------- -------------------- ---------- -------------
100 Steven 24000 90
103 Alexander 9000 60
108 Nancy 12008 100
109 Daniel 9000 100
110 John 8200 100
114 Den 11000 30
121 Adam 8200 50
123 Shanta 6500 50
145 John 14000 80
148 Gerald 11000 80
150 Peter 10000 80
EMPLOYEE_ID FIRST_NAME SALARY DEPARTMENT_ID
----------- -------------------- ---------- -------------
152 Peter 9000 80
155 Oliver 7000 80
156 Janette 10000 80
158 Allan 9000 80
161 Sarath 7000 80
169 Harrison 10000 80
174 Ellen 11000 80
178 Kimberely 7000
200 Jennifer 4400 10
201 Michael 13000 20
203 Susan 6500 40
EMPLOYEE_ID FIRST_NAME SALARY DEPARTMENT_ID
----------- -------------------- ---------- -------------
204 Hermann 10000 70
205 Shelley 12008 110
24 rows selected.
- 이 문제는 아직 개념을 다 배우지 않아서 24개 한계지만 원래는 부서별 이니 11개가 나와야 정상임.
- 멀티풀 서브쿼리의 개념을 배운 후 풀 수 있음.
문제 10
- 50번 부서의 최저급여보다 더 많은 최저급여를 받는 부서별 최저급여를 출력하시오.
1 select min(salary), department_id
2 from employees
3 group by department_id
4 having min(salary) > (
5 select min(salary)
6 from employees
7 where department_id = 50)
8* and department_id is not null
SQL> // result
MIN(SALARY) DEPARTMENT_ID
----------- -------------
6900 100
2500 30
17000 90
6000 20
10000 70
8300 110
6100 80
6500 40
4200 60
4400 10
10 rows selected.
문제 11
- 시애틀에 근무하는 사람 중 커미션을 받지 않는 모든 사람들의 이름, 부서명, 지역 ID를 출력하시오.
1 select e.first_name, d.department_name, d.location_id
2 from employees e, departments d
3 where e.department_id = d.department_id
4 and d.location_id = (
5 select location_id
6 from locations
7 where city = 'Seattle')
8* and commission_pct is null
SQL> // result
FIRST_NAME DEPARTMENT_NAME LOCATION_ID
-------------------- -------------------- -----------
Jennifer Administration 1700
Den Purchasing 1700
Alexander Purchasing 1700
Shelli Purchasing 1700
Sigal Purchasing 1700
Guy Purchasing 1700
Karen Purchasing 1700
Steven Executive 1700
Neena Executive 1700
Lex Executive 1700
Nancy Finance 1700
FIRST_NAME DEPARTMENT_NAME LOCATION_ID
-------------------- -------------------- -----------
Daniel Finance 1700
John Finance 1700
Ismael Finance 1700
Jose Manuel Finance 1700
Luis Finance 1700
Shelley Accounting 1700
William Accounting 1700
18 rows selected.
문제 12
- Davies 보다 나중에 고용된 사원들의 이름 및 고용일자를 역순으로 출력하시오.
1 select first_name, hire_date
2 from employees
3 where hire_date > (
4 select hire_date
5 from employees
6 where last_name = 'Davies')
7* order by hire_date desc
SQL> // result
FIRST_NAME HIRE_DAT
-------------------- --------
Amit 08/04/21
Sundita 08/04/21
Sundar 08/03/24
Steven 08/03/08
David 08/02/23
...
FIRST_NAME HIRE_DAT
-------------------- --------
Britney 05/03/03
Alexis 05/02/20
James 05/02/16
Peter 05/01/30
81 rows selected.
- 만약 3번 줄에서 단일 연산자가 아닌 all이나 any를 쓰게 된다면 또 만약 davies가 2명이라면 1번 davies와 2번 davies사이의 사람들 또한 결과값으로 잡히기 때문에 error을 뱉게 된다.
문제 13
- 회사 전체 평균 급여보다 더 많이 받는 사우너들 중 이름에 u가 들어있는 사원들이 근무하는 부서에서 근무하는 사원들의 사번, 이름 및 급여를 출력하시오.
1 select employee_id, last_name, salary
2 from employees
3 where department_id in (
4 select department_id
5 from employees
6 where salary > (
7 select avg(salary)
8 from employees)
9* and last_name like '%u%')
SQL> // result
EMPLOYEE_ID LAST_NAME SALARY
----------- -------------------- ----------
120 Weiss 8000
121 Fripp 8200
122 Kaufling 7900
123 Vollman 6500
124 Mourgos 5800
125 Nayer 3200
...
105 Austin 4800
106 Pataballa 4800
107 Lorentz 4200
84 rows selected.