WITH ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)

2025. 2. 24. 21:47ยท๐Ÿ“ SQL/๐Ÿ“
Common Table Expression(CTE)๋ฅผ ์ •์˜ํ•  ๋•Œ ์‚ฌ์šฉ
CTE๋Š” ์ž„์‹œ ๊ฒฐ๊ณผ ์ง‘ํ•ฉ์œผ๋กœ, ํ•ด๋‹น ์ฟผ๋ฆฌ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๋ณต์žกํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋” ์ฝ๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค
WITH High_Salary AS ( -- High_Salary : CTE ์ด๋ฆ„
  SELECT name, salary
  FROM employees -- employees ํ…Œ์ด๋ธ”์—์„œ
  WHERE salary > 5000 -- salary๊ฐ€ 5000 ์ด์ƒ์ธ ์ง์› ๋ชฉ๋ก์„ ์ž„์‹œ ์ €์žฅ
)

-- SELECT๋ฌธ์—์„œ High_Salary๋ฅผ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์‚ฌ์šฉ
SELECT name FROM High_Salary
WITH Department_Sales As ( -- Department_Sales : ๋ถ€์„œ๋ณ„ ๋งค์ถœ ํ•ฉ๊ณ„ ๊ณ„์‚ฐ
  SELECT dapartment, SUM(sales) AS total_sales
  FROM sales_data
  GROUP BY department
), High_Sales AS ( -- High_Sales : ๋งค์ถœ์ด 10000 ์ด์ƒ์ธ ๋ถ€์„œ๋งŒ ์ถ”์ถœ
  SELECT department
  FROM Department_Sales
  WHERE total_sales > 10000
)

SELECT department FROM High_Sales

 

 

RECURSIVE CTE (์žฌ๊ท€์  CTE)

์ž๊ธฐ์ž์‹ ์„ ์ฐธ์กฐํ•˜์—ฌ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” CTE
๋ฐ˜๋ณต์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋‚˜ ๊ณ„์ธตํ˜• ๋ฐ์ดํ„ฐ(ํŠธ๋ฆฌ๊ตฌ์กฐ)๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‚ฌ์šฉ
-- 0๋ถ€ํ„ฐ 9๊นŒ์ง€ ์ˆซ์ž ์ถœ๋ ฅ
WITH RECURSIVE numbers AS (
  SELECT 0 AS num -- ์‹œ์ž‘์ (Anchor Member)
  UNION ALL
  SELECT num + 1 -- ์žฌ๊ท€ ํ˜ธ์ถœ(Recursive Member) : 1์”ฉ ์ฆ๊ฐ€
  FROM numbers
  WHERE num < 9 -- ์ข…๋ฃŒ ์กฐ๊ฑด
)

SELECT num FROM numbers;
ํ•„์ˆ˜ ์ž‘์„ฑ
RECURSIVE ํ‚ค์›Œ๋“œ : WITH RECURSIVE๋ฅผ ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉํ•ด์•ผ ์ž๊ธฐ ์ž์‹  ์ฐธ์กฐ ๊ฐ€๋Šฅ
Anchor Member : ์žฌ๊ท€์˜ ์‹œ์ž‘์ ์ด๋ฉฐ, ํ•œ ๋ฒˆ๋งŒ ์‹คํ–‰, ์ดˆ๊ธฐ ์ƒํƒœ ์ •์˜
UNION ALL : Anchor Member์™€ Recursive Member๋ฅผ ์—ฐ๊ฒฐ (์ค‘๋ณต ์ œ๊ฑฐ๊ฐ€ ํ•„์š”ํ•  ๋•Œ๋Š” UNION)
Recursive Member : ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœ, ์ข…๋ฃŒ ์กฐ๊ฑด ํ•„์ˆ˜ ํฌํ•จ
๋”๋ณด๊ธฐ

์ฃผ์˜ ์‚ฌํ•ญ

1. ์ข…๋ฃŒ ์กฐ๊ฑด ํ•„์ˆ˜ : ์—†์œผ๋ฉด ๋ฌดํ•œ ๋ฃจํ”„์— ๋น ์ ธ ์„œ๋ฒ„๊ฐ€ ๋ฉˆ์ถœ ์ˆ˜ ์žˆ๋‹ค

2. ๋ฌดํ•œ ๋ฃจํ”„ ๋ฐฉ์ง€ : MySQL์—๋Š” ์ตœ๋Œ€ ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ์„ค์ •๋˜์–ด ์žˆ๋‹ค (๊ธฐ๋ณธ๊ฐ’ 1000, SET max_recursion_depth๋กœ ์กฐ์ • ๊ฐ€๋Šฅ)

3. ์žฌ๊ท€ ํ˜ธ์ถœ ํšŸ์ˆ˜ ์ œํ•œ : ๋„ˆ๋ฌด ๊นŠ๊ฑฐ๋‚˜ ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ → ํ•„ํ„ฐ๋ง๊ณผ ์กฐ๊ฑด๋ฌธ์„ ํ™œ์šฉํ•ด ๋ถˆํ•„์š”ํ•œ ์žฌ๊ท€ ํ˜ธ์ถœ ๋ฐฉ์ง€

4. UNION ALL: ์ค‘๋ณต ํฌํ•จ(๋น ๋ฆ„) / UNION: ์ค‘๋ณต ์ œ๊ฑฐ(๋А๋ฆผ)

 

๋ฐ˜์‘ํ˜•

'๐Ÿ“ SQL > ๐Ÿ“' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

COUNT  (0) 2025.03.14
๋น„ํŠธ์—ฐ์‚ฐ์ž  (0) 2025.03.07
๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜ CAST / CONVERT  (0) 2025.02.23
MAX()์™€ LIMIT 1  (0) 2025.02.22
LIKE / REGEXP  (0) 2025.02.20
'๐Ÿ“ SQL/๐Ÿ“' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • COUNT
  • ๋น„ํŠธ์—ฐ์‚ฐ์ž
  • ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜ CAST / CONVERT
  • MAX()์™€ LIMIT 1
leee
leee
  • leee
    LEE
    leee
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ์นดํ…Œ๊ณ ๋ฆฌ
      • ๐Ÿ“ QA
        • Test
        • Lecture
      • ๐Ÿ“ SQL
        • ๐Ÿ“
      • ๐Ÿ“ Spring
        • Lecture
        • Error
      • ๐Ÿ“ Github
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ๐Ÿ 
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    ์ƒ์„ฑ์ž์ฃผ์ž…
    API Testing
    API test
    shift_์—ฐ์‚ฐ์ž
    mysql_๋ฐ์ดํ„ฐํƒ€์ž…๋ณ€ํ™˜
    mysql_์—ฐ์‚ฐ์ž
    SQL_Join
    DI ์ปจํ…Œ์ด๋„ˆ
    mysql_join
    Postman
    AppConfig
    MySQL
    mismatch
    API ์ž๋™ํ™” ํ…Œ์ŠคํŠธ
    api ํ…Œ์ŠคํŠธ
    ๊นƒํ—ˆ๋ธŒ ์ธํ…”๋ฆฌ์ œ์ด ์—ฐ๋™ ํ•ด์ œ
    ํฌ์ŠคํŠธ๋งจ
    mysql_๊ธฐ๊ฐ„_๊ฒ€์ƒ‰
    ์Šคํ”„๋ง ๊ฐ์ฒด์ง€ํ–ฅ
    COUNT(*)
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.5
leee
WITH ๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”