
JOIN은 여러 개의 테이블을 연결하여 필요한 데이터를 한 번에 조회할 수 있는 SQL 문법이에요.
-- ANSI 방식 (권장)
SELECT 컬럼명
FROM A테이블 INNER JOIN B테이블
ON (조인 조건);
-- Oracle 방식
SELECT 컬럼명
FROM A테이블, B테이블
WHERE 조인 조건;
NULL 은 비교 연산이 안되므로, OUTER JOIN 을 사용해야 보여줄 수 있어요.| JOIN 종류 | 설명 |
|---|---|
| INNER JOIN | 교집합. 양쪽 테이블 모두에 데이터가 있을 때 |
| OUTER JOIN | 한쪽에만 데이터가 있어도 결과 출력 가능 |
| LEFT OUTER JOIN | 왼쪽 테이블 기준 |
| RIGHT OUTER JOIN | 오른쪽 테이블 기준 |
| FULL OUTER JOIN | 양쪽 테이블의 모든 데이터 포함 |
| CROSS JOIN | 조건 없이 모든 조합 반환 (데카르트 곱) |
-- Oracle 문법
SELECT EMPLOYEE_ID, J.JOB_ID, JOB_TITLE
FROM EMPLOYEES E, JOBS J
WHERE E.JOB_ID = J.JOB_ID;
-- ANSI 문법
SELECT EMPLOYEE_ID, J.JOB_ID, JOB_TITLE
FROM EMPLOYEES E
INNER JOIN JOBS J ON E.JOB_ID = J.JOB_ID;
-- Oracle 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D, EMPLOYEES E
WHERE D.MANAGER_ID = E.EMPLOYEE_ID;
-- ANSI 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D
INNER JOIN EMPLOYEES E ON D.MANAGER_ID = E.EMPLOYEE_ID;
-- Oracle 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D, EMPLOYEES E
WHERE D.MANAGER_ID = E.EMPLOYEE_ID(+);
-- ANSI 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D
LEFT OUTER JOIN EMPLOYEES E ON D.MANAGER_ID = E.EMPLOYEE_ID;
-- Oracle 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D, EMPLOYEES E
WHERE D.MANAGER_ID(+) = E.EMPLOYEE_ID;
-- ANSI 문법
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D
RIGHT OUTER JOIN EMPLOYEES E ON D.MANAGER_ID = E.EMPLOYEE_ID;
SELECT DEPARTMENT_NAME, D.MANAGER_ID, EMPLOYEE_ID
FROM DEPARTMENTS D
FULL OUTER JOIN EMPLOYEES E ON D.MANAGER_ID = E.EMPLOYEE_ID;
INNER JOIN은 교집합이므로 양쪽에 데이터가 있어야 함OUTER JOIN은 한쪽에만 있어도 결과가 나옴CROSS JOIN은 조인 조건 없이 가능한 모든 조합 출력 (주의해서 사용)