- 두 개 이상의 테이블을 묶어서 하나의 결과 집합으로 출력
INNER JOIN
- 복수의 테이블이 공통적으로 만족하는 레코드를 출력
- INNER을 생략하고 JOIN만으로 쿼리 작성 가능
-- 전 사원의 사번, 이름, 현재 급여를 출력해주세요.
SELECT
emp.emp_id
,emp.`name`
,sal.salary
FROM employees emp
JOIN salaries sal
ON emp.emp_id = sal.emp_id
AND sal.end_at IS NULL
ORDER BY emp.emp_id
;

-- 3개 join 재직중인 사원의 사번, 이름, 생일, 부서명
-- 왼쪽에 가장 적은 용량의 테이블 넣기
SELECT
depe.emp_id
,emp.`name`
,emp.birth
,dept.dept_name
FROM department_emps depe
JOIN departments dept
ON depe.dept_code = dept.dept_code
AND depe.end_at IS NULL
JOIN employees emp
ON depe.emp_id = emp.emp_id
AND emp.fire_at IS NULL
;

LEFT JOIN
- 왼쪽 테이블을 기준 테이블로 두고 JOIN을 실행
- 기준 테이블의 모든 데이터를 출력하고 조인 대상 테이블에 없는 값은 NULL로 출력
- OUTER는 생략하고 LEFT JOIN으로 쿼리 작성 가능
SELECT
emp.emp_id
,emp.`name`
,sal.salary
FROM employees emp
LEFT JOIN salaries sal
ON emp.emp_id = sal.emp_id
AND sal.end_at IS NULL
;

RIGHT JOIN
- 오른쪽 테이블을 기준 테이블로 두고 JOIN을 실행
- 기준 테이블의 모든 데이터를 출력하고 조인 대상 테이블에 없는 값은 NULL로 출력
- OUTER는 생략하고 RIGHT JOIN으로 쿼리 작성 가능
SELECT
emp.emp_id
,emp.`name`
,sal.salary
FROM employees emp
RIGHT JOIN salaries sal
ON emp.emp_id = sal.emp_id
;

FULL JOIN
- UNION과 LEFT JOIN, RIGHT JOIN을 이용하여 출력 가능

SELECT *
FROM
employees emp
LEFT JOIN title_emps title
ON emp.emp_id = title.emp_id
UNION
SELECT *
FROM
employees emp
RIGHT JOIN title_emps title
ON emp.emp_id = title.emp_id
;