SQL JOIN
DatabaseJOIN
여러 테이블에 흩어져 있는 정보 중에서 필요한 정보만을 가져와 가상 테이블처럼 만들어서 결과를 보여준다.
EQUI JOIN
Equality Condition(=)을 이용하는 조인.
조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼값의 행을 연결하여 결과를 생성한다.
일반적으로 기본키와 외래키가 존재하는 컬럼을 사용한다.
동명의 컬럼일 경우 컬럼명 앞에 테이블명을 붙인다.
- FROM ~ WHERE
FROM 테이블1, 테이블2
WHERE 테이블1.컬럼 = 테이블2.컬럼
- JOIN ~ ON
테이블명과 테이블명 사이에 콤마(,) 대신 JOIN을 사용하고,
공통으로 존재하는 컬럼값을 비교하는 WHERE절 대신에 'ON'을 사용한다.
FROM 테이블1 JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼
- Alis(별칭)을 기술하여 어느 테이블 소속인지 구분할 수 있다.
FROM 테이블1 별칭1, 테이블2 별칭2
WHERE 별칭1.컬럼 = 별칭2.컬럼
NON-EQUI JOIN
두 테이블의 데이터가 같은 조건이 아닌 특정 범위 내에 있는 경우 사용한다.
WHERE절에 등가 연산자(=) 외의 다른 연산자를 사용한다.
SELECT e.employee_id 사번
, e.last_name 이름
, d.department_id 부서ID
, d.department_name 부서명
, e.salary 급여
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE e.department_id BETWEEN 10 AND 70
ORDER BY d.department_id;
SELF JOIN
자기 자신과 조인한다.
하나의 테이블 내에서 데이터를 조인한다.
SELECT e.employee_id 사번
, e.last_name 사원명
, e.manager_id 매니저ID
, m.last_name 매니저명
FROM employees e --사원테이블
, employees m --매니저테이블
WHERE e.manager_id = m.employee_id;
OUTER JOIN
두 개 이상의 테이블을 조인할 때, 한 쪽 테이블에는 데이터가 존재하는 데
다른 쪽 테이블에는 데이터가 존재하지 않아서 해당 행이 출력되지 않을 때 사용한다.
데이터가 적은 컬럼 뒤에 (+)를 추가한다.
- LEFT OUTER JOIN
왼쪽 테이블에 데이터가 존재하고, 오른쪽 테이블에 데이터가 존재하지 않을 때
SELECT d.*
FROM employees e LEFT JOIN departments d
ON e.department_id = d.department_id
ORDER BY d.department_id;
SELECT d.*
FROM employees e JOIN departments d
ON e.department_id = d.department_id(+)
ORDER BY d.department_id;
- RIGHT OUTER JOIN
오른쪽 테이블에 데이터가 존재하고, 왼쪽 테이블에 데이터가 존재하지 않을 때
SELECT d.*
FROM employees e RIGHT JOIN departments d
ON e.department_id = d.department_id
ORDER BY d.department_id;
SELECT d.*
FROM employees e JOIN departments d
ON e.department_id(+) = d.department_id
ORDER BY d.department_id;