SELECT e.EMPLOYEE_ID
, e.FIRST_NAME
, e.DEPARTMENT_ID
, d.DEPARTMENT_ID
, d.DEPARTMENT_NAME
FROM EMPLOYEES e INNER JOIN DEPARTMENTS d
ON e.DEPARTMENT_ID = d.DEPARTMENT_ID
--WHERE e.EMPLOYEE_ID = 178
--WHERE d.DEPARTMENT_ID = 270
ORDER BY e.EMPLOYEE_ID
;
조인 조건에 일치하는 데이터 및 일치하지 않는 데이터를 모두 select 한다.
조인 조건에 일치하는 데이터가 없다면 NULL로 가지고 온다.
Outer Join은 inner join과는 다르게 주(main) 테이블이 어떤 테이블인지가 중요하다,
그래서 어떤 테이블이 중심이 되느냐에 따라 다시 left outer join, right outer join, full outer join 으로 세분 할 수 있다.
selcet *
from tableA
left outer join tableB
-> 왼쪽 테이블 tableA가 기준이 된다.
-> 조인 조건에 부합하는 데이터가 조인 당하는 테이블(오른쪽)에 있으면 해당 데이터를 가지고 오고,
부재하면 NULL로 select 하게 된다.
SELECT e.EMPLOYEE_ID
, jh.EMPLOYEE_ID
, e.FIRST_NAME
, e.HIRE_DATE
, jh.EMPLOYEE_ID
, jh.START_DATE
, jh.END_DATE
, jh.JOB_ID
FROM EMPLOYEES e
LEFT OUTER JOIN JOB_HISTORY jh ON e.EMPLOYEE_ID = jh.EMPLOYEE_ID
ORDER BY e.EMPLOYEE_ID
;
selcet *
from tableA
right outer join tableB
-> 오른쪽 테이블 tableA가 기준이 된다.
-> 조인 조건에 부합하는 데이터가 조인 당하는 테이블(왼쪽)에 있으면 해당 데이터를 가지고 오고,
부재하면 NULL로 select 하게 된다.
selcet *
from tableA full outer join tableB
-> 양쪽 테이블 모두가 기준이 된다.
-> 조인 조건에 부합하는 데이터가 조인 당하는 테이블에 있으면 해당 데이터를, 부재하면
NULL 로 select 하게 된다.
SELECT e.FIRST_NAME
, e.LAST_NAME
, e.EMAIL
, d.DEPARTMENT_ID
, d.DEPARTMENT_NAME
, e.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'
;