ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL - With - CTE
    SQL 정리 2024. 4. 18. 20:01

    CTE - Common Table Expression : 공통 테이블 표현식

    공통 테이블 표현식 - IBM Documentation

     

    공통 테이블 표현식

    공통 테이블 표현식은 뒤에 오는 fullselect의 FROM절에 테이블 이름으로 지정할 수 있는 table-name을 사용하여 결과 테이블을 정의할 수 있도록 허용합니다. 단일 WITH 키워드를 따라 다중 공통 테이블

    www.ibm.com

    공통 테이블 표현식 은 뒤에 오는 fullselect의 FROM절에 테이블 이름으로 지정할 수 있는  table-name 을 사용하여 결과 테이블을 정의할 수 있도록 허용합니다.

    뭔진 모르겠지만 예뻐서 넣음 /이젠 아는척 할 수 있음

    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가 작성된 경우 순환 참조가 발생합니다. (?)

    ->순환 참조가 가능하다면 만약 수식계산이 걸린다면 중복 적용되서 꼬일 것 같다.

    더보기
    1. 뷰 작성 방지를 위해: 특정 상황에서는 뷰를 사용하지 않고도 원하는 결과를 얻을 수 있습니다. 이때 CTE를 사용하여 뷰 대신에 필요한 데이터를 쿼리할 수 있습니다.
    2. 비결정이거나 외부 조치가 있는 스칼라 subselect 또는 함수에서 파생된 컬럼으로 그룹화를 가능하게 하기 위해: 스칼라 서브쿼리나 함수에서 파생된 컬럼을 사용하여 그룹화를 해야하는 경우, CTE를 사용하여 그 결과를 재사용할 수 있습니다.
    3. 필수 결과 테이블이 호스트 변수를 기반으로 하는 경우: 호스트 변수에 따라 결과가 달라지는 경우, 이를 처리하기 위해 CTE를 사용할 수 있습니다.
    4. 동일한 결과 테이블을 fullselect에서 공유해야 하는 경우: 동일한 결과 테이블을 여러 쿼리에서 사용해야 할 때 CTE를 사용하여 중복을 피할 수 있습니다.
    5. 재귀를 사용하여 결과가 파생되어야 하는 경우: 재귀적인 구조를 갖는 데이터를 처리할 때 CTE를 사용하여 재귀 쿼리를 구현할 수 있습니다.
    6. 다중 SQL 데이터 변경 명령문을 쿼리 내에서 처리해야 하는 경우: 여러 데이터 변경 명령을 하나의 쿼리에서 실행해야 할 때 CTE를 사용할 수 있습니다.
     
     
    1. 뷰(View): 뷰는 하나 이상의 테이블에서 데이터의 가상 집합을 나타내는 쿼리 결과입니다. 뷰는 저장된 쿼리를 가지고 있으며, 필요할 때마다 그 결과를 가져옵니다.
    2. 비결정적(non-deterministic): 비결정적인 함수나 서브쿼리는 매번 실행될 때마다 다른 결과를 반환할 수 있습니다. 예를 들어, 현재 시간을 반환하는 함수가 비결정적입니다.
    3. 스칼라 서브쿼리(scalar subquery): 스칼라 서브쿼리는 단일 값을 반환하는 서브쿼리입니다. 즉, 서브쿼리의 결과가 하나의 행과 열로 구성됩니다.
    4. 그룹화(Grouping): 그룹화는 데이터를 특정 기준에 따라 그룹으로 나누는 것을 의미합니다. 집계 함수를 사용하여 각 그룹에 대한 요약 정보를 생성할 수 있습니다.
    5. 호스트 변수(Host Variable): 호스트 변수는 프로그램에서 데이터베이스에 바인딩할 수 있는 변수를 의미합니다. 일반적으로 SQL 문장이 실행될 때 호스트 변수에 저장된 값을 사용하여 데이터베이스 작업을 수행합니다.
    6. 재귀(Recursion): 재귀는 함수나 프로시저 내에서 자기 자신을 호출하는 것을 의미합니다. SQL에서는 재귀적인 쿼리를 사용하여 트리 구조와 같은 데이터를 처리할 수 있습니다.
    7. 데이터 변경 명령문(Data Change Statement): 데이터 변경 명령문은 데이터베이스의 내용을 변경하는 SQL 문장을 의미합니다. 주로 INSERT, UPDATE, DELETE 문장을 포함합니다.
    8. 쿼리(Query): 쿼리는 데이터베이스에서 정보를 검색하거나 조작하기 위해 사용되는 명령어입니다. 주로 SELECT 문장을 사용하여 데이터를 검색하고, INSERT, UPDATE, DELETE 문장을 사용하여 데이터를 조작합니다.

    이내용은 IBM DB2 라고 따로 존재하는 것 같다. 

     

    SQL은 역시

    MySQL :: MySQL 8.0 Reference Manual :: 15.2.20 WITH (Common Table Expressions)

     

    MySQL :: MySQL 8.0 Reference Manual :: 15.2.20 WITH (Common Table Expressions)

    15.2.20 WITH (Common Table Expressions) A common table expression (CTE) is a named temporary result set that exists within the scope of a single statement and that can be referred to later within that statement, possibly multiple times. The following disc

    dev.mysql.com

     

    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
Designed by Tistory.