SQLD 자격증 2과목 핵심 요약 – JOIN, 집합연산자, 서브쿼리 총정리 + 기출문제 (5편)

SQLD 시험 합격 전략 요약

JOIN과 서브쿼리는 SQLD 2과목에서 가장 높은 비중을 차지합니다. INNER JOIN과 OUTER JOIN의 결과 차이, NATURAL JOIN과 USING/ON의 제약사항을 구분하는 것이 합격의 열쇠입니다.


1. JOIN 기본 개념

초압축 암기 요약

N개 테이블 JOIN에는 최소 N-1번의 JOIN이 필요합니다.
EQUI JOIN은 ‘=’ 조건, NON EQUI JOIN은 BETWEEN 등 사용합니다.
컬럼명 앞에 테이블명을 기술해야 합니다.

초보자 이해용 상세 설명

정의: JOIN은 두 개 이상의 테이블을 연결 또는 결합하여 데이터를 출력하는 것입니다. 일반적으로 PK나 FK 값의 연관에 의해 성립되지만, 논리적인 값들의 연관만으로도 가능합니다.

EQUI JOIN: 두 테이블 간 칼럼 값이 정확하게 일치하는 경우에 사용합니다. 대부분 PK와 FK 관계를 기반으로 합니다.

NON EQUI JOIN: ‘=’ 이 아닌 BETWEEN, >, <= 등의 연산자를 사용합니다.

SELECT E.ENAME, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HSAL;

시험 출제 포인트: “5개 테이블 JOIN의 최소 횟수”는 N-1 = 4번입니다.


2. FROM절 JOIN 형태 (ANSI 표준)

초압축 암기 요약

INNER JOIN = 동일 값만 반환, USING/ON 필수.
NATURAL JOIN = 동일 이름 모든 칼럼 EQUI JOIN, 추가 조건 불가, SQL Server 미지원.
USING = 선택적 EQUI JOIN, 접두사 불가.
ON = 칼럼명 달라도 가능, 접두사 필수.
CROSS JOIN = M*N건.
OUTER JOIN = 불일치 행도 반환.

초보자 이해용 상세 설명

JOIN 유형특징주의사항
INNER JOIN동일한 값이 있는 행만 반환USING 또는 ON 절 필수
NATURAL JOIN동일 이름 모든 칼럼 EQUI JOIN추가 JOIN 조건 정의 불가, SQL Server 미지원
USING 조건절같은 이름 칼럼 중 선택적 JOINALIAS/테이블명 접두사 불가, SQL Server 미지원
ON 조건절칼럼명 달라도 JOIN 가능ALIAS/테이블명 반드시 사용
CROSS JOINM*N건 데이터 조합카테시안 곱

OUTER JOIN 유형:

  • LEFT OUTER JOIN: 왼쪽 테이블 전체 + 오른쪽 불일치는 NULL
  • RIGHT OUTER JOIN: 오른쪽 테이블 전체 + 왼쪽 불일치는 NULL
  • FULL OUTER JOIN: 양쪽 모든 데이터 JOIN, 중복 삭제

시험 출제 포인트: NATURAL JOIN의 “추가 조건 정의 불가”와 USING의 “접두사 불가”가 함정 문제로 자주 나옵니다.


3. 집합 연산자

초압축 암기 요약

사용 조건: SELECT절 칼럼 수 동일 + 데이터 타입 호환.
UNION(중복 제거), UNION ALL(중복 포함), INTERSECT(교집합), EXCEPT/MINUS(차집합).
순수 관계 연산자 매핑: SELECT->WHERE, PROJECT->SELECT.

초보자 이해용 상세 설명

집합 연산자 비교:

  • UNION: 합집합, 중복 행은 1건만 표시
  • UNION ALL: 합집합, 중복 행도 모두 표시 (성능 우수)
  • INTERSECT: 교집합
  • EXCEPT(SQL Server) / MINUS(Oracle): 차집합

시험 출제 포인트: UNION과 UNION ALL의 중복 처리 차이, 순수 관계 연산자 매핑이 출제됩니다.


4. 서브쿼리와 뷰

초압축 암기 요약

서브쿼리 규칙: 괄호 필수, ORDER BY 불가, 단일행 연산자(=,<,>)는 결과 1건 이하, 다중행 연산자(IN,ALL,ANY)는 건수 무관.
스칼라 서브쿼리 = 한 행 한 칼럼.
인라인 뷰 = FROM절, ORDER BY 가능.
뷰 장점 = 독립성, 편리성, 보안성.

초보자 이해용 상세 설명

서브쿼리 주의사항:

  1. 괄호로 감싸서 사용
  2. 단일행 비교 연산자는 결과 1건 이하 필수
  3. 복수행 비교 연산자(IN, ALL, ANY)는 건수 무관
  4. ORDER BY 사용 불가 (인라인 뷰 제외)
  5. 사용 위치: SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT-VALUES, UPDATE-SET

서브쿼리 유형:

  • 스칼라 서브쿼리: SELECT절에 위치, 한 행 한 칼럼만 반환
  • 인라인 뷰: FROM절에 위치, 테이블처럼 사용, ORDER BY 가능

