2026 SQLD 필기 2과목 1장 7~8절 | INNER·OUTER·표준 조인 — 핵심 이론

데이터위자드 ·

2026 SQLD 필기 2과목 1장 7~8절 | INNER·OUTER·표준 조인 — 핵심 이론

필기 · 핵심 이론

조인은 컬럼을 붙이는 동시에 행을 생성합니다. 한 고객에게 주문이 세 건이면 고객 행이 주문 수만큼 반복될 수 있습니다. 먼저 매칭되는 쌍의 개수를 세고, 외부 조인이라면 매칭되지 않은 기준 행을 추가하는 순서로 계산하세요.

이번 절에서 익힐 내용

INNER JOIN의 행 생성 · LEFT OUTER JOIN · 외부 조인의 조건 위치 · CROSS·NATURAL·USING · 조인 후 집계와 COUNT

1. INNER JOIN의 행 생성

INNER JOIN은 ON 조건을 만족하는 행 쌍을 반환합니다. A의 같은 키가 2행이고 B의 같은 키가 3행이면 해당 키에서 2×3=6쌍이 생깁니다. 키의 중복 여부를 보지 않고 두 테이블 중 적은 행 수가 결과라고 생각하면 틀립니다.

조인 조건을 빠뜨리면 카티션 곱으로 행 수가 크게 늘 수 있습니다. 같은 이름의 컬럼이라는 사실만으로 자동 조인되는 것도 아닙니다. 결과 한 행의 단위가 고객인지 주문인지 주문상세인지 확인합니다.

핵심 기준

같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.

예제로 적용하기

A에서 키 1이 2행, B에서 키 1이 3행이다. 키 동등 조인의 해당 결과는?

풀이와 판단 과정

결론: 6행

각 A행이 B의 세 행과 만나므로 2×3=6행입니다.

2. LEFT OUTER JOIN

LEFT JOIN은 왼쪽 행을 보존하고, 오른쪽에 매칭이 없으면 오른쪽 컬럼을 NULL로 채웁니다. 주문 없는 고객을 포함하려면 고객을 왼쪽에 둡니다. 다만 한 고객에게 여러 주문이 있으면 고객 행이 한 번만 나온다는 뜻은 아닙니다.

LEFT JOIN 이후 오른쪽 컬럼 조건을 WHERE에 두면 NULL 보완 행이 제거될 수 있습니다. 기준 행을 유지하려는 조건인지 최종 결과를 제한하려는 조건인지 구분해 ON과 WHERE를 선택하세요.

핵심 기준

LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.

예제로 적용하기

고객 A는 주문 2건, 고객 B는 주문 0건이다. 고객 LEFT JOIN 주문 결과는?

풀이와 판단 과정

결론: 3행

A는 두 매칭 행, B는 오른쪽 NULL인 한 행으로 총 3행입니다.

3. 외부 조인의 조건 위치

주문 없는 고객도 남기면서 결제완료 주문만 붙이려면 결제 상태를 ON 조건에 포함할 수 있습니다. WHERE 주문상태=완료를 쓰면 주문이 NULL인 고객은 UNKNOWN으로 제거됩니다.

ON은 연결할 쌍을 정하고 WHERE는 연결 뒤 결과를 거릅니다. 외부 조인의 보존 효과를 판단할 때 가장 중요한 차이입니다. 단순히 모든 조건을 ON으로 옮기는 것도 답은 아니며 최종 요구사항에 맞춰야 합니다.

핵심 기준

오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.

예제로 적용하기

주문 없는 고객도 표시하며 완료 주문만 붙인다. 상태 조건의 적절한 위치는?

풀이와 판단 과정

결론: LEFT JOIN의 ON 안

ON에서 완료 주문만 매칭하면 완료 주문이 없는 고객도 NULL 보완 행으로 남습니다.

4. CROSS·NATURAL·USING

CROSS JOIN은 모든 행 쌍을 만들므로 3행과 4행은 12행입니다. NATURAL JOIN은 같은 이름의 컬럼들을 조건으로 사용하므로 스키마 변화에 주의해야 합니다. USING(키)는 동등 조인에 사용할 동일 이름 컬럼을 명시합니다.

각 표준 조인은 목적이 다릅니다. NATURAL JOIN이 외래키 관계를 추론하는 것은 아닙니다. 같은 이름의 상태 컬럼이 추가되면 의도하지 않은 조건이 포함될 수 있으므로 명시적인 ON이나 USING이 더 분명할 때가 많습니다.

핵심 기준

NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.

예제로 적용하기

3행 테이블과 4행 테이블을 CROSS JOIN하면?

풀이와 판단 과정

결론: 12행

모든 조합을 생성하므로 3×4=12행입니다.

5. 조인 후 집계와 COUNT

