Search

MySQL WITH

MySQL WITH

MySQL์˜ WITH ํ‚ค์›Œ๋“œ๋ฅผ ํ™œ์šฉํ•ด ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์›Œ๋ด…๋‹ˆ๋‹ค. ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ์žฌ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ฒ•๊ณผ, ์ด๋ฅผ ํ™œ์šฉํ•œ ๋‹ค์–‘ํ•œ ์‹ค์ „ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์ดํ•ด๋ฅผ ๋•์Šต๋‹ˆ๋‹ค.

๋ชฉ์ฐจ

1.
WITH ํ‚ค์›Œ๋“œ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• [00:00:17]
2.
๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ ์˜ˆ์ œ [00:02:04]
3.
์ƒ์‚ฌ์™€ ์‚ฌ์› ๊ด€๊ณ„ ์กฐํšŒ ์˜ˆ์ œ [00:09:47]
4.
์ž…์‚ฌ ๋‚ ์งœ๋ณ„ ์‚ฌ์›์ˆ˜ ์กฐํšŒ ์˜ˆ์ œ [00:12:24]
5.
๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ [00:14:28]

WITH ํ‚ค์›Œ๋“œ ๊ฐœ๋…๊ณผ ๊ธฐ๋ณธ ๋ฌธ๋ฒ• [00:00:17]

โ€ข
WITH๋Š” SQL์—์„œ **๊ณตํ†ต ํ…Œ์ด๋ธ” ํ‘œํ˜„์‹(CTE, Common Table Expression)**์„ ์ •์˜ํ•˜๋Š” ํ‚ค์›Œ๋“œ์ž…๋‹ˆ๋‹ค.
โ€ข
์‰ฝ๊ฒŒ ๋งํ•ด, ๋ณต์žกํ•œ ์ฟผ๋ฆฌ ์•ˆ์— ๋“ค์–ด๊ฐ€๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ด๋ฆ„ ๋ถ™์ธ ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ๋งŒ๋“ค์–ด์„œ, ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
โ€ข
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ฟผ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ์ฝ๊ธฐ ์‰ฝ๊ณ  ๊ด€๋ฆฌํ•˜๊ธฐ ํŽธํ•ด์ง‘๋‹ˆ๋‹ค.
โ€ข
๊ธฐ๋ณธ ๋ฌธ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:
WITH ์ž„์‹œํ…Œ์ด๋ธ”๋ช… AS ( -- ์„œ๋ธŒ์ฟผ๋ฆฌ ์ž‘์„ฑ ) SELECT * FROM ์ž„์‹œํ…Œ์ด๋ธ”๋ช…;
SQL
๋ณต์‚ฌ
โ€ข
์˜ˆ๋ฅผ ๋“ค์–ด, 500์ค„์งœ๋ฆฌ ๋ณต์žกํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ WITH์ ˆ์— ๋„ฃ์œผ๋ฉด ๋ฉ”์ธ ์ฟผ๋ฆฌ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง‘๋‹ˆ๋‹ค.

๋ถ€์„œ๋ณ„ ์‚ฌ์›์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ ์˜ˆ์ œ [00:02:04]

โ€ข
๋ชฉํ‘œ: ๊ฐ ๋ถ€์„œ๋ณ„๋กœ ์‚ฌ์› ์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ๋ฅผ ๋ฐ›๋Š” ์ง์› ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ์กฐํšŒํ•˜๊ธฐ
โ€ข
์‚ฌ์šฉ ๋ฐ์ดํ„ฐ: MySQL์˜ ์ƒ˜ํ”Œ ์Šคํ‚ค๋งˆ์ธย employeesย ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ย dept_emp(๋ถ€์„œ ์ด๋ ฅ ํ…Œ์ด๋ธ”) ํ™œ์šฉ
โ€ข
ํ•ต์‹ฌ ์•„์ด๋””์–ด:
1.
๋ถ€์„œ๋ณ„ ํ˜„์žฌ ๊ทผ๋ฌด ์ค‘์ธ ์‚ฌ์› ์ˆ˜ ๊ตฌํ•˜๊ธฐ (ํ˜„์žฌ ๋‚ ์งœ ๊ธฐ์ค€์œผ๋กœ ๋ถ€์„œ์— ์†ํ•œ ์‚ฌ์›๋งŒ ์นด์šดํŠธ)
2.
๋ถ€์„œ๋ณ„ ์ตœ๊ณ  ๊ธ‰์—ฌ ๊ตฌํ•˜๊ธฐ (MAX()ย ํ•จ์ˆ˜ ์‚ฌ์šฉ)
3.
WITH์ ˆ๋กœ ๊ฐ๊ฐ ์ž„์‹œ ํ…Œ์ด๋ธ”(DPT_COUNT,ย DPT_SALARY) ์ •์˜ ํ›„ ์กฐ์ธํ•˜์—ฌ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์ •๋ณด์™€ ์‚ฌ์› ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์— ์กฐํšŒ
โ€ข
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ณต์žกํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์“ฐ์ง€ ์•Š๊ณ , ์ด๋ฆ„ ๋ถ™์ธ ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ํ™œ์šฉํ•ด ๊ฐ€๋…์„ฑ๋„ ๋†’์ด๊ณ  ์„ฑ๋Šฅ๋„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ƒ์‚ฌ์™€ ์‚ฌ์› ๊ด€๊ณ„ ์กฐํšŒ ์˜ˆ์ œ [00:09:47]

