WITH 임시테이블로 사용됨 SELECT * FROM CTE_Name 으로 쓰면된다
SQL 쿼리에서 WITH 절은 일반적으로 공통 테이블 식(Common Table Expression 또는 CTE)을 정의하기 위해 사용
CTE는 쿼리 내에서 임시 테이블처럼 사용되는 이름이 있는 결과 집합을 생성하는 방법 제공
구조
WITH CTE_Name (CTE_Column1, CTE_Column2, ...)
AS
(
-- CTE 정의를 포함하는 서브쿼리
SELECT ...
FROM ...
WHERE ...
)
각 요소의 역할
- CTE_Name: CTE의 이름을 지정합니다.
- (CTE_Column1, CTE_Column2, ...): 선택적으로 CTE에 포함될 열(컬럼) 목록을 정의,생략가능
- AS: CTE 정의의 시작다.
- 서브쿼리: CTE의 내용을 정의하는 서브쿼리를 제공
WITH 절을 사용하면 CTE를 정의하고 이를 메인 쿼리에서 참조할 수 있습니다..
즉, CTE를 사용하여 메인 쿼리에서 중복 코드를 줄이고 복잡한 쿼리를 더 가독성 있게 만들 수 있습니다.
여기서 제시한 코드에서는 WITH 절을 사용하여 STD라는 CTE를 정의하고 있습니다.
STD CTE는 T_STOCK_INSP 테이블에서 조건에 맞는 데이터를 선택하여 정의됩니다.
이 CTE는 나중에 메인 쿼리 내에서 사용될 수 있으며, 이를 통해 메인 쿼리가 더 간결하고 가독성이 높아질 수 있습니다.
다음은 WITH 절과 CTE를 사용하여 두 테이블의 데이터를 결합하는 예제입니다.
Customers 테이블:
CREATE TABLE Customers (
CustomerID INT,
CustomerName VARCHAR(255)
);
INSERT INTO Customers (CustomerID, CustomerName)
VALUES
(1, '고객1'),
(2, '고객2'),
(3, '고객3');
Orders 테이블:
CREATE TABLE Orders (
OrderID INT,
CustomerID INT,
OrderDate DATE
);
INSERT INTO Orders (OrderID, CustomerID, OrderDate)
VALUES
(101, 1, '2023-10-01'),
(102, 2, '2023-10-02'),
(103, 1, '2023-10-03');
Customers 테이블과 Orders 테이블을 결합하여 각 주문에 대한 고객 정보를 얻는 쿼리
WITH CustomerOrders AS (
SELECT
O.OrderID,
C.CustomerName,
O.OrderDate
FROM
Orders AS O
INNER JOIN
Customers AS C
ON
O.CustomerID = C.CustomerID
)
SELECT
OrderID,
CustomerName,
OrderDate
FROM
CustomerOrders;
위 SQL 코드에서:
- CustomerOrders CTE는 Orders 테이블과 Customers 테이블을 조인하여 주문별로 고객 정보를 결합합니다.
- 메인 쿼리에서는 CustomerOrders CTE를 참조하여 결과를 출력합니다.
결과로는 다음과 같이 각 주문에 대한 고객 정보가 결합된 결과가 출력됩니다:
OrderID | CustomerName | OrderDate
------- | ------------ | ----------
101 | 고객1 | 2023-10-01
102 | 고객2 | 2023-10-02
103 | 고객1 | 2023-10-03
CTE를 사용하면 보다 복잡한 쿼리에서도 중복 코드를 피하고 쿼리를 더 읽기 쉽게 만들 수 있습니다.
CTE는 임시 결과 집합을 만들어 쿼리를 단순화하고 가독성을 높이는 데 유용한 도구입니다.