PIVOT 절과 UNPIVOT 절

PIVOT 절과 UNPIVOT 절

PIVOT과 UNPIVOT은 SQL에서 데이터를 행(row)과 열(column) 간 변환하는 기능을 제공하는 절입니다. 이 기능은 MSSQL, Oracle 등 일부 RDBMS에서 지원하며,MySQL과 PostgreSQL에서는 CASE WHEN 또는 GROUP BY 등을 사용하여 유사한 기능을 구현할 수 있습니다. 1. PIVOT 절 (행 → 열 변환) PIVOT은 특정 열의 고유한 값을 새로운 컬럼으로 변환하는 기능을 합니다. 📌 PIVOT 기본 문법 (MSSQL 기준) … Read more

고급 조인 기법(Advanced Join Techniques)

고급 조인 기법(Advanced Join Techniques)

데이터베이스에서 조인은 데이터를 효율적으로 결합하는 핵심 기능입니다.기본적인 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN 외에도 성능과 최적화를 위한 다양한 고급 조인 기법이 존재합니다. 1. 고급 조인 기법 개요 조인 기법 특징 주요 활용 사례 Nested Loop Join 작은 테이블과 인덱스 사용 시 효율적 인덱스 활용이 가능한 경우 Hash Join 등가 조인(=)에 적합, 대용량 … Read more

스칼라 서브쿼리(Scalar Subquery)

스칼라 서브쿼리(Scalar Subquery)

스칼라 서브쿼리(Scalar Subquery)는 단일 값을 반환하는 서브쿼리입니다.즉, SELECT 문이 실행될 때 하나의 행과 하나의 열(단일 값)만 반환하는 서브쿼리를 의미합니다. 1. 스칼라 서브쿼리의 특징 ✔ 반환 값이 반드시 하나(1개 행, 1개 열)✔ 메인 쿼리의 컬럼과 함께 사용할 수 있음✔ 각 행마다 실행될 수 있어 성능 저하 가능✔ NULL을 반환할 수도 있음 2. 스칼라 서브쿼리의 사용 예제 … Read more

Sort Merge Join (정렬 병합 조인)

Sort Merge Join (정렬 병합 조인)

Sort Merge Join(SM 조인, 정렬 병합 조인)은 두 개의 정렬된 테이블을 병합하여 조인하는 방식입니다.주로 등가 조인(=)뿐만 아니라 범위 조인(<, >, BETWEEN 등)에서도 사용될 수 있으며, 대용량 데이터 조인에 적합합니다. 1. Sort Merge Join 개념 Sort Merge Join은 두 개의 입력 테이블을 정렬(Sort)한 후, 정렬된 데이터를 병합(Merge)하여 조인을 수행합니다. 2. Sort Merge Join의 동작 방식 SM … Read more

NL 조인(Nested Loop Join)

NL 조인(Nested Loop Join)

Nested Loop Join(NL 조인, 중첩 루프 조인)은 두 개의 테이블을 조인할 때 가장 기본적인 방법으로,하나의 테이블(외부 테이블, Outer Table)의 각 행을 반복하며 다른 테이블(내부 테이블, Inner Table)과 비교하는 방식입니다. NL 조인은 인덱스가 있는 경우 효과적이며, 소규모 데이터셋에서 빠르게 실행될 수 있지만, 대용량 데이터에서는 성능이 저하될 수 있습니다. 1. NL 조인의 개념 NL 조인은 반복문(Looping)을 활용한 … Read more

해시 조인(Hash Join)

해시 조인(Hash Join)

해시 조인(Hash Join)은 데이터베이스에서 두 개의 테이블을 조인할 때 사용되는 조인 알고리즘 중 하나로, 특히 대용량 데이터셋을 다룰 때 성능이 뛰어난 방법입니다.일반적으로 등가 조인(=)에서 사용되며, 테이블 크기가 크거나 인덱스가 없을 때 효율적으로 동작합니다. 1. 해시 조인의 개념 해시 조인은 두 개의 테이블에서 조인 키 값을 기반으로 해시 테이블을 생성하여 조인하는 방식입니다.일반적으로 Nested Loop Join(중첩 루프 … Read more

계층형 쿼리(Hierarchical Query)

계층형 쿼리(Hierarchical Query)

1. 계층형 쿼리(Hierarchical Query)란? 계층형 쿼리(Hierarchical Query)는 부모-자식 관계(트리 구조)를 가진 데이터를 조회하는 SQL 기법입니다. 일반적인 SQL 쿼리는 평면적(Flat) 데이터를 조회하는 반면, 계층형 쿼리는 트리 구조(Tree Structure)를 탐색할 수 있습니다. 예제: 2. 기본 문법 SELECT [컬럼들]FROM 테이블START WITH [루트 조건]CONNECT BY [계층적 관계 정의][ORDER SIBLINGS BY 컬럼명]; 3. 예제 데이터 (EMPLOYEES 테이블) 테이블 구조 CREATE … Read more

Snapshot too old(ORA-01555) in Oracle

Snapshot too old(ORA-01555) in Oracle

Oracle “Snapshot too old” 오류와 해결 방법 📌 오류 개요 Oracle에서 “Snapshot too old” 오류는 UNDO 영역 부족으로 인해 발생하는 오류입니다.특히 긴 시간 실행되는 쿼리(대량 데이터 조회, 분석 쿼리 등)에서 많이 발생합니다. (쿼리가 오래 수행되는 동안 UNDO영역에 기존 수행중이던 쿼리에 대한 데이터가 삭제됨) 1. “Snapshot too old” 오류 원인 오라클은 트랜잭션의 일관성을 유지하기 위해 UNDO … Read more

함수 기반 인덱스 (Function-Based Index, FBI) in Oracle

함수 기반 인덱스 (Function-Based Index, FBI) in Oracle

Oracle에서 함수 기반 인덱스(FBI, Function-Based Index) 는 일반 인덱스가 적용되지 않는 경우에도 함수나 표현식 결과를 인덱스로 활용할 수 있도록 도와주는 강력한 기능입니다. 1. 함수 기반 인덱스(FBI)란? 조건절에서 인덱스 컬럼에 함수를 적용하면 일반적으론 Index Range Scan이 불가능합니다. 인덱스는 가공하지 않은 값을 기준으로 정렬해서 저장한 반면, 가공한 값으로 검색하게 되면 수직적 탐색을 통해 시작점과 끝 지점을 찾을 … Read more

Oracle Index 문제 (Fragmentation 등)

Oracle Index 문제 (Fragmentation 등)

인덱스(Index)는 데이터 검색 성능을 향상시키는 중요한 구조이지만, 시간이 지나면서 단편화(Fragmentation), 희소성(Sparse), 비대화(Bloat), 데이터 불균형(Skew) 등의 문제로 인해 성능이 저하될 수 있습니다.이 문서에서는 Index Fragmentation(인덱스 단편화) 를 비롯한 여러 인덱스 관련 문제를 정리하고, 원인과 해결 방법을 설명합니다. 1. Index Fragmentation (인덱스 단편화) (1) Index Fragmentation이란? (2) 발생 원인 ✅ DELETE 후 블록이 재사용되지 않음✅ UPDATE 시 … Read more