이 글에서 꼭 잡아야 할 것
데이터 형태를 회전시키거나 중간 결과를 이름 붙여 재사용하면 복잡한 SQL도 훨씬 읽기 쉬워진다. PIVOT, UNPIVOT, WITH절은 보고서형 SQL에서 특히 빛나는 도구다.
고급 SQL은 결과를 만드는 것뿐 아니라 읽을 수 있게 만드는 기술이기도 하다. WITH절은 복잡한 계산을 작은 블록으로 분리해 주고, PIVOT 계열 문법은 결과 표현 방식을 바꿔 데이터 해석을 훨씬 쉽게 만들어 준다.
개념 지도와 이해 포인트
대표 문법 패턴
WITH sales_base AS (
SELECT dept_id, sales_month, amount
FROM monthly_sales
)
SELECT *
FROM sales_base
PIVOT (
SUM(amount)
FOR sales_month IN ('JAN' AS jan, 'FEB' AS feb, 'MAR' AS mar)
);
문법 읽는 포인트
- WITH절은 복잡한 SQL을 단계별로 정리하는 데 매우 유용하다.
- PIVOT은 집계 함수와 함께 쓰이는 경우가 많다.
- UNPIVOT은 반대로 열 구조를 다시 행 구조로 돌린다.
핵심 용어
- PIVOT
- UNPIVOT
- WITH
월별 실적을 가로 표로 전환하기
복잡한 변형 SQL일수록 한 번에 읽으려 하지 말고, WITH절의 소스 결과를 먼저 상상한 뒤 최종 변환 단계로 넘어가는 방식이 훨씬 안정적이다.
WITH src AS (
SELECT department_id, TO_CHAR(order_date, 'MM') AS order_month, amount
FROM orders
)
SELECT *
FROM src
PIVOT (
SUM(amount)
FOR order_month IN ('01' AS m01, '02' AS m02, '03' AS m03)
)
ORDER BY department_id;
수험 체크포인트와 자주 하는 실수
시험 체크포인트
- WITH절은 가독성을 높이는 도구라는 관점으로 접근하면 구조가 잘 읽힌다.
- PIVOT은 행을 열로 바꾸되 집계가 함께 일어난다는 점을 기억하자.
- UNPIVOT은 정반대 방향 전환이라는 이미지를 갖고 있으면 좋다.
자주 하는 실수
- PIVOT 전에 필요한 집계 기준을 명확히 잡지 않는 실수
- WITH절을 단순 별칭과 같은 수준으로 보는 실수
- 변형 전후 데이터 구조를 눈으로 그리지 않고 문법만 따라가는 실수
연결 학습
고급 조회 문법이 어느 정도 정리되었다면 이제 데이터 구조 자체를 만드는 DDL로 넘어간다. 다음 챕터에서는 CREATE, ALTER, DROP을 다룬다.
댓글 0
작성자 이름과 댓글 내용을 입력하면 바로 등록됩니다. 답글은 한 단계까지 지원하고, 댓글은 최대 200자까지 작성할 수 있습니다.
같은 카테고리에서 이어서 읽기
지금 읽은 글과 가까운 흐름의 글 5개를 모아 두었습니다. 바로 앞뒤 문맥을 이어서 읽고 싶을 때 가장 편합니다.
분석 함수 기초: OVER와 PARTITION BY
분석 함수는 행을 줄이지 않고도 집계 결과를 각 행에 함께 보여준다. OVER 절과 PARTITION BY를 이해하면 집계와 분석의 차이가 선명해진다.
순위 함수: ROW_NUMBER, RANK, DENSE_RANK
순위 함수는 정렬된 데이터에 순서를 매긴다. 같은 값이 나왔을 때 번호가 어떻게 붙는지 이해하면 상위 N건 문제와 동점 처리 문제를 확실히 잡을 수 있다.
계층형 질의: START WITH, CONNECT BY, LEVEL
오라클은 트리 구조 데이터를 위한 계층형 질의 문법을 제공한다. 조직도, 카테고리 트리, 부모-자식 관계를 SQL 한 문장으로 풀 수 있다는 점이 큰 장점이다.
DDL 기초: CREATE, ALTER, DROP, TRUNCATE
DDL은 데이터 구조를 정의하고 바꾸는 문법이다. 테이블과 컬럼을 만드는 CREATE, 구조를 바꾸는 ALTER, 제거하는 DROP과 TRUNCATE를 정확히 구분해야 한다.
제약조건과 데이터 무결성
좋은 데이터베이스는 잘못된 데이터를 애초에 받지 않는다. 제약조건은 데이터 무결성을 보장하는 핵심 장치이며, 오라클 SQL 시험에서도 매우 중요한 주제다.
댓글을 불러오는 중입니다.