SQLP

시험 직전 요약장

판단 기준과 헷갈리는 개념, 대표 예제를 짧게 확인하세요.

이론 목록

스칼라 서브쿼리 반복 제거: 사전 집계·LATERAL·구조화 반환

원래 이론 →

판단 기준

혼동하기 쉬운 판단정확한 기준
Aggregate를 세 개 쓰면 Table을 세 번 읽는다같은 Query Block의 Aggregate들은 한 입력 처리에서 함께 계산할 수 있다
사전 집계는 항상 빠르다Outer가 작고 선택적 Index Lookup이 가능하면 반복 방식이 더 적을 수 있다
OUTER APPLY는 결과를 항상 한 행으로 만든다오른쪽 Subquery가 여러 행이면 왼쪽 행도 여러 행으로 확장된다
Top-1에서 ORDER BY sal DESC만 있으면 충분하다동점 처리 규칙을 위한 고유 Tie-Breaker가 필요하다
Object Type은 다중 Column 조회의 기본 해법이다Schema Type이 실제로 필요한 경우에 제한적으로 사용한다
문자열 결합은 Column 수만 줄이는 안전한 최적화다타입·NULL·NLS·길이 오류와 변환 비용이 생긴다
CTE를 작성하면 반드시 먼저 계산된다Optimizer가 Merge·재배치할 수 있으므로 실제 Plan을 확인한다
CROSS APPLY는 항상 Match 없는 왼쪽 Row를 제거한다GROUP BY 없는 Aggregate는 빈 입력에서도 한 Row를 만들 수 있다
OUTER APPLY는 오른쪽을 항상 한 Row로 제한한다오른쪽이 N행이면 왼쪽도 N행으로 확장된다
LATERAL은 사전 집계보다 항상 빠르다Outer 수·NDV·Index 범위·전체 Fetch를 비교한다
Object Constructor는 Argument 순서가 중요하지 않다Attribute 순서·개수·타입에 맞춰야 한다
Object의 모든 Attribute NULL과 Object NULL은 같다Object 존재 여부와 Attribute NULL을 구분한다

이 부분의 원문 →

헷갈리는 개념

방식대표 장점대표 비용·주의
여러 Scalar SubquerySQL 작성이 직관적같은 Source 반복 Access 가능
한 Scalar Aggregate한 Lookup에서 여러 Aggregate 계산 가능여러 Column을 직접 반환하기 어려움
사전 집계 + Join상세 Source를 한 번 처리해 전체 처리량 절감 가능전체 Group By·Workarea·TEMP 비용
대상 Key 제한 후 집계불필요한 전체 집계 감소Query Transformation 후 실제 Plan 확인 필요
LATERAL·OUTER APPLYOuter Key별로 여러 Column·Top-N 반환Outer가 크면 반복 Starts 증가
Object Type구조화된 단일 값Schema Type 의존성과 사용 복잡성
문자열 포장구버전·Legacy에서 구현 가능타입·NULL·길이·NLS 위험
이 부분의 원문 →

대표 계산·예제

평균·최소·최대는 동일한 입력 Row Set에서 계산할 수 있습니다.

SQL
SELECT customer_id,
       AVG(amount) AS avg_amount,
       MIN(amount) AS min_amount,
       MAX(amount) AS max_amount,
       COUNT(*)    AS trade_count
FROM   trade
WHERE  trade_date >= TRUNC(SYSDATE, 'MM')
GROUP BY customer_id;

하나의 GROUP BY Operation이 입력을 읽으며 여러 Aggregate를 함께 계산합니다.

도식
TRADE 입력 한 번 처리
→ 고객번호별 Group 생성
→ AVG·MIN·MAX·COUNT 동시 계산

Aggregate 식이 네 개라고 해서 Table을 네 번 읽는 구조가 되지는 않습니다. 실행계획에서는 하나의 HASH GROUP BY 또는 SORT GROUP BY 아래에 입력 Access가 배치될 수 있습니다.

다만 Aggregate마다 입력 의미가 다르면 한 번의 단순 집계로 합칠 수 없습니다.

SQL
SUM(CASE WHEN trade_type = 'BUY'  THEN amount END)
SUM(CASE WHEN trade_type = 'SELL' THEN amount END)
COUNT(DISTINCT product_id)

조건부 Aggregate는 같은 Row Set에서 함께 계산할 수 있지만, 서로 다른 날짜 범위·Join 관계·DISTINCT Key가 필요하면 Workarea와 결과 의미를 별도로 검토합니다.


이 부분의 원문 →

내 최근 연습 오답

현재 브라우저의 연습 채점 기록에서 공개된 단원과 연결된 오답을 확인합니다.

학습 기록 →

오답 기록을 확인하고 있습니다.