안녕하세요! 이번 글은 데이터베이스에서 보다 복잡한 조회를 구현하기 위해 사용하는 두 가지 주요 기법인 서브쿼리(SubQuery)와 계층형 조회에 대해 정리해보았습니다.
무엇보다도 서브쿼리의 다양한 형태와 계층형 조회를 통해 데이터를 효과적으로 조직하고 조회하는 방법을 설명하는데 중점을 두었습니다.
1. 서브쿼리 (SubQuery)
서브쿼리는 SQL 쿼리 내부에 포함된 또 다른 쿼리로, 복잡한 조건을 처리하거나 특정 데이터를 추출할 때 사용된다. 서브쿼리는 메인 쿼리와 함께 작동하며 여러 형태로 나뉜다.
1-1. 인라인뷰 (Inline View)
- 인라인뷰란 FROM 절에 SELECT 문이 포함된 경우를 말한다. 이러한 형태는 임시 테이블처럼 사용할 수 있어 복잡한 데이터 처리에 유용하다.
1-2. 스칼라 서브쿼리 (Scalar SubQuery)
- 스칼라 서브쿼리는 SELECT 문 안에서 사용되며, 한 행과 한 컬럼만을 반환한다. 이는 단일 값을 요구하는 상황에서 매우 유용하다.
1-3. 단일행 / 다중행 서브쿼리
- 단일행 서브쿼리와 다중행 서브쿼리는 서브쿼리의 결과 행의 개수에 따라 구분된다. 단일행 서브쿼리는 한 행을 반환하고, 다중행 서브쿼리는 여러 행을 반환한다.
1-4. 서브쿼리의 제약사항 및 특징
- 정렬 제한: 서브쿼리에서는 ORDER BY를 사용할 수 없다.
- 다중 행 연산자 필요: 여러 행을 반환하는 서브쿼리는 다중 행 연산자 (IN, ANY, ALL)를 사용해야 한다.
- 컬럼 사용 제한: 메인 쿼리에서는 서브쿼리의 SELECT되지 않은 컬럼을 사용할 수 없다.
- EXISTS: 서브쿼리의 결과가 하나라도 존재하면 TRUE를 반환하는 연산자이다.
1-5. ALL 연산자
- ALL 연산자는 메인 쿼리의 결과와 서브쿼리의 결과가 모두 동일할 때 참(TRUE)이 되는 다중행 연산자이다.
- 예시:
SELECT *
FROM 직원
WHERE 급여 > ALL (SELECT 급여 FROM 부서 WHERE 부서명 = '영업');
- 50000 > ALL (20000, 30000) -> TRUE
- 50000 > ALL (70000, 30000) -> FALSE
2. 계층형 조회 (Hierarchical Query)
계층형 조회는 트리 구조 형태의 데이터를 조회하는 기법으로, 부모-자식 관계를 가진 데이터를 효과적으로 탐색할 수 있다. 이는 주로 조직도, 제품 카탈로그, 가계도 등과 같은 계층 구조 데이터를 처리할 때 사용된다.
2-1. 계층형 구조
- 부모 데이터 (ROOT 노드): 계층 구조의 시작점을 의미한다. **START WITH**를 사용해 계층형 조회의 시작점을 설정할 수 있다.
- 자식 데이터: 부모 데이터에 연결된 하위 데이터를 의미한다.
- 자식 노드가 없는 데이터 (LEAF 노드): 더 이상 자식이 없는 끝점의 데이터를 의미한다.
2-2. 계층형 조회 주요 절
- START WITH: 계층 구조의 시작 지점을 설정한다. 여기서 설정된 조건에 맞는 레코드가 **루트(부모)**로 설정된다.
- CONNECT BY: 계층 구조가 연결된 방향을 정의한다. 이를 통해 부모와 자식 레코드 간의 연결 관계를 명확히 알 수 있다.
- 예시:
SELECT 직원명, 직급
FROM 직원
START WITH 직급 = '사장'
CONNECT BY PRIOR 직원코드 = 상사코드;
- CONNECT BY PRIOR a = b는 b -> a 순으로 재배치한다. 즉, a 컬럼과 b 컬럼이 동일한 값을 가진 레코드들이 계층 구조로 연결된다.
2-3. 형제 자매 관계 정렬 (ORDER SIBLINGS BY)
- ORDER SIBLINGS BY: 계층 구조에서 동일 부모를 가지는 형제 노드들을 특정 컬럼을 기준으로 정렬한다. 이를 통해 트리 구조 내의 형제 데이터를 깔끔하게 볼 수 있다.
2-4. 서브쿼리와 계층형 조회 활용 시 주의사항
- 서브쿼리의 사용 목적: 서브쿼리는 메인 쿼리로부터 필요한 데이터를 임시로 추출하거나, 특정 조건을 만족하는 데이터를 걸러내기 위해 사용된다.
- 계층형 조회의 사용 목적: 계층 구조 데이터를 한눈에 파악하고 그 관계를 명확히 분석하기 위한 조회이다. 특히 조직도나 제품 구조와 같이 상하 관계가 명확한 데이터에서 유용하다.
혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.
반응형
'IT & AI > AI 지식' 카테고리의 다른 글
SQL 최적화 인덱스, 분산 데이터베이스, 그리고 PL/SQL (0) | 2024.12.02 |
---|---|
SQL 최적화 윈도우 함수, 테이블 파티션, 옵티마이저 (1) | 2024.12.01 |
SQL 활용 JOIN과 다양한 결합 방식 (1) | 2024.11.29 |
SQL 활용 GROUP 함수와 테이블 연결 기법 (0) | 2024.11.28 |
SQL 기본 SELECT 명령어를 비롯한 다양한 함수 활용 (1) | 2024.11.27 |