본문 바로가기

오답노트/DBMS

데이터베이스(Oracle)_조인(JOIN) 연습문제

 

▶문제 1

 

inner Join을 활용하여 locations 테이블에 city가 'Seattle'인 경우의 데이터 중 first_name, last_name, department_id, department_name, job_id, job_title, ctiy까지 모두 출력하라.

 

 

[답]

 

1
2
3
4
5
6
7
8
9
10
SELECT e.FIRST_NAME , e.LAST_NAME ,
       d.DEPARTMENT_ID , d.DEPARTMENT_NAME , 
       j.JOB_ID , j.JOB_TITLE ,
       l.CITY 

FROM EMPLOYEES e 
    INNER JOIN DEPARTMENTS d  ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
    INNER JOIN JOBS j         ON e.JOB_ID = j.JOB_ID 
    INNER JOIN LOCATIONS l    ON d.LOCATION_ID  = l.LOCATION_ID 

WHERE l.CITY  = 'Seattle'
;
cs

 

 

[풀이]

 

SELECT해오는 데이터를 기준으로 table을 선정한다.

DEPARTMENT_ID와 DEPARTMENT_NAME은 DEPARTMENT 테이블에 JOBID와 JOB_TITLE은 JOBS에 위치되어있으니 INNER를 통해 해당 테이블을 불러와야한다.

 

WHERE은 from 으로 불러온 데이터에서 조건값을 구해야하는 것이니 제일 밑줄에 작성해준다.

 

▶문제 2

 

Left Outer Join 을 사용하여
Employee_ID, First_Name, Hire_Date, Start_Date, End_Date, Job_Id, Department_Id를 출력하고
Employee_id를 오름차순 정렬하시오

 

[답]

 

1
2
3
4
5
6
7
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , e.HIRE_DATE , 
       jh.START_DATE , jh.END_DATE , jh.JOB_ID ,
       e.DEPARTMENT_ID 
FROM EMPLOYEES e 
    LEFT OUTER JOIN JOB_HISTORY jh ON e.EMPLOYEE_ID = jh.EMPLOYEE_ID 
ORDER BY e.EMPLOYEE_ID
;
cs

 

 

[풀이]

 

DEPARTMENT_ID는 굳이 EMPLOYEE와 DEPARTMENT를 연결할 필요 없이 EMPLOYEE에도 기록이 있으니 JOB_HISTORY만 LEFT OUTER JOIN을 통해 조인해주면된다.

 

▶문제 3

 

사원들의 이름, 부서번호, 부서명을 출력하라

 

1
2
3
4
5
SELECT e.FIRST_NAME , e.DEPARTMENT_ID ,
       d.DEPARTMENT_NAME 
FROM EMPLOYEES e 
   LEFT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID  = d.DEPARTMENT_ID 
;
cs

 

 

▶문제 4

 

30번 부서의 사원들의 이름, 직업, 부서명 출력하라

 

1
2
3
4
5
6
7
8
SELECT e.FIRST_NAME , e.JOB_ID ,
       d.DEPARTMENT_NAME,
       j.JOB_TITLE 
FROM EMPLOYEES e 
  LEFT OUTER JOIN DEPARTMENTS d  ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
  LEFT OUTER JOIN JOBS j         ON e.JOB_ID = j.JOB_ID 
WHERE d.DEPARTMENT_ID = 30
;
cs

 

 

▶문제 5

 

커미션을 받는 사원의 이름, 직업, 부서번호, 부서명을 출력하라

 

1
2
3
4
5
6
7
8
SELECT e.FIRST_NAME , e.JOB_ID ,
       d.DEPARTMENT_NAME, d.DEPARTMENT_ID ,
       j.JOB_TITLE 
FROM EMPLOYEES e 
   LEFT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
   LEFT OUTER JOIN JOBS j   ON e.JOB_ID = j.JOB_ID 
WHERE NOT (e.COMMISSION_PCT  = NULL)
;
cs

 

 

▶문제 6

 

이름에 A가 들어가는 사원들의 이름과 부서이름을 출력하라

 

1
2
3
4
5
SELECT e.FIRST_NAME , d.DEPARTMENT_NAME 
FROM EMPLOYEES e 
    LEFT OUTER JOIN DEPARTMENTS d ON e.DEPARTMENT_ID = d.DEPARTMENT_ID 
