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 조건절 | 같은 이름 칼럼 중 선택적 JOIN | ALIAS/테이블명 접두사 불가, SQL Server 미지원 |
| ON 조건절 | 칼럼명 달라도 JOIN 가능 | ALIAS/테이블명 반드시 사용 |
| CROSS JOIN | M*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건 이하 필수
- 복수행 비교 연산자(IN, ALL, ANY)는 건수 무관
- ORDER BY 사용 불가 (인라인 뷰 제외)
- 사용 위치: 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 위치에 따른 방향 구분도 핵심입니다.
시험 핵심 포인트 정리
- N개 테이블 JOIN = 최소 N-1번 JOIN 필요
- NATURAL JOIN = 추가 JOIN 조건 불가, SQL Server 미지원
- USING = 접두사 불가 / ON = 접두사 필수
- LEFT OUTER JOIN = 왼쪽 기준, 오른쪽 NULL
- UNION = 중복 제거 / UNION ALL = 중복 포함
- 서브쿼리 ORDER BY 불가, 인라인 뷰 ORDER BY 가능
- 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 기법까지 마무리 정리를 완성합니다.
