[SQL] JOIN 문법 완벽 정리 및 실습 예제 (Oracle & ANSI 문법 비교)

발라·2025년 7월 25일

서버 이해 첫걸음

목록 보기
9/11
post-thumbnail

JOIN은 여러 개의 테이블을 연결하여 필요한 데이터를 한 번에 조회할 수 있는 SQL 문법이에요.

  • 사용 시점: 필요한 데이터가 여러 테이블에 나눠져 있을 때
  • 기본 개념: 테이블 간 관계(조인조건) 를 통해 교집합 혹은 전체 데이터 를 연결

📌 JOIN 기본 문법

-- ANSI 방식 (권장)
SELECT 컬럼명
  FROM A테이블 INNER JOIN B테이블
    ON (조인 조건);

-- Oracle 방식
SELECT 컬럼명
  FROM A테이블, B테이블
 WHERE 조인 조건;

주의사항

  • 동일한 컬럼명이 여러 테이블에 있을 땐 별칭(E.컬럼) 으로 명시해야 해요.
  • NULL 은 비교 연산이 안되므로, OUTER JOIN 을 사용해야 보여줄 수 있어요.

JOIN의 종류

JOIN 종류설명
INNER JOIN교집합. 양쪽 테이블 모두에 데이터가 있을 때
OUTER JOIN한쪽에만 데이터가 있어도 결과 출력 가능
LEFT OUTER JOIN왼쪽 테이블 기준
RIGHT OUTER JOIN오른쪽 테이블 기준
FULL OUTER JOIN양쪽 테이블의 모든 데이터 포함
CROSS JOIN조건 없이 모든 조합 반환 (데카르트 곱)

실습 예제 모음

(1) 직원 테이블과 직업 테이블을 INNER 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;

(2) 각 부서의 매니저 정보 출력 (INNER JOIN)

-- 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;

(3) 부서 기준 LEFT OUTER JOIN

-- 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;

(4) 부서 기준 RIGHT OUTER JOIN

-- 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;

(5) 부서 기준 FULL OUTER JOIN

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은 조인 조건 없이 가능한 모든 조합 출력 (주의해서 사용)

정리

  • INNER JOIN은 가장 일반적인 조인
  • OUTER JOINNULL 포함 데이터도 보여줘야 할 때 사용
  • ANSI 문법이 더 직관적이고 범용성 높으므로 가급적 권장!
profile
능숙한 바이브코딩을 할 수 있게 됨을 꿈꾸며

0개의 댓글