WHERE e.FIRST_NAME LIKE '%A%'
;
cs

 

 

▶문제 7

 

사원이름(FIRST_NAME)과 그 사원의 관리자 이름(MANAGER_ID)을 출력하라.

 

1
2
3
4
SELECT e.FIRST_NAME  , e.MANAGER_ID 
FROM EMPLOYEES e 
    INNER JOIN DEPARTMENTS d ON e.EMPLOYEE_ID = d.DEPARTMENT_ID 
;
cs

 

 

▶문제 8

 

사원이름과 부서명과 월급을 출력하는데 월급이 3000 이상인 사원을 출력하라

 

1
2
3
4
5
SELECT e.FIRST_NAME  , e.SALARY , d.DEPARTMENT_NAME 
FROM EMPLOYEES e 
     LEFT OUTER join DEPARTMENTS d ON e.EMPLOYEE_ID = d.DEPARTMENT_ID 
WHERE e.SALARY >= 3000
;
cs

 

 

▶문제 9

 

급여가 3000에서 5000사이인 사원의 이름과 부서명을 출력하라

 

1
2
3
4
5
SELECT e.FIRST_NAME , d.DEPARTMENT_ID , e.SALARY 
FROM EMPLOYEES e 
    LEFT OUTER join DEPARTMENTS d ON e.EMPLOYEE_ID = d.DEPARTMENT_ID 
WHERE SALARY BETWEEN 3000 AND  5000
;
cs

 

 

▶문제 10

 

급여가 3000이하인 사원의 이름과 급여, 근무지를 출력하라

 

1
2
3
4
5
6
7
SELECT e.FIRST_NAME  , e.SALARY,
       d.DEPARTMENT_NAME  ,l.city
FROM EMPLOYEES e 
    LEFT OUTER join DEPARTMENTS d ON e.EMPLOYEE_ID = d.DEPARTMENT_ID 
    LEFT OUTER join  LOCATIONS l   ON l.LOCATION_ID = d.LOCATION_ID 
WHERE e.SALARY <= 3000
;
cs

 

 

▶문제 11

 

Steven King의 부서명을 출력하라

 

1
2
3
4
5
6
SELECT e.FIRST_NAME , d.DEPARTMENT_NAME 
FROM EMPLOYEES e 
     LEFT OUTER join DEPARTMENTS d  ON e.EMPLOYEE_ID = d.DEPARTMENT_ID 
WHERE e.LAST_NAME  = 'King'
AND   e.FIRST_NAME = 'Steven'
;
cs

 

 

▶문제 12

 

IT부서에서 근무하고 있는 사람들의 이름, 부서명을 출력하라

 

1
2
3
4
5
SELECT     e.FIRST_NAME , e.SALARY , d.DEPARTMENT_NAME 
FROM     EMPLOYEES e
    LEFT OUTER JOIN DEPARTMENTS d  ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
WHERE     d.DEPARTMENT_NAME = 'IT'
;
cs

 

 

▶문제 13

 

업무가 SA_MAN인 사람의 사원번호, 이름, 급여, 부서명, 근무지(location_id)를 출력하여라

 

1
2
3
4
5
6
SELECT e.EMPLOYEE_ID , e.FIRST_NAME , e.SALARY, 
       d.DEPARTMENT_name, d.LOCATION_ID 
FROM     EMPLOYEES e
    LEFT OUTER JOIN DEPARTMENTS d  ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
WHERE     e.JOB_ID = 'SA_MAN'
;
cs

 

 

▶문제 14

 

Employees 테이블과 Departments 테이블에서, * Departments 테이블 기준으로 사원번호, 이름, 업무(job_id),부서번호, 부서명,근무지를 * 출력하라

 

1
2
3
4
5
6
SELECT e.EMPLOYEE_ID, e.FIRST_NAME , e.JOB_ID ,
       d.DEPARTMENT_ID , d.DEPARTMENT_NAME , 
       d.LOCATION_ID 
FROM EMPLOYEES e 
    RIGHT OUTER JOIN DEPARTMENTS d ON d.DEPARTMENT_ID = e.EMPLOYEE_ID 
;   
cs