재귀 테이블을 왜 사용하는지 생각해보았다.
1. 임시 테이블로써의 역할
2. 재귀의 특성을 활용해서 원하는 값으로 채워 넣은 테이블 생성
+ ...
아직은 이 정도 밖에는 모르겠다.
우선 재귀 테이블을 사용하는 방법은 생각보다 간단했다.
WITH RECURSIVE cte as (
SELECT 0 as HOUR // 0을 초깃값으로 지정하고 HOUR라는 별칭을 붙임
UNION ALL // 생성되는 모든 쿼리문을 합침
SELECT HOUR + 1 FROM cte // 재귀의 실행문과 같은 역할. HOUR의 값을 1씩 증가시킨다
WHERE HOUR < 24 // 재귀의 실행 조건. HOUR가 24보다 작을 때 까지. 실행하면 HOUR의 값이 24에서 멈추게 된다.
)
SELECT HOUR from cte;
-- 결과값
HOUR
0
1
...
23
24
그리고 테이블의 이름이 CTE라는 것을 알 수 있는데
CTE는 Common Table Expression 이라는 의미를 가지고 있다. CTE는 SQL에서 하나의 표현법이라고 할 수 있다. CTE는 서브쿼리로 쓰이는 파생테이블(derived table)과 비슷한 개념으로 사용된다고 한다. CTE와 비교대상으로는 VIEW가 있다. VIEW는 만들기 위해 권한이 필요하고 사전에 정의를 해야한다. 반면, CTE는 권한이 필요 없고 하나의 쿼리문이 끝날때까지만 지속되는 일회성 테이블이다. CTE는 주로 복잡한 쿼리문에서 코드의 가독성과 재사용성을 위해 파생테이블 대신 사용하기에 유용하다고 한다.
'DB' 카테고리의 다른 글
클러스터링 인덱스 vs 논-클러스터링 인덱스 (1) | 2022.10.05 |
---|---|
DB 특징, 언어, 카티션 곱 (0) | 2022.10.03 |
UNIQUE 제약으로 중복 검사해도 될까? (0) | 2022.09.08 |