-
SQL - With - CTESQL 정리 2024. 4. 18. 20:01
CTE - Common Table Expression : 공통 테이블 표현식
공통 테이블 표현식 - IBM Documentation
뭔진 모르겠지만 예뻐서 넣음 /이젠 아는척 할 수 있음WITH REVENUE_PER_USER AS ( SELECT USER_ID, SUM(AMOUNT) AS TOTAL_REVENUE FROM TRANSACTIONS GROUP BY USER_ID ) SELECT USER_ID, TOTAL_REVENUE FROM REVENUE_PER_USER WHERE TOTAL_REVENUE > 1000;
괄호 뒤의 fullselect 의 from절에 사용 가능한 table의 순환 호출을 정의할 수 있도록 허용하는 표현
+ 두 개 이상의 공통 테이블 표현식이 동일한 명령문에 정의된 경우 공통 테이블 표현식 간의 순환 참조가 허용됩니다(SQLSTATE 42835). dt1이 dt2를 참조하고 dt2가 dt1을 참조하도록 두 개의 공통 테이블 표현식 dt1과 dt2가 작성된 경우 순환 참조가 발생합니다. (?)
->순환 참조가 가능하다면 만약 수식계산이 걸린다면 중복 적용되서 꼬일 것 같다.
더보기- 뷰 작성 방지를 위해: 특정 상황에서는 뷰를 사용하지 않고도 원하는 결과를 얻을 수 있습니다. 이때 CTE를 사용하여 뷰 대신에 필요한 데이터를 쿼리할 수 있습니다.
- 비결정이거나 외부 조치가 있는 스칼라 subselect 또는 함수에서 파생된 컬럼으로 그룹화를 가능하게 하기 위해: 스칼라 서브쿼리나 함수에서 파생된 컬럼을 사용하여 그룹화를 해야하는 경우, CTE를 사용하여 그 결과를 재사용할 수 있습니다.
- 필수 결과 테이블이 호스트 변수를 기반으로 하는 경우: 호스트 변수에 따라 결과가 달라지는 경우, 이를 처리하기 위해 CTE를 사용할 수 있습니다.
- 동일한 결과 테이블을 fullselect에서 공유해야 하는 경우: 동일한 결과 테이블을 여러 쿼리에서 사용해야 할 때 CTE를 사용하여 중복을 피할 수 있습니다.
- 재귀를 사용하여 결과가 파생되어야 하는 경우: 재귀적인 구조를 갖는 데이터를 처리할 때 CTE를 사용하여 재귀 쿼리를 구현할 수 있습니다.
- 다중 SQL 데이터 변경 명령문을 쿼리 내에서 처리해야 하는 경우: 여러 데이터 변경 명령을 하나의 쿼리에서 실행해야 할 때 CTE를 사용할 수 있습니다.
- 뷰(View): 뷰는 하나 이상의 테이블에서 데이터의 가상 집합을 나타내는 쿼리 결과입니다. 뷰는 저장된 쿼리를 가지고 있으며, 필요할 때마다 그 결과를 가져옵니다.
- 비결정적(non-deterministic): 비결정적인 함수나 서브쿼리는 매번 실행될 때마다 다른 결과를 반환할 수 있습니다. 예를 들어, 현재 시간을 반환하는 함수가 비결정적입니다.
- 스칼라 서브쿼리(scalar subquery): 스칼라 서브쿼리는 단일 값을 반환하는 서브쿼리입니다. 즉, 서브쿼리의 결과가 하나의 행과 열로 구성됩니다.
- 그룹화(Grouping): 그룹화는 데이터를 특정 기준에 따라 그룹으로 나누는 것을 의미합니다. 집계 함수를 사용하여 각 그룹에 대한 요약 정보를 생성할 수 있습니다.
- 호스트 변수(Host Variable): 호스트 변수는 프로그램에서 데이터베이스에 바인딩할 수 있는 변수를 의미합니다. 일반적으로 SQL 문장이 실행될 때 호스트 변수에 저장된 값을 사용하여 데이터베이스 작업을 수행합니다.
- 재귀(Recursion): 재귀는 함수나 프로시저 내에서 자기 자신을 호출하는 것을 의미합니다. SQL에서는 재귀적인 쿼리를 사용하여 트리 구조와 같은 데이터를 처리할 수 있습니다.
- 데이터 변경 명령문(Data Change Statement): 데이터 변경 명령문은 데이터베이스의 내용을 변경하는 SQL 문장을 의미합니다. 주로 INSERT, UPDATE, DELETE 문장을 포함합니다.
- 쿼리(Query): 쿼리는 데이터베이스에서 정보를 검색하거나 조작하기 위해 사용되는 명령어입니다. 주로 SELECT 문장을 사용하여 데이터를 검색하고, INSERT, UPDATE, DELETE 문장을 사용하여 데이터를 조작합니다.
이내용은 IBM DB2 라고 따로 존재하는 것 같다.
SQL은 역시
MySQL :: MySQL 8.0 Reference Manual :: 15.2.20 WITH (Common Table Expressions)
WITH RECURSIVE cte (n) AS ( SELECT 1 UNION ALL SELECT n + 1 FROM cte WHERE n < 5 ) SELECT * FROM cte;
뭔가 뭐가 있는거 같은데 모르겠다
아직 알고싶지않다
심연은 그대를 들여다 보리라
'SQL 정리' 카테고리의 다른 글
SQL - UNION (0) 2024.04.23 SQL - group by 연산자 (0) 2024.04.22 SQL - ' ' / " " / ` ` (0) 2024.04.18 SQL - field vs column (0) 2024.04.09 SQL - datediff, 대소비교 (0) 2024.04.05