π«‘CTEλ κ³΅ν΅ ν μ΄λΈ μ (Common Table Expression)μ μ½μ΄λ‘, λ°μ΄ν°λ² μ΄μ€ 쿼리λ₯Ό λ κ°κ²°νκ³ κ°λ μ± μκ² μμ±ν μ μλλ‘ λμμ£Όλ SQLμ κΈ°λ₯μ λλ€.
μ¬μ© λ°©λ²μ μλμ κ°μ΅λλ€.
WITH temp1 (column1, column2) AS (
-- CTEμ 쿼리 μ μ
SELECT column1, column2
FROM temp2 (κΈ°μ‘΄μ μλ ν
μ΄λΈ μ¬μ©)
)
-- CTEλ₯Ό νμ©ν 쿼리
SELECT * FROM temp1;
π§μμ κ°μ κ³Όμ μ ν΅ν΄ μμλ‘ ν μ΄λΈμ λ§λ€μ΄μ μ¬μ©ν μ μμ΅λλ€.
2κ° μ΄μμ cteλ₯Ό λ§λλ λ°©λ²μ μλμ κ°μ΅λλ€.
WITH temp1 (column1, column2) AS (
-- CTEμ 쿼리 μ μ
SELECT id, user_name
FROM users
),
temp2 (column1, column2) AS (
-- CTEμ 쿼리 μ μ
SELECT id, user_name
FROM users
)
-- CTEλ₯Ό νμ©ν 쿼리
SELECT * FROM temp1,temp2;
π₯³
Recursive
λ₯Ό μ¬μ©νλ€λ©΄ μ¬κ·λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ£μ μ μμ΅λλ€. μλμ κ²½μ°λ 1λΆν° 100κΉμ§μ μ«μλ₯Ό κ°μ§λ ν μ΄λΈμ 보μ¬μ£Όλ sqlμ λλ€.
WITH RECURSIVE numbers_cte AS (
SELECT 1 AS n
UNION ALL
SELECT n + 1 FROM numbers_cte WHERE n < 100
)
SELECT n FROM numbers_cte;
select 1 as n
μ ν΅ν΄ nμ΄λΌλ 컬λΌμ μ€μ ν¨κ³Ό λμμ 1μ΄λΌλ λ°μ΄ν°λ₯Ό μ§μ΄ λ£μ΅λλ€.uninon all
μ΄νμSELECT n + 1 FROM numbers_cte WHERE n < 100
ν΅ν΄ μ¬κ·μ μΌλ‘ λ‘μ§μ μνν©λλ€. μ μ½λλ₯Ό ν΅ν΄ 1~100μ μ«μκ° n 컬λΌμ λ€μ΄κ°κ² λ©λλ€.SELECT n FROM numbers_cte
λ₯Ό ν΅ν΄ ν΄λΉ ν μ΄λΈμ κ°μ 보μ¬μ€λλ€.
π
with recursive
λ₯Ό μ¬μ©νλ€λ©΄ μμλ‘ ν μ΄λΈμ λ§λ€μ΄μ μ¬μ©ν μ μμ΄ νΈλ¦¬ν μ μ΄ μμ΅λλ€. μ μ ν λμ μ¬μ©νμλ©΄ λ κ² κ°μ΅λλ€.