728x90
SMALL
- 이번에는 Top-N 쿼리, 셀프 조인, 그리고 계층 쿼리에 대해 알아봅시다.
Top-N 쿼리란?
- Top-N 쿼리는 특정 조건에 맞는 상위 N개의 결과를 추출하는 쿼리 기법입니다.
✅ ROWNUM
- ROWNUM은 Oracle에서 조회된 결과의 행에 순차적으로 번호를 부여하는 가상 컬럼입니다.
- ROWNUM은 항상 < 조건이나 <= 조건으로 사용해야 합니다.
- Top-N 쿼리를 작성할 때 주의해야 할 사항은 ORDER BY 절이 WHERE 절보다 나중에 수행되기 때문에 ROWNUM으로 순서를 지정할 때에는 ORDER BY 절 바깥에서 해야 한다는 점입니다.
✅ 윈도우 함수의 순위 함수
- 윈도우 함수를 사용한 Top-N 쿼리는 더 유연하며, 복잡한 조건에 대해 상위 N개의 결과를 추출할 수 있습니다.
- 특히 ROW_NUMBER, RANK, DENSE_RANK 같은 순위 함수를 활용합니다.
SELECT *
FROM (SELECT 컬럼1, 컬럼2, ROW_NUMBER() OVER (ORDER BY 컬럼1 DESC) AS rn
FROM 테이블명)
WHERE rn <= N;
셀프 조인(Self Join)이란?
- 셀프 조인은 동일한 테이블을 두 번 이상 조인하는 기법으로, 테이블 내에서의 관계를 통해 데이터를 비교하거나 계산할 때 사용됩니다.
- 예를 들어, 각 직원의 관리자 정보를 같은 직원 테이블에서 조회하고자 할 때 셀프 조인을 사용할 수 있습니다.
SELECT a.직원명, b.직원명 AS 관리자명
FROM 직원테이블 a
JOIN 직원테이블 b ON a.관리자ID = b.직원ID;
계층 쿼리란?
- 계층 쿼리는 트리 구조나 계층 구조를 가진 데이터를 조회할 때 사용되는 SQL 기법입니다.
- Oracle에서는 CONNECT BY 절을 통해 계층 쿼리를 지원합니다.
✅ 계층 쿼리에서 사용되는 구문 7가지!
- LEVEL: 현재 행이 계층 구조에서 몇 번째 레벨에 있는지를 나타냅니다. 루트 노드는 1이 됩니다.
- SYS_CONNECT_BY_PATH: 현재 행으로부터 루트까지의 경로를 문자열로 반환합니다.
- START WITH: 계층 구조에서의 루트 노드를 생성합니다.
- CONNECT BY: 루트로부터 자식 노드를 생성합니다. 조건에 만족하는 데이터가 없을 때까지 노드를 생성합니다.
- PRIOR: 현재 행의 부모 노드의 값을 반환합니다.
- CONNECT_BY_ROOT 컬럼: 루트 노드의 주어진 컬럼 값을 반환합니다.
- CONNECT_BY_ISLEAF: 가장 하위 노드인 경우 1을 반환하고 그 외에는 0을 반환합니다.
- 또한, 계층 쿼리에서 정렬을 하기 위해서는 ORDER BY 절이 아닌, ORDER SIBLINGS BY 절을 사용해야 합니다!
728x90
LIST
'자격증 > SQLD' 카테고리의 다른 글
관리 구문 (1) (4) | 2024.03.07 |
---|---|
SQL 활용 (4) (4) | 2024.03.06 |
SQL 활용 (2) (0) | 2024.03.05 |
SQL 활용 (1) (3) | 2024.02.27 |
SQL 기본 (4) (2) | 2024.02.26 |