PostgreSQL CTE(공통 테이블 표현식)를 사용하여 복잡한 쿼리를 단순화하는 방법

 

공통 테이블 표현식이 포함하는 다른 SQL 문 내에서 참조 할 수있는 임시 결과 집합 SELECT, INSERT, UPDATE또는 DELETE.

공통 테이블 표현식은 쿼리 실행 중에만 존재한다는 점에서 일시적입니다.

 

WITH cte_name (column_list) AS (
    CTE_query_definition 
)
statement;
  • 먼저 선택적 열 목록 다음에 CTE의 이름을 지정합니다.
  • 둘째, WITH절의 본문 내에서 결과 집합을 반환하는 쿼리를 지정합니다. CTE 이름 뒤에 열 목록을 명시적으로 지정하지 않으면 의 선택 목록 CTE_query_definition이 CTE의 열 목록이 됩니다.
  • 셋째는 statement에서 테이블이나 뷰처럼 CTE를 사용할 수있다 SELECT, INSERT, UPDATE, 또는 DELETE.
반응형

 


1) cte 예제

WITH cte_film AS (
    SELECT 
        film_id, 
        title,
        (CASE 
            WHEN length < 30 THEN 'Short'
            WHEN length < 90 THEN 'Medium'
            ELSE 'Long'
        END) length    
    FROM
        film
)
SELECT
    film_id,
    title,
    length
FROM 
    cte_film
WHERE
    length = 'Long'
ORDER BY 
    title;

공통 테이블 표현식에는 두 부분이 있습니다.

  • 첫 번째 cte_film 부분은 CTE의 이름을 정의합니다.
  • 두 번째  cte_film부분은 SELECT표현식을 행으로 채우는 명령문을 정의합니다 .

 

2) cte join 예제

WITH cte_rental AS (
    SELECT staff_id,
        COUNT(rental_id) rental_count
    FROM   rental
    GROUP  BY staff_id
)
SELECT s.staff_id,
    first_name,
    last_name,
    rental_count
FROM staff s
    INNER JOIN cte_rental USING (staff_id);


다음은 공통 테이블 표현식 또는 CTE를 사용할 때의 몇 가지 이점입니다.

  • 복잡한 쿼리의 가독성을 향상시킵니다. CTE를 사용하여 보다 체계적이고 읽기 쉬운 방식으로 복잡한 쿼리를 구성합니다.
  • 재귀 쿼리를 생성하는 기능. 재귀 쿼리 는 자신을 참조하는 쿼리입니다. 재귀 쿼리는 조직도 또는 BOM과 같은 계층적 데이터를 쿼리할 때 유용합니다.
  • window function 과 함께 사용합니다. CTE를 창 함수와 함께 사용하여 초기 결과 집합을 만들고 다른 select 문을 사용하여 이 결과 집합을 추가로 처리할 수 있습니다.
반응형

'SW ENGINEERING > Postgres' 카테고리의 다른 글

[PostgreSQL] BASIC - Recursive Query  (0) 2021.09.03
[PostgreSQL] BASIC - EXISTS  (0) 2021.09.03
[PostgreSQL] BASIC - ALL  (0) 2021.09.03
[PostgreSQL] BASIC - ANY  (0) 2021.09.03
[PostgreSQL] BASIC - Subquery  (0) 2021.09.03
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기