MySQL WITH
MySQL์ WITH ํค์๋๋ฅผ ํ์ฉํด ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๊น๋ํ๊ณ ํจ์จ์ ์ผ๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์๋ด
๋๋ค. ์์ ํ
์ด๋ธ์ฒ๋ผ ์๋ธ์ฟผ๋ฆฌ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํด ์ฌ์ฌ์ฉํ๋ ๊ธฐ๋ฒ๊ณผ, ์ด๋ฅผ ํ์ฉํ ๋ค์ํ ์ค์ ์์ ๋ฅผ ํตํด ์ดํด๋ฅผ ๋์ต๋๋ค.
๋ชฉ์ฐจ
1.
2.
3.
4.
5.
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์ ์ฌ์ฉ๋ฒ์ ์ฝ๊ฒ ์ตํ๊ณ , ์ค๋ฌด์ ๋ฐ๋ก ์ ์ฉํด๋ณด์ธ์!