외부 조인 결과에서 COUNT(*)는 NULL 보완 행도 세고, COUNT(오른쪽의 NOT NULL 키)는 실제 매칭 행만 셉니다. 주문 없는 고객의 주문수를 구할 때 COUNT(*)=1이 되는 함정을 확인하세요.

고객·주문·상세를 함께 연결하면 주문 한 건이 상세 수만큼 반복될 수 있습니다. 주문금액을 그대로 SUM하면 중복 합산될 수 있으므로 먼저 필요한 단위로 집계하거나 결과 단위를 재설계해야 합니다.

핵심 기준

LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.

예제로 적용하기

주문 없는 고객의 LEFT JOIN 결과 한 행에서 COUNT(*),COUNT(주문.id)는?

풀이와 판단 과정

결론: 1, 0

행은 하나 존재하지만 주문 id는 NULL이므로 두 COUNT의 결과가 달라집니다.

한눈에 비교하기

조인보존 범위행 수 점검
INNER매칭 쌍양쪽 중복의 곱
LEFT매칭 쌍+왼쪽 미매칭ON·WHERE 구별
FULL양쪽 미매칭까지지원 DBMS 확인
CROSS모든 조합왼쪽 수×오른쪽 수

순서대로 풀어 보는 예제

고객 1·고객 2가 있고 주문이 (101,고객 1),(102,고객 1)이라고 합시다. INNER JOIN은 2행, LEFT JOIN은 고객 2의 NULL 보완 행을 추가해 3행입니다. 고객별 COUNT(주문번호)는 2와 0이지만 COUNT(*)는 2와 1입니다.

고객 2를 유지한 채 완료 주문만 붙이려면 ON에 상태 조건을 더합니다. 그 조건을 WHERE로 옮기면 고객 2가 사라질 수 있으므로 표를 직접 세어 보세요.

SELECT c.id, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o
  ON o.customer_id = c.id AND o.status = '완료'
GROUP BY c.id
ORDER BY c.id;

헷갈리는 문장 바로잡기

INNER JOIN의 행 생성

잘못된 판단 INNER JOIN 행 수는 항상 왼쪽 행 수와 같다.

올바른 판단: 같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.

LEFT OUTER JOIN

잘못된 판단 LEFT JOIN은 왼쪽 행을 반드시 한 번씩만 반환한다.

올바른 판단: LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.

외부 조인의 조건 위치

잘못된 판단 외부 조인의 오른쪽 WHERE 조건은 NULL 보완 행을 언제나 유지한다.

올바른 판단: 오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.

CROSS·NATURAL·USING

잘못된 판단 NATURAL JOIN은 선언된 FK만 자동 추론한다.

올바른 판단: NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.

조인 후 집계와 COUNT

잘못된 판단 COUNT(*)는 주문이 없는 고객에서 항상 0이다.

올바른 판단: LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.

이론을 정리했다면 같은 절의 객관식 문제에서 조건과 예외를 확인하세요. 정답을 고른 뒤에는 틀린 선택지가 왜 성립하지 않는지도 설명해 보세요.

핵심 개념 확인 — 객관식 5문제

설명을 읽은 뒤 아래 다섯 문항을 풀어 보세요. 정답을 고르고 틀린 선택지의 오류도 설명할 수 있으면 이 단원의 기준을 이해한 것입니다.

문제 1

INNER·OUTER·표준 조인에서 INNER JOIN의 행 생성에 대한 설명으로 옳은 것은?

  1. ① 같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.
  2. ② 같은 컬럼명이면 ON이 없어도 자동으로 정확히 연결된다.
  3. ③ INNER JOIN 행 수는 항상 왼쪽 행 수와 같다.
  4. ④ 중복 키는 조인 전에 항상 자동 제거된다.
정답과 해설 보기

정답 ①

INNER JOIN은 ON 조건을 만족하는 행 쌍을 반환합니다. A의 같은 키가 2행이고 B의 같은 키가 3행이면 해당 키에서 2×3=6쌍이 생깁니다. 키의 중복 여부를 보지 않고 두 테이블 중 적은 행 수가 결과라고 생각하면 틀립니다. 조인 조건을 빠뜨리면 카티션 곱으로 행 수가 크게 늘 수 있습니다. 같은 이름의 컬럼이라는 사실만으로 자동 조인되는 것도 아닙니다. 결과 한 행의 단위가 고객인지 주문인지 주문상세인지 확인합니다.

기억할 핵심

같은 조인 키가 양쪽에서 반복되면 모든 매칭 쌍이 생성된다.

문제 2

INNER·OUTER·표준 조인에서 LEFT OUTER JOIN에 대한 설명으로 옳은 것은?

  1. ① 오른쪽의 매칭 없는 행을 무조건 보존한다.
  2. ② LEFT JOIN은 왼쪽 행을 반드시 한 번씩만 반환한다.
  3. ③ LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.
  4. ④ ON과 WHERE 위치는 외부 조인에서 항상 무관하다.
