๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Database/Do it! SQL ์ž…๋ฌธ

[Do it! SQL ์ž…๋ฌธ] 04-3. ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹

๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹(Common Table Expression)์€ ์ฃผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์—†๋Š” ํ…Œ์ด๋ธ”์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๋ฐ”๋กœ ๋‹ค์Œ์— ์‹คํ–‰ํ•  SELECT ๋ฌธ์—๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹์€ ๋ชฉ์ ์— ๋”ฐ๋ผ ์ผ๋ฐ˜ ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹๊ณผ ์žฌ๊ท€ ๊ณตํ†ต ํ…Œ์ด๋ธ” ์‹์œผ๋กœ ๋‚˜๋‰œ๋‹ค. 

 

์ผ๋ฐ˜ CTE

 

UNION ๋ฌธ ๊ณผ UNION ALL ๋ฌธ์œผ๋กœ CTE ๊ฒฐํ•ฉํ•˜๊ธฐ

 

INTERSECT ๋ฌธ์œผ๋กœ CTE ๊ฒฐํ•ฉํ•˜๊ธฐ

 

EXCEPT ๋ฌธ์œผ๋กœ CTE ๊ฒฐํ•ฉํ•˜๊ธฐ

 

 

์žฌ๊ท€ CTE

์žฌ๊ท€ CTE๋Š” CTE ๊ฒฐ๊ณผ๋ฅผ CTE ๋‚ด๋ถ€์˜ ์ฟผ๋ฆฌ์—์„œ ์žฌ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๋Š” ์ฟผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ์žฌ๊ท€ CTE๋Š” ์ฃผ๋กœ ๊ณ„์ธต ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. 

 

WITH [CTE ์ด๋ฆ„] ([์—ด ์ด๋ฆ„1], [์—ด ์ด๋ฆ„2]...)
AS (
	<SELECT * FROM ํ…Œ์ด๋ธ” A>        -- ์ฟผ๋ฆฌ 1 (์•ต์ปค ๋ฉค๋ฒ„)
    UNION ALL
	<SELECT * FROM ํ…Œ์ด๋ธ” B JOIN [CTE ์ด๋ฆ„]>        -- ์ฟผ๋ฆฌ 2(์žฌ๊ท€ ๋ฉค๋ฒ„)
)
SELECT * FROM [CTE ์ด๋ฆ„]

 

์žฌ๊ท€ CTE๋Š” ์ ์œผ๋„ 2๊ฐœ์˜ CTE ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์ด๋•Œ ๊ฐ ์ฟผ๋ฆฌ๋Š” ์•ต์ปค ๋ฉค๋ฒ„์™€ ์žฌ๊ท€ ๋ฉค๋ฒ„๋ฅผ ํฌํ•จํ•ด์•ผ ํ•œ๋‹ค. ์•ต์ปค ๋ฉค๋ฒ„๋Š” ์ž๊ธฐ ์ž์‹  CTE๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š๋Š” ๋ฉค๋ฒ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ฃผ์˜ํ•  ์ ์€ ์•ต์ปค ๋ฉค๋ฒ„๋Š” 1๋ฒˆ์งธ ์žฌ๊ท€ ๋ฉค๋ฒ„ ์•ž์— ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ, ์žฌ๊ท€ ๋ฉค๋ฒ„์˜ ์—ด ์ž๋ฃŒํ˜•์€ ๋ฐ˜๋“œ์‹œ ์•ต์ปค ๋ฉค๋ฒ„์˜ ์—ด ์ž๋ฃŒํ˜•๊ณผ ์ผ์น˜ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ ์•ต์ปค ๋ฉค๋ฒ„์™€ ์žฌ๊ท€ ๋ฉค๋ฒ„๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์žฌ๊ท€ CTE์˜ ์‹คํ–‰ ์ˆœ์„œ

  1. ์ตœ์ดˆ์— ์ฟผ๋ฆฌ 1์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋•Œ ์ฟผ๋ฆฌ 2์˜ ๊ธฐ๋ณธ๊ฐ’์€ 0์œผ๋กœ ์ดˆ๊ธฐํ™”๋œ๋‹ค.
  2. ์ด์–ด์„œ ์ฟผ๋ฆฌ 2๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋•Œ ์ฟผ๋ฆฌ 2์˜ ๊ธฐ๋ณธ๊ฐ’์€ 1๋งŒํผ ์ฆ๊ฐ€ํ•œ๋‹ค. ์ฟผ๋ฆฌ 1์˜ ๊ฒฐ๊ณผ ํ–‰ ์ˆ˜๋งŒํผ ์ฟผ๋ฆฌ 2์—์„œ CTE ์ด๋ฆ„์„ ์žฌ๊ท€ ํ˜ธ์ถœํ•˜๊ณ , ์ฟผ๋ฆฌ 2์˜ ๊ธฐ๋ณธ๊ฐ’์ด 1์”ฉ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ ์ฟผ๋ฆฌ 1์˜ ๊ฒฐ๊ณผ ํ–‰ ์ˆ˜๊นŒ์ง€ ๋„๋‹ฌํ•ด ๊ฒฐ๊ณผ๊ฐ€ ๋” ์—†๋‹ค๋ฉด ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ค‘๋‹จํ•œ๋‹ค.
  3. ์™ธ๋ถ€ SELECT ๋ฌธ์—์„œ ๊ณผ์ • 1, 2๋ฅผ ํ†ตํ•ด ๋งŒ๋“  CTE ๋ˆ„์  ๊ฒฐ๊ณผ๋ฅผ ๊ฒ€์ƒ‰ํ•œ๋‹ค.