[SQL][MySQL] DML - WITH

728x90

 

□  공통 테이블 표현식  --  WITH  ( CTE  :  Common Table Expressions )

 

  -  이름 있는 임시 결과 집합

  -  단일 문 내에 존재하고, 그 안에서 여러 번 참조할 수 있음
   ( CTE 이름을 참조하여 해당 CTE 결과 집합에 접근 가능 )

  -  DML 구문의 옵션

  -  재귀적으로 자신을 참조할 수 있음

 

WITH  [ RECURSIVE ]
        cte_name  [ ( col_name [, col_name] ... ) ]  AS  ( subquery )
        [ , cte_name [ ( col_name [, col_name] ...) ]  AS  ( subquery ) ] ...

 

ex)

WITH
  cte1 AS ( SELECT a, b FROM table1 ),
  cte2 AS ( SELECT c, d FROM table2 )
SELECT b, d FROM cte1 JOIN cte2
WHERE cte1.a = cte2.c;

ex)

WITH cte (col1, col2) AS
(
  SELECT 1, 2
  UNION ALL
  SELECT 3, 4
)
SELECT col1, col2 FROM cte;

ex)

WITH cte AS
(
  SELECT 1 AS col1, 2 AS col2
  UNION ALL
  SELECT 3, 4
)
SELECT col1, col2 FROM cte;

 

 

□  재귀적 공통 테이블 표현식 ( Recursive Common Table Expressions )

 

  -  재귀적 CTE의 일반적인 응용 프로그램에는 계층 또는 트리 구조 데이터의 계열 생성 및 탐색 포함

 

WITH [RECURSIVE] CTE_name AS
	(
		SELECT query (Non Recursive query or the Base query)
			UNION [ALL]
		SELECT query (Recursive query using CTE_name [with  a termination condition])
	)
SELECT * FROM CTE_name;

 

ex)

WITH RECURSIVE cte (n) AS
(
  SELECT 1 [AS n]
  UNION ALL
  SELECT n + 1 FROM cte WHERE n < 5
)
SELECT * FROM cte;
+------+
| n    |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+

 

 

https://dev.mysql.com/doc/refman/8.0/en/with.html

 

 

반응형