정답과 해설 보기

정답 ③

LEFT JOIN은 왼쪽 행을 보존하고, 오른쪽에 매칭이 없으면 오른쪽 컬럼을 NULL로 채웁니다. 주문 없는 고객을 포함하려면 고객을 왼쪽에 둡니다. 다만 한 고객에게 여러 주문이 있으면 고객 행이 한 번만 나온다는 뜻은 아닙니다. LEFT JOIN 이후 오른쪽 컬럼 조건을 WHERE에 두면 NULL 보완 행이 제거될 수 있습니다. 기준 행을 유지하려는 조건인지 최종 결과를 제한하려는 조건인지 구분해 ON과 WHERE를 선택하세요.

기억할 핵심

LEFT JOIN은 매칭이 없는 왼쪽 행도 오른쪽 NULL과 함께 보존한다.

문제 3

INNER·OUTER·표준 조인에서 외부 조인의 조건 위치에 대한 설명으로 옳은 것은?

  1. ① 외부 조인의 오른쪽 WHERE 조건은 NULL 보완 행을 언제나 유지한다.
  2. ② WHERE는 외부 조인에서 사용할 수 없다.
  3. ③ ON은 조인 후 원본 테이블을 수정한다.
  4. ④ 오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.
정답과 해설 보기

정답 ④

주문 없는 고객도 남기면서 결제완료 주문만 붙이려면 결제 상태를 ON 조건에 포함할 수 있습니다. WHERE 주문상태=완료를 쓰면 주문이 NULL인 고객은 UNKNOWN으로 제거됩니다. ON은 연결할 쌍을 정하고 WHERE는 연결 뒤 결과를 거릅니다. 외부 조인의 보존 효과를 판단할 때 가장 중요한 차이입니다. 단순히 모든 조건을 ON으로 옮기는 것도 답은 아니며 최종 요구사항에 맞춰야 합니다.

기억할 핵심

오른쪽 조건을 ON에 두면 매칭 없는 왼쪽 행의 보존을 유지할 수 있다.

문제 4

INNER·OUTER·표준 조인에서 CROSS·NATURAL·USING에 대한 설명으로 옳은 것은?

  1. ① NATURAL JOIN은 선언된 FK만 자동 추론한다.
  2. ② USING은 서로 다른 이름의 컬럼을 자동 변환한다.
  3. ③ NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.
  4. ④ CROSS JOIN은 결과가 항상 0행이다.
정답과 해설 보기

정답 ③

CROSS JOIN은 모든 행 쌍을 만들므로 3행과 4행은 12행입니다. NATURAL JOIN은 같은 이름의 컬럼들을 조건으로 사용하므로 스키마 변화에 주의해야 합니다. USING(키)는 동등 조인에 사용할 동일 이름 컬럼을 명시합니다. 각 표준 조인은 목적이 다릅니다. NATURAL JOIN이 외래키 관계를 추론하는 것은 아닙니다. 같은 이름의 상태 컬럼이 추가되면 의도하지 않은 조건이 포함될 수 있으므로 명시적인 ON이나 USING이 더 분명할 때가 많습니다.

기억할 핵심

NATURAL JOIN은 같은 이름의 컬럼을 조인 기준으로 사용한다.

문제 5

INNER·OUTER·표준 조인에서 조인 후 집계와 COUNT에 대한 설명으로 옳은 것은?

  1. ① COUNT(*)는 주문이 없는 고객에서 항상 0이다.
  2. ② COUNT(NULL)은 1이다.
  3. ③ LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.
  4. ④ 조인한 금액은 어떤 관계에서도 중복 합산될 수 없다.
정답과 해설 보기

정답 ③

외부 조인 결과에서 COUNT(*)는 NULL 보완 행도 세고, COUNT(오른쪽의 NOT NULL 키)는 실제 매칭 행만 셉니다. 주문 없는 고객의 주문수를 구할 때 COUNT(*)=1이 되는 함정을 확인하세요. 고객·주문·상세를 함께 연결하면 주문 한 건이 상세 수만큼 반복될 수 있습니다. 주문금액을 그대로 SUM하면 중복 합산될 수 있으므로 먼저 필요한 단위로 집계하거나 결과 단위를 재설계해야 합니다.

기억할 핵심

LEFT JOIN에서 주문 건수는 오른쪽 주문키를 COUNT하는 방식으로 구할 수 있다.

범위 확인

2026년 학습 범위를 기준으로 구성했습니다. 시험 시행기관의 자격 안내·출제 기준에서 과목과 변경 공지를 확인할 수 있습니다.

이 단원의 객관식 문제 풀기

이전 · 집계·GROUP BY·HAVING·ORDER BY

다음 · 서브쿼리·EXISTS·스칼라 서브쿼리

SQLD 전체 목차

과목별 이론

단원별 객관식

실습

필기 모의고사

스터디클럽의 다른 강의 보기