
๐ WITH ์ ๊ณผ CTE(Common Table Expression)
SQL์์ WITH ์ ์ ๊ณตํต ํ
์ด๋ธ ์(CTE, Common Table Expression)์ ๋ง๋ค ๋ ์ฌ์ฉ
CTE๋ ์ผ์์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๊ฐ์์ ํ
์ด๋ธ๋ก, ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์์ฑํ๊ณ ๊ฐ๋
์ฑ์ ๋์ด๋ ๋ฐ ์ ์ฉ
โ 1. CTE ๊ธฐ๋ณธ ๊ฐ๋
CTE๋ ์๋ธ์ฟผ๋ฆฌ(ํ์ ์ฟผ๋ฆฌ)์ ๋น์ทํ์ง๋ง, ๋ ๋ช
ํํ๊ณ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅ
๐ก CTE์ ํน์ง
- ์คํ ์ ์ผ์์ ์ผ๋ก ์ ์ง๋๋ ๊ฐ์์ ํ ์ด๋ธ
- ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ ์ ์์ง๋ง ์ฟผ๋ฆฌ ์คํ ํ ์ฌ๋ผ์ง
- ์ฌ๊ท ์ฟผ๋ฆฌ(Recursive Query)๋ ๊ฐ๋ฅ
โ 2. CTE ๊ธฐ๋ณธ ๋ฌธ๋ฒ
WITH CTE_Name AS (
-- CTE ์ ์ (์กฐํํ ๋ฐ์ดํฐ)
SELECT Column1, Column2
FROM SomeTable
WHERE ์กฐ๊ฑด
)
-- CTE๋ฅผ ์ฌ์ฉํ์ฌ ์ต์ข
๊ฒฐ๊ณผ ์ถ๋ ฅ
SELECT * FROM CTE_Name;
โ WITH ๋ค์ CTE ์ด๋ฆ์ ์ง์
โ AS ๋ค์ CTE์ ํด๋นํ๋ ์๋ธ์ฟผ๋ฆฌ ์์ฑ
โ ์ดํ ๋ฉ์ธ ์ฟผ๋ฆฌ์์ CTE๋ฅผ ํ๋์ ํ
์ด๋ธ์ฒ๋ผ ํ์ฉ
โ 3. CTE ์ฌ์ฉ ์์
๐ ์์ : ๊ณ ๊ฐ ์ฃผ๋ฌธ ๋ฐ์ดํฐ ์กฐํ
๋ค์๊ณผ ๊ฐ์ ๋ ๊ฐ์ ํ ์ด๋ธ์ด ์๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.
๐ Customers ํ
์ด๋ธ
CustomerID | CustomerName |
1 | ๊ณ ๊ฐ1 |
2 | ๊ณ ๊ฐ2 |
3 | ๊ณ ๊ฐ3 |
๐ Orders ํ ์ด๋ธ
OrderID | CustomerID | OrderDate |
101 | 1 | 2023-10-01 |
102 | 2 | 2023-10-02 |
103 | 1 | 2023-10-03 |
๊ณ ๊ฐ๊ณผ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ํฉ์ณ์ ์ฃผ๋ฌธ๋ณ ๊ณ ๊ฐ ์ด๋ฆ์ ์กฐํํ๋ ์ฟผ๋ฆฌ๋ฅผ CTE๋ก ์์ฑ
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 * FROM CustomerOrders;
๐ ์คํ ๊ฒฐ๊ณผ
OrderID | CustomerName | OrderDate |
101 | ๊ณ ๊ฐ1 | 2023-10-01 |
102 | ๊ณ ๊ฐ2 | 2023-10-02 |
103 | ๊ณ ๊ฐ1 | 2023-10-03 |
โ CTE๋ฅผ ์ฌ์ฉํ๋ฉด?
- ๋ณต์กํ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๊น๋ํ๊ฒ ์ ๋ฆฌํ ์ ์์
- ์ฌ๋ฌ ๋ฒ ์ฌ์ฉํ ๊ฒฝ์ฐ, ์ค๋ณต ์ฝ๋๋ฅผ ์ค์ผ ์ ์์
- ๊ฐ๋ ์ฑ์ด ์ข์์ ธ ์ ์ง๋ณด์๊ฐ ์ฌ์์ง
โ 4. CTE์ ์ฅ์
โ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ์ฝ๊ฒ ์ ๋ฆฌ ๊ฐ๋ฅ → ์ฟผ๋ฆฌ ํ๋ฆ์ด ๋ช
ํํด์ง
โ ๊ฐ๋
์ฑ ํฅ์ → ์๋ธ์ฟผ๋ฆฌ๋ณด๋ค ์ดํดํ๊ธฐ ์ฌ์
โ ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ → ๊ฐ์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ ํ์ ์์
โ ์ฌ๊ท ์ฟผ๋ฆฌ(Recursive Query) ์ง์ → ๊ณ์ธต ๊ตฌ์กฐ ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฃฐ ๋ ์ ์ฉ
โ 5. CTE vs ์๋ธ์ฟผ๋ฆฌ ๋น๊ต
๋น๊ต ํญ๋ชฉ CTE (WITH) ์๋ธ์ฟผ๋ฆฌ (Subquery)
๊ฐ๋ ์ฑ | โ ์ข์ | โ ๋ณต์กํ ์ ์์ |
์ฌ์ฌ์ฉ์ฑ | โ ๊ฐ๋ฅ | โ ๋ถ๊ฐ๋ฅ |
์์ ํ ์ด๋ธ์ฒ๋ผ ์ฌ์ฉ | โ ๊ฐ๋ฅ | โ ๋ถ๊ฐ๋ฅ |
์ฟผ๋ฆฌ ๊ตฌ์กฐ | โ ๋ช ํํจ | โ ์ค์ฒฉ๋ ์๋ก ์ด๋ ค์์ง |
'DB > ์ฟผ๋ฆฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
MSSQL PARTITION (1) | 2023.10.10 |
---|---|
STUFF ํจ์ (0) | 2023.10.10 |
์๋์ฐํจ์ (0) | 2023.10.05 |
APPLY (0) | 2023.10.05 |
MSSQL ์ฐ์ต (0) | 2023.09.13 |