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
반응형
'프로그래밍 언어 ( Programming Language ) > SQL' 카테고리의 다른 글
[SQL][Oracle] 계정 생성, 권한 부여 (0) | 2022.07.19 |
---|---|
[SQL][Oracle] 데이터 타입 ( Data Type ) (0) | 2022.01.12 |
[SQL][DBMS] Oracle DB 와 MySQL 의 차이 - 문자열 부호, 대소문자 구분 등 (0) | 2022.01.07 |
[SQL][MySQL] 복합문 ( Compound Statement Syntax ) - 흐름 제어문 ( CASE, IF, LOOP 등 ), 선언문 ( DECLARE ), BEGIN ... END (0) | 2022.01.05 |
[SQL] 조인 ( Join ) (0) | 2022.01.05 |