SQL 기본 및 활용

17. 표준 조인(ANSI) — SQLD, ON·USING·NATURAL과 ON vs WHERE 함정

CBT 전자문제집 편집팀
#SQLD#ANSIJOIN#USING#NATURALJOIN#OUTERJOIN

표준 조인(ANSI JOIN)FROM 테이블 JOIN 테이블 ON 조건처럼 조인을 명시적으로 쓰는 SQL 표준 문법입니다. 조인 조건이 FROM에 모여 WHERE의 검색 조건과 분리됩니다. 시험은 조건 지정 방식 3가지의 제약ON vs WHERE의 결과 차이를 묻습니다. (조인 종류 자체는 조인 단원 참고.)

이 단원, 시험에서 어디에 나오나 (출제 비중)

  • 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점. 표준 조인은 오류 찾기·실행결과 예측 유형으로 출제됩니다.
  • USING·NATURAL의 별칭 금지OUTER 조건 위치(ON vs WHERE) 가 오답을 가르는 포인트입니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)

출제 포인트 — 시험이 실제로 묻는 것

  1. ON / USING / NATURAL JOIN 세 방식의 차이와 제약
  2. USING·NATURAL의 공통 컬럼에 테이블 별칭 금지
  3. OUTER JOIN에서 옵션 테이블 조건은 ON에 — WHERE에 두면 INNER처럼 (최다 함정)
  4. JOIN = INNER JOIN (생략 규칙), 오라클 (+)와 ANSI 혼용 금지

① 조건 지정 3가지 — 오른쪽으로 갈수록 자동·위험

표준 조인 조건 지정 방식 비교: ON은 조건을 직접 명시, USING은 같은 이름 컬럼 하나를 지정, NATURAL은 같은 이름 컬럼 전부를 자동으로 묶는다

그림 1. 조건을 지정하는 세 방식. 오른쪽으로 갈수록 자동·위험. (자작 도식)

FROM a JOIN b ON a.부서코드 = b.부서코드   -- ON: 직접 명시(가장 유연)
FROM a JOIN b USING (부서코드)             -- USING: 같은 이름 컬럼 1개
FROM a NATURAL JOIN b                      -- NATURAL: 같은 이름 전부 자동
방식조건주의
ON직접 명시컬럼명 달라도 됨
USING(컬럼)같은 이름 1개결과에 1번만, 별칭 금지
NATURAL같은 이름 전부ON/USING 병용 불가

함정: USING(부서코드)로 묶은 컬럼을 SELECT a.부서코드처럼 테이블 별칭을 붙이면 오류입니다. 그냥 부서코드로 씁니다. NATURAL JOIN의 공통 컬럼도 같습니다.

함정: NATURAL JOIN은 이름이 같은 컬럼을 전부 조인 조건에 넣습니다. 우연히 이름만 같은 컬럼(등록일 등)이 있으면 결과가 의도보다 줄어듭니다.

② OUTER·CROSS 문법 — 생략 규칙

FROM a JOIN b ON a.k = b.k;               -- JOIN = INNER JOIN
FROM a LEFT  OUTER JOIN b ON a.k = b.k;   -- OUTER 키워드는 생략 가능
FROM a CROSS JOIN b;                      -- 조건 없음, M×N

JOIN만 쓰면 INNER입니다. OUTER를 원하면 LEFT/RIGHT/FULL을 반드시 명시합니다. 오라클 (+) 표기와 ANSI 문법은 한 문장에 섞어 쓸 수 없습니다.

③ ON vs WHERE — 아우터가 이너로 변하는 최다 함정

-- (의도) 모든 회원 + 2026년 주문 — 주문 없는 회원도 보고 싶다
-- (실수) 옵션 테이블 조건을 WHERE에 → 주문 없는 회원 탈락(INNER 효과)
FROM 회원 m LEFT JOIN 주문 o ON m.회원 = o.회원
WHERE o.주문일 >= '2026-01-01';    -- o.주문일이 NULL인 행이 걸러짐

-- (정답) 옵션 테이블 조건을 ON에
FROM 회원 m LEFT JOIN 주문 o
     ON m.회원 = o.회원 AND o.주문일 >= '2026-01-01';

금액 조건을 ON에 두면 회원 세 명이 모두 남고 짝 없는 쪽은 NULL로 채워지지만, 같은 조건을 WHERE에 두면 NULL 행이 걸러져 한 명만 남는 결과 비교 표

그림 2. 옵션 테이블 조건을 ON에 두면 아우터 유지, WHERE에 두면 INNER처럼 된다. (자작 도식)

원리: LEFT JOIN은 짝 없는 행의 오른쪽 컬럼을 NULL로 채우는데, 그 컬럼에 대한 조건이 WHERE에 있으면 NULL 비교 = UNKNOWN이라 그 행이 걸러집니다. 조건이 ON에 있으면 "조인 짝을 고르는 기준"일 뿐이라 왼쪽 행은 살아남습니다.

한 장 정리 (암기 카드)

  • ON(직접·유연) · USING(같은 이름 1개·별칭 금지) · NATURAL(같은 이름 전부·병용 불가).
  • 옵션 테이블 조건은 ON에 — WHERE에 두면 아우터가 이너 된다.
  • JOIN = INNER. OUTER는 방향 키워드 필수. (+)와 ANSI 혼용 금지.

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글