뷰(VIEW): 실제 데이터 없는 가상 테이블. 독립성(테이블 변경 무관), 편리성(복잡 쿼리 단순화), 보안성(민감 정보 숨김)의 장점이 있습니다.

계층형 질의 핵심:

  • START WITH: 시작 위치 지정
  • CONNECT BY: 자식 데이터 지정
  • PRIOR 자식 = 부모: 순방향 전개(부모->자식)
  • PRIOR 부모 = 자식: 역방향 전개
  • LEVEL: 루트=1, 하위로 1씩 증가
  • ORDER SIBLINGS BY: 형제 노드 간 정렬

시험 출제 포인트: “서브쿼리에서 ORDER BY 불가, 인라인 뷰에서는 가능”이 함정 문제입니다. 계층형 질의에서 PRIOR 위치에 따른 방향 구분도 핵심입니다.


시험 핵심 포인트 정리

  1. N개 테이블 JOIN = 최소 N-1번 JOIN 필요
  2. NATURAL JOIN = 추가 JOIN 조건 불가, SQL Server 미지원
  3. USING = 접두사 불가 / ON = 접두사 필수
  4. LEFT OUTER JOIN = 왼쪽 기준, 오른쪽 NULL
  5. UNION = 중복 제거 / UNION ALL = 중복 포함
  6. 서브쿼리 ORDER BY 불가, 인라인 뷰 ORDER BY 가능
  7. PRIOR 자식=부모 -> 순방향(부모->자식)

기본 확인문제

문제 1. 5개 테이블 JOIN에 필요한 최소 JOIN 횟수는?

① 3회 ② 4회 ③ 5회 ④ 6회

문제 2. NATURAL JOIN에 대한 설명으로 올바르지 않은 것은?

① 동일 이름 모든 칼럼에 EQUI JOIN 수행
② WHERE절에서 추가 JOIN 조건 정의 가능
③ SQL Server 미지원
④ USING/ON절 사용 불가

문제 3. UNION과 UNION ALL의 차이는?

① UNION은 정렬, UNION ALL은 미정렬
② UNION은 중복 제거, UNION ALL은 중복 포함
③ UNION은 교집합, UNION ALL은 합집합
④ 차이 없음

문제 4. 서브쿼리에서 사용할 수 없는 것은?

① SELECT ② WHERE ③ ORDER BY ④ HAVING

문제 5. 뷰의 장점이 아닌 것은?

① 독립성 ② 편리성 ③ 보안성 ④ 성능 향상


기본문제 해설

1. 정답: ② – N개 테이블 JOIN은 최소 N-1번 필요합니다. 5-1 = 4회.

2. 정답: ② – NATURAL JOIN이 명시되면 USING, ON, WHERE에서 추가 JOIN 조건을 정의할 수 없습니다.

3. 정답: ② – UNION은 중복 제거, UNION ALL은 중복 포함. 중복 제거가 불필요하면 UNION ALL이 성능상 유리합니다.

4. 정답: ③ – 서브쿼리에서는 ORDER BY를 사용할 수 없습니다. 인라인 뷰(FROM절)에서는 가능합니다.

5. 정답: ④ – 뷰의 장점은 독립성, 편리성, 보안성입니다. 뷰 자체가 성능을 향상시키지는 않습니다.


고난도 확인문제

문제 1. USING 조건절에 대한 설명으로 올바른 것은?

① JOIN 칼럼에 ALIAS 사용 가능
② 칼럼명이 달라도 JOIN 가능
③ 테이블명 접두사를 붙일 수 있다
④ JOIN 칼럼에 ALIAS나 접두사를 붙일 수 없다

문제 2. LEFT OUTER JOIN에서 오른쪽에 일치하는 값이 없을 때 오른쪽 칼럼의 값은?

① 0 ② 빈 문자열 ③ NULL ④ 에러

문제 3. 계층형 질의에서 ‘PRIOR 자식 = 부모’ 형태의 전개 방향은?

① 역방향(자식->부모)
② 순방향(부모->자식)
③ 양방향
④ 전개 방향과 무관


고난도 해설

1. 정답: ④

USING 조건절에서 JOIN 칼럼에는 ALIAS나 테이블명 접두사를 붙일 수 없습니다. ON 조건절에서는 반드시 사용해야 합니다. USING은 같은 이름 칼럼에만 사용 가능하며, 칼럼명이 다르면 ON을 써야 합니다.

2. 정답: ③

LEFT OUTER JOIN은 왼쪽 테이블 전체를 기준으로 하며, 오른쪽에 일치하는 값이 없으면 NULL로 채웁니다.

3. 정답: ②

‘PRIOR 자식 = 부모’는 순방향 전개(부모->자식)입니다. PRIOR가 자식 쪽에 위치하면 “현재 읽은 자식의 부모를 찾아 연결”하므로 부모에서 자식으로 내려가는 순방향입니다. 반대로 ‘PRIOR 부모 = 자식’은 역방향입니다.


다음 편 예고

다음 6편에서는 SQLD 시리즈 최종편인 ‘윈도우 함수, 그룹 함수, 옵티마이저, 인덱스’를 다룹니다. RANK, DENSE_RANK, ROW_NUMBER부터 ROLLUP, CUBE, 그리고 옵티마이저와 JOIN 기법까지 마무리 정리를 완성합니다.

댓글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다