Oracle DB 문제풀이

강정우·2022년 7월 6일
0

DB

목록 보기
19/30
post-thumbnail

문제 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.
profile
智(지)! 德(덕)! 體(체)!

0개의 댓글