โ€ข
๋ชฉํ‘œ: ์‚ฌ์›๊ณผ ๊ทธ๋“ค์˜ ์ƒ์‚ฌ(๋งค๋‹ˆ์ €) ์ •๋ณด๋ฅผ ํ•œ ํ–‰์—์„œ ์กฐํšŒํ•˜๊ธฐ
โ€ข
๋ฐฉ๋ฒ•:
โ—ฆ
employeesย ํ…Œ์ด๋ธ”๊ณผย departmentsย ํ…Œ์ด๋ธ”์˜ ๋งค๋‹ˆ์ € ์ •๋ณด๋ฅผ ์กฐ์ธ
โ—ฆ
WITH์ ˆ์—์„œ ์ƒ์‚ฌ-์‚ฌ์› ๊ด€๊ณ„๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”(EMP_MANAGER)๋กœ ์ •์˜
โ—ฆ
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์ด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์›๊ณผ ๋งค๋‹ˆ์ € ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ์กฐํšŒ
โ€ข
์˜ˆ์‹œ:
โ—ฆ
๋ถ€์„œ D1์˜ ์‚ฌ์›๊ณผ ๊ทธ ๋ถ€์„œ ๋งค๋‹ˆ์ €๊ฐ€ ๋ˆ„๊ตฐ์ง€ ํ•œ๋ˆˆ์— ํ™•์ธ ๊ฐ€๋Šฅ
โ€ข
์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์›-์ƒ์‚ฌ ๊ด€๊ณ„ ๊ฐ™์€ ๋ณต์žกํ•œ ์กฐ์ธ์„ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ž…์‚ฌ ๋‚ ์งœ๋ณ„ ์‚ฌ์›์ˆ˜ ์กฐํšŒ ์˜ˆ์ œ [00:12:24]

โ€ข
๋ชฉํ‘œ: ์ž…์‚ฌ ๋‚ ์งœ๋ณ„๋กœ ๋ช‡ ๋ช…์˜ ์‚ฌ์›์ด ์ž…์‚ฌํ–ˆ๋Š”์ง€ ์ง‘๊ณ„ํ•˜๊ธฐ
โ€ข
๋ฐฉ๋ฒ•:
โ—ฆ
hire_date(์ž…์‚ฌ์ผ)๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์‚ฌ์› ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ WITH์ ˆ์— ์ž„์‹œ ํ…Œ์ด๋ธ”(HIRED_COUNT)๋กœ ์ •์˜
โ—ฆ
๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์ด ์ž„์‹œ ํ…Œ์ด๋ธ”์„ ๋ถˆ๋Ÿฌ์™€ ์ž…์‚ฌ์ผ์ž๋ณ„ ์‚ฌ์› ์ˆ˜๋ฅผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด ์กฐํšŒ
โ€ข
๊ฒฐ๊ณผ ์˜ˆ์‹œ:
โ—ฆ
1985๋…„ 6์›” 20์ผ์— 132๋ช…์ด ์ž…์‚ฌํ•˜๋Š” ๋“ฑ, ๋Œ€๊ทœ๋ชจ ๊ณต๊ฐœ ์ฑ„์šฉ์ผ์„ ์‰ฝ๊ฒŒ ํŒŒ์•… ๊ฐ€๋Šฅ
โ€ข
์ด์ฒ˜๋Ÿผ WITH์ ˆ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ง‘๊ณ„ ์ฟผ๋ฆฌ๋„ ๊น”๋”ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ [00:14:28]

โ€ข
MySQL์˜ WITH ํ‚ค์›Œ๋“œ๋Š” ๋ณต์žกํ•œ ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ์ž„์‹œ ํ…Œ์ด๋ธ”์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์ •์˜ํ•ด ๋ฉ”์ธ ์ฟผ๋ฆฌ์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค๋‹ˆ๋‹ค.
โ€ข
์ด๋ฅผ ํ†ตํ•ด ์ฟผ๋ฆฌ ๊ฐ€๋…์„ฑ์ด ๋†’์•„์ง€๊ณ  ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›Œ์ง‘๋‹ˆ๋‹ค.
โ€ข
๋ถ€์„œ๋ณ„ ์‚ฌ์› ์ˆ˜์™€ ์ตœ๊ณ  ๊ธ‰์—ฌ ์ง์› ์กฐํšŒ, ์‚ฌ์›-์ƒ์‚ฌ ๊ด€๊ณ„, ์ž…์‚ฌ ๋‚ ์งœ๋ณ„ ์‚ฌ์› ์ˆ˜ ์ง‘๊ณ„ ๋“ฑ ๋‹ค์–‘ํ•œ ์‹ค์ „ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด WITH์ ˆ ํ™œ์šฉ๋ฒ•์„ ์ตํ˜”์Šต๋‹ˆ๋‹ค.
โ€ข
๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ์ž‘์—…์ด ๋งŽ์„ ๋•Œ ๊ผญ ๊ธฐ์–ตํ•ด๋‘๋ฉด ์ข‹์€ ๊ฐ•๋ ฅํ•œ SQL ๊ธฐ๋ฒ•์ž…๋‹ˆ๋‹ค!
์ด ์˜์ƒ์œผ๋กœ MySQL์—์„œ ๋ณต์žกํ•œ ์ฟผ๋ฆฌ๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๋Š” WITH์ ˆ ์‚ฌ์šฉ๋ฒ•์„ ์‰ฝ๊ฒŒ ์ตํžˆ๊ณ , ์‹ค๋ฌด์— ๋ฐ”๋กœ ์ ์šฉํ•ด๋ณด์„ธ์š”!