JOIN문이란?
- 두개 이상의 테이블을 묶어서 하나의 결과 집합으로 출력
- INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN, SELF JOIN 등이 있습니다.
INNER JOIN
- 두 테이블이 공통적으로 만족하는 조건의 레코드를 출력
- INNER을 생략하고 JOIN만으로 쿼리 작성 가능


-- INNER JOIN의 구조
-- SELECT 컬럼1, 컬럼2
-- FROM 테이블1 [INNER] JOIN 테이블2
-- ON 조인 조건
-- [WHERE 검색조건]
-- 2개의 테이블을 join할 경우
SELECT
emp.emp_no
,emp.first_name
,emp.last_name
,dp.dept_no
FROM employees emp
INNER JOIN dept_emp dp
ON emp.emp_no = dp.emp_no
WHERE
dp.to_date >= NOW()
;
-- 3개의 테이블을 join 할 경우
SELECT
emp.emp_id
,emp.name
,depte.dept_code
,dept.dept_name
FROM employees emp
INNER JOIN department_emps depte
ON emp.emp_id = depte.emp_id
INNER JOIN departments dept
ON depte.dept_code = dept.dept_code
WHERE
depte.end_at IS NULL
;
LEFT OUTER JOIN
- LEFT JOIN이라고 줄여서 부름
- 왼쪽 테이블을 기준 테이블로 두고 JOIN을 실행
- 기준 테이블의 모든 데이터를 출력하고 조인 대상 테이블에 없는 값은 NULL로 출력
- OUTER는 생략하고 LEFT JOIN으로 쿼리 작성 가능


-- LEFT OUTER JOIN의 구조
-- SELECT 컬럼1, 컬럼2 ...
-- FROM 테이블1
-- LEFT [OUTER] JOIN 테이블2
-- ON 조인 조건
-- WHERE 검색조건;
SELECT
emp.emp_id
,emp.name
,deptm.dept_code
FROM employees emp
LEFT JOIN department_managers deptm
ON emp.emp_id = deptm.emp_id
WHERE
deptm.end_at IS NULL
ORDER BY deptm.dept_code DESC
;
RIGHT OUTER JOIN
- RIGHT JOIN이라고 줄여서 부름
- 오른쪽 테이블을 기준 테이블로 두고 JOIN을 실행
- 기준 테이블의 모든 데이터를 출력하고 조인 대상 테이블에 없는 값은 NULL로 출력
- OUTER는 생략하고 RIGHT JOIN으로 쿼리 작성 가능