정보처리기사 기출문제 총정리 ⑳ SQL 심화 – JOIN·서브쿼리·윈도우 함수·인덱스 튜닝

SQL 심화 개요

SQL은 정보처리기사 실기에서 코드 작성 문제로도 출제됩니다. 특히 JOIN 유형과 서브쿼리, 집계 함수의 정확한 동작 이해가 필요합니다.

JOIN 유형

INNER JOIN

두 테이블에서 조인 조건을 만족하는 행만 반환

SELECT A.name, B.dept FROM emp A INNER JOIN dept B ON A.dept_id = B.id;

LEFT OUTER JOIN

왼쪽 테이블 모든 행 + 오른쪽 테이블 일치 행. 불일치 시 NULL

RIGHT OUTER JOIN

오른쪽 테이블 모든 행 + 왼쪽 테이블 일치 행

FULL OUTER JOIN

양쪽 테이블의 모든 행. 불일치 부분은 NULL

CROSS JOIN

두 테이블의 모든 조합(카티션 곱). 행 수 = A 행 수 × B 행 수

SELF JOIN

같은 테이블을 두 번 조인. 계층 구조(상사-부하) 조회에 활용

서브쿼리 (Subquery)

단순 서브쿼리

외부 쿼리와 독립적으로 실행. WHERE 절 조건으로 사용

상관 서브쿼리 (Correlated Subquery)

  • 외부 쿼리의 각 행마다 서브쿼리 재실행. 성능 주의
  • EXISTS 연산자와 자주 사용

인라인 뷰 (Inline View)

FROM 절에 서브쿼리 사용. 가상 테이블 생성

스칼라 서브쿼리 (Scalar Subquery)

SELECT 절에 사용. 반드시 단일 행·단일 열 반환해야 함

집계 함수와 GROUP BY

  • COUNT, SUM, AVG, MAX, MIN: 집계 연산
  • GROUP BY: 그룹별 집계
  • HAVING: GROUP BY 결과에 조건 적용 (WHERE는 그룹화 전 조건)
  • ROLLUP: 소계와 합계 자동 생성
  • CUBE: 모든 조합의 소계 생성

윈도우 함수 (Window Function)

행 집합에 대한 계산을 수행하면서 각 행을 유지하는 함수. OVER 절 사용

  • ROW_NUMBER(): 파티션 내 순차 번호 (동일 값도 다른 번호)
  • RANK(): 동일 값은 같은 순위, 다음 순위는 건너뜀
  • DENSE_RANK(): 동일 값은 같은 순위, 다음 순위를 건너뛰지 않음
  • LAG(): 이전 행 값 참조
  • LEAD(): 다음 행 값 참조
  • SUM() OVER(PARTITION BY…): 파티션 내 누적 합계

쿼리 실행 계획과 인덱스 튜닝

  • EXPLAIN/실행 계획으로 쿼리 비용 분석
  • Full Table Scan: 인덱스 미사용, 느림
  • Index Range Scan: 범위 검색에 인덱스 활용
  • 인덱스를 타지 않는 경우: 컬럼 함수 적용(WHERE YEAR(date)=2024), 부정 조건(!=, NOT IN), LIKE ‘%앞자리%’
  • 복합 인덱스: 첫 번째 컬럼 조건이 있어야 인덱스 활용 가능

시험 핵심 포인트

  • INNER JOIN: 교집합 / LEFT JOIN: 왼쪽 테이블 전체 + 교집합
  • WHERE vs HAVING: WHERE=그룹화 전 / HAVING=그룹화 후
  • RANK vs DENSE_RANK: 공동 2위가 있을 때 RANK는 3위 없음, DENSE_RANK는 3위 있음
  • EXISTS: 서브쿼리에 행이 존재하면 TRUE (IN보다 성능 좋은 경우 多)

마무리

SQL은 이해와 암기가 모두 필요한 파트입니다. 특히 윈도우 함수와 JOIN 유형은 실기 코드 작성 문제로도 출제되므로 직접 쿼리를 작성하며 연습하는 것이 가장 효과적입니다.

Leave a Comment