본문 바로가기
오라클

[오라클] JOIN 문법 완벽 정리 ( INNER JOIN, OUTER JOIN )

by devlog93 2025. 12. 27.

JOIN이란?

JOIN여러 테이블에 나눠져 있는 데이터를 하나의 결과로 조회하기 위해 사용하는 문법이다.

실무에서는

  • 회원 정보 + 주문 정보
  • 사원 정보 + 부서 정보

처럼 두 개 이상 테이블을 연결해서 조회하는 경우가 대부분이다.

JOIN이 필요한 이유?

JOIN 없이 조회하면 테이블 간 관계를 표현할 수 없음. 데이터 중복 / 누락이 발생함

JOIN을 사용하면 관계있는 데이터만 정확히 조회 정규화된 테이블 구조를 그대로 유지

1. INNER JOIN 

두 테이블에 모두 존재하는 데이터만 조회

SELECT 컬럼
  FROM 테이블 A
 INNER JOIN 테이블 B
    ON A.컬럼 = B.컬럼;

 

예제

SELECT A.EMP_ID
     , A.EMP_NAME
     , B.DEPT_NAME
  FROM EMP A
 INNER JOIN DEPT B
    ON A.DEPT_ID = B.DEPT_ID;

☞ 부서가 없는 사원은 조회되지 않음

 

2. LEFT OUTER JOIN 

왼쪽 테이블 기준으로 전부 조회

  • 오른쪽 테이블에 데이터가 없어도 조호됨
  • 없는 값은 NULL
SELECT 컬럼
  FROM 테이블 A
  LEFT JOIN 테이블 B
    ON A.컬럼 = B.컬럼;

 

예제

SELECT A.EMP_NAME
     , B.DEPT_NAME
  FROM EMP A
  LEFT JOIN DEPT B
    ON A.DEPT_ID = B.DEPT_ID;

☞ 부서가 없는 사원도 조회됨 ( DEPT_NAME = NULL )

 

3. RIGHT OUTER JOIN

오른쪽 테이블 기준으로 전부 조회

SELECT A.EMP_NAME
     , B.DEPT_NAME
  FROM EMP A
 RIGHT JOIN DEPT B
    ON A.DEPT_ID = B.DEPT_ID;

▲ 실무에서는 LEFT JOIN을 더 많이 사용

4. WHERE 조건JOIN 조건의 차이

잘못된 예

SELECT *
  FROM EMP A
  LEFT JOIN DEPT B
    ON A.DEPT_ID = B.DEPT_ID
 WHERE B.DEPT_NAME = '영업부';

☞ 결과적으로 INNER JOIN처럼 동작

올바른 예

SELECT *
  FROM EMP A
  LEFT JOIN DEPT B
    ON A.DEPT_ID = B.DEPT_ID
   AND B.DEPT_NAME = '영업부';

☞ JOIN 조건은 ON절 AND

 

5. JOIN 사용 시 자주 하는 실수

ON 조건 누락 ㅡ 카티션 곱( CROSS JOIN ) 발생, 데이터 폭발

WHERE 조건의 위치 실수 ㅡ OUTER JOIN 의미 사라짐

별칭(Alias) 미사용 ㅡ 컬럼 구분 안됨, 가독성 안 좋음

 

마무리

JOIN은 여러 테이블로 분리된 데이터를 하나의 결과로 연결해 주는 오라클 SQL 핵심 문법입니다. INNER JOIN으로 기본적인 테이블 관계를 이해하고 LEFT OUTER JOIN을 활용하여 데이터 누락 없이 조회하는 쿼리를 작성할 수 있다. 실무에서는 기본 테이블이 많으면 몇십 개가 되니 JOIN에 대해 개념을 바로잡아야 할 거 같다. 오늘은 기본적인 JOIN을 다뤘다 특히 JOIN 조건 ON 절과 AND 절 이것과 WHERE 조건의 위치를 정확히 구분하지 않으면 다른 의도로 나오니깐 조심하도록 하자. 감사합니다. (_ _)