[Oracle] query 정리

MinJi·2024년 10월 14일

BackEnd

목록 보기
3/6

Connect by Prior와 Start With

Connect by priorstart with는 주로 SQL 쿼리나 데이터베이스 관련 문맥에서 사용되는 개념이다.

Connect by Prior

  • 계층적 쿼리를 작성할 때 사용하는 구문
  • 부모-자식 관계를 기반으로 데이터를 탐색하는 데 유용하다.
  • 주로 Oracle 데이터베이스에서 사용되며, 특정 조건에 따라 계층 구조를 쉽게 표현할 수 있다.
SELECT 직원_ID, 이름, 상사_ID
FROM 직원
CONNECT BY PRIOR 직원_ID = 상사_ID
START WITH 상사_ID IS NULL;

Start with

  • 계층적 쿼리를 시작할 노드를 지정하는데 사용된다.
  • 일반적으로 Connect by Prior와 함께 사용되며, 어떤 조건에서 계층적 탐색을 시작할지를 정의한다.
SELECT 직원_ID, 이름, 상사_ID
FROM 직원
CONNECT BY PRIOR 직원_ID = 상사_ID
START WITH 이름 = 'CEO';

SELECT INTO

한 테이블에서 새로운 테이블로 정보를 복사할 때 사용한다.

SELECT *
INTO newtable [IN externaldb]
FROM table1;

또는 컬럼을 선택할 수 있다.

SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;

LISTAGG()

특정 컬럼의 내용들을 1개의 셀 안에 나열하고 싶을 때 사용한다.
개별 컬럼에 대해 사용할 수도 있고, GROUP BY 후 각 그룹별로도 사용할 수 있다.

LISTAGG([합칠 컬럼명], [구분자]) WITHIN GROUP(ORDER BY [정렬 컬럼명]) 

LAG OVER, LEAD OVER

이전 또는 다음 행의 값을 가져오는 기능

  • LAG() → 이전 행(previous row) 값을 가져온다.
  • LEAD() → 다음 행(next row) 값을 가져온다.
  • 둘 다 OVER() 절과 함께 사용해야 한다.

📌 기본 문법

LAG(column_name, offset, default_value) OVER (PARTITION BY column1 ORDER BY column2)
LEAD(column_name, offset, default_value) OVER (PARTITION BY column1 ORDER BY column2)
  • column_name → 가져올 열(column)
  • offset → 몇 행 전/후의 값을 가져올지 (기본값: 1)
  • default_value → 참조할 행이 없을 경우 기본값 (기본값: NULL)
  • PARTITION BY → 그룹을 나누는 기준 (선택 사항)
  • ORDER BY → 행의 순서를 정하는 기준 (필수

📌 LAG() vs LEAD() 차이점 정리

함수설명
LAG(column, n)이전 n번째 행 값 가져오기
LEAD(column, n)다음 n번째 행 값 가져오기

0개의 댓글