본문 바로가기

IT & AI/AI 지식

SQL 활용 서브쿼리(SubQuery), 계층형 조회

by 빛나는해커 2024. 11. 30.

안녕하세요! 이번 글은 데이터베이스에서 보다 복잡한 조회를 구현하기 위해 사용하는 두 가지 주요 기법인 서브쿼리(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. 서브쿼리와 계층형 조회 활용 시 주의사항

  • 서브쿼리의 사용 목적: 서브쿼리는 메인 쿼리로부터 필요한 데이터를 임시로 추출하거나, 특정 조건을 만족하는 데이터를 걸러내기 위해 사용된다.
  • 계층형 조회의 사용 목적: 계층 구조 데이터를 한눈에 파악하고 그 관계를 명확히 분석하기 위한 조회이다. 특히 조직도나 제품 구조와 같이 상하 관계가 명확한 데이터에서 유용하다.

혹시 이해가 어려우시다면, 이전 글을 먼저 참고해보시면 좋을 것 같습니다.

 

SQL 기본 및 명령어 DCL, DDL, DML, TCL

안녕하세요! SQL은 관계형 데이터베이스를 다루기 위해 사용되는 언어입니다. 최근 들어 SQLD나 SQLP 자격증을 준비하시는 분들이 많으신 걸로 알고 있는데요.이번 글에서는 SQL의 기본적인 개념과

actshiny.com

 

SQL 기본 SELECT 명령어를 비롯한 다양한 함수 활용

안녕하세요! 이번 글에서는 SELECT의 기본 구조와 함께 여러 가지 유용한 함수들을 설명하고자 합니다.문자형 함수, 숫자형 함수, 날짜형 함수, 명시적/암시적 형변환, DUAL 테이블, 조건 처리 함수

actshiny.com

 

SQL 활용 GROUP 함수와 테이블 연결 기법

안녕하세요! SQL에서 데이터를 분석하고 활용하는 중요한 방법 중 하나는 다양한 GROUP 함수를 사용하는 것입니다.이번 글에서는 ROLLUP, CUBE, GROUPING SETS와 같은 고급 그룹 함수들을 중심으로 설명

actshiny.com

 

SQL 활용 JOIN과 다양한 결합 방식

안녕하세요! SQL에서 테이블 간의 데이터를 결합하여 분석하는 것은 매우 중요합니다. 데이터베이스에서 여러 테이블을 연결해 필요한 정보를 도출하기 위해 JOIN을 사용하며, 이는 집합 연산과

actshiny.com

SQL 활용 서브쿼리(SubQuery), 계층형 조회 소개 이미지

반응형