ํ•˜์œ„ ์ฟผ๋ฆฌ๋Š” ํ…Œ์ด๋ธ”์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ์„ธ ๋ฒˆ์งธ ์˜ต์…˜์€ ํ•˜์œ„ ์ฟผ๋ฆฌ๊ฐ€ ์ „์ฒด ํ…Œ์ด๋ธ”์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

ํŠน์ • ํ…Œ์ด๋ธ”์„ ์•ฝ๊ฐ„ ์กฐ์ •ํ•˜๊ณ  ์‹ถ์€ ์ƒํ™ฉ์ด ๋งค์šฐ ์ž์ฃผ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ˆ˜์ •๋œ ํ…Œ์ด๋ธ”์„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ์กฐ์ธ(JOIN ON ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ)ํ•ฉ๋‹ˆ๋‹ค.

JOIN์œผ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id

๊ทธ๋ฆฌ๊ณ  ๊ธฐ์–ตํ•˜์‹œ๊ฒ ์ง€๋งŒ ์ž‘์—… ํ…Œ์ด๋ธ”์—๋Š” ์•„๋ฌด์—๊ฒŒ๋„ ํ• ๋‹น๋˜์ง€ ์•Š์€ ์ž‘์—…์ด ์žˆ์Šต๋‹ˆ๋‹ค. employee_id ๋Š” NULL ์ž…๋‹ˆ๋‹ค .

์ˆ˜์ •๋œ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค . ์—ฌ๊ธฐ์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ค‘๋‹จ๋œ ์ž‘์—…์„ ๊ฐ๋…(๊ทธ์˜ ID = 4)์—๊ฒŒ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด IFNULL() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค .

SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task 

๊ทธ๋ฆฌ๊ณ  ์ด ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

ID employee_id ์ด๋ฆ„ ๋งˆ๊ฐ ์‹œ๊ฐ„
1 1 ํ”„๋ŸฐํŠธ์—”๋“œ์˜ ๋ฒ„๊ทธ ์ˆ˜์ • 2022-06-01
2 2 ๋ฐฑ์—”๋“œ์˜ ๋ฒ„๊ทธ ์ˆ˜์ • 2022-06-15
์‚ผ 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค 2022-07-01
4 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค 2022-08-01
5 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค 2022-09-01
6 4 ์‚ฌ๋ฌด์‹ค์„ ์ฒญ์†Œํ•˜๋‹ค (์—†๋Š”)
7 4 ์ฆ๊ฑฐ์šด ์‚ถ (์—†๋Š”)
8 6 ์ฆ๊ฑฐ์šด ์‚ถ (์—†๋Š”)

์ˆ˜์ •๋œ ์…€์€ ๋นจ๊ฐ„์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ˆ˜์ •๋œ ํ…Œ์ด๋ธ”์„ ์ฟผ๋ฆฌ๋กœ ๋Œ€์ฒดํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id

์ž‘์—… ํ…Œ์ด๋ธ” ๋Œ€์‹  .

์ด๋Ÿฌํ•œ ์š”์ฒญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

SELECT * FROM employee e JOIN ( 
 	SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline
 	FROM task 
) t ON e.id = t.emploee_id

task ๋ผ๋Š” ๋‹จ์–ด ๋Œ€์‹  ๊ด„ํ˜ธ๋ฅผ ์“ฐ๊ณ  ๊ทธ ์•ˆ์— ์š”์ฒญ ๋ณธ๋ฌธ์„ ๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ค‘์ฒฉ ์ฟผ๋ฆฌ์˜ ๋ณ„์นญ t (alias)๊ฐ€ ๋งค์šฐ ์œ ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. ์ค‘์ฒฉ ์ฟผ๋ฆฌ๋Š” ํ…Œ์ด๋ธ”๊ณผ ๋‹ฌ๋ฆฌ ์ž์ฒด ์ด๋ฆ„์ด ์—†์œผ๋ฏ€๋กœ ๋ณ„์นญ์ด ๋งค์šฐ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ด๋Ÿฌํ•œ ์ฟผ๋ฆฌ์˜ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

ID ์ด๋ฆ„ ์ง์—… ์ƒ๋Ÿฌ๋ฆฌ ๋‚˜์ด ๊ฐ€์ž… ๋‚ ์งœ ID employee_id ์ด๋ฆ„
1 ์ด๋ฐ”๋…ธํ”„ ์ด๋ฐ˜ ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 100000 25 2012-06-30 1 1 ํ”„๋ŸฐํŠธ์—”๋“œ์˜ ๋ฒ„๊ทธ ์ˆ˜์ •
2 ํŽ˜ํŠธ๋กœํ”„ ํŽ˜ํŠธ๋ฅด ํ”„๋กœ๊ทธ๋žจ ์ œ์ž‘์ž 80000 23 2013-08-12 2 2 ๋ฐฑ์—”๋“œ์˜ ๋ฒ„๊ทธ ์ˆ˜์ •
4 ๋ผ๋น„๋…ธ๋น„์น˜ ๋ชจ์ด์ƒค ๊ฐ๋… 200000 35 2015-05-12 6 4 ์‚ฌ๋ฌด์‹ค์„ ์ฒญ์†Œํ•˜๋‹ค
4 ๋ผ๋น„๋…ธ๋น„์น˜ ๋ชจ์ด์ƒค ๊ฐ๋… 200000 35 2015-05-12 7 4 ์ฆ๊ฑฐ์šด ์‚ถ
5 ํ‚ค๋ฆฌ์—”์ฝ” ์•„๋‚˜์Šคํƒ€์ƒค ์‚ฌ๋ฌด์‹ค ๊ด€๋ฆฌ์ž 40000 25 2015๋…„ 10์›” 10์ผ 4 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค
5 ํ‚ค๋ฆฌ์—”์ฝ” ์•„๋‚˜์Šคํƒ€์ƒค ์‚ฌ๋ฌด์‹ค ๊ด€๋ฆฌ์ž 40000 25 2015๋…„ 10์›” 10์ผ 5 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค
5 ํ‚ค๋ฆฌ์—”์ฝ” ์•„๋‚˜์Šคํƒ€์ƒค ์‚ฌ๋ฌด์‹ค ๊ด€๋ฆฌ์ž 40000 25 2015๋…„ 10์›” 10์ผ ์‚ผ 5 ์ปคํ”ผ๋ฅผ ์‚ฌ๋‹ค
6 ๋ฐ”์Šค์นด ๊ณ ์–‘์ด 1000 ์‚ผ 2018-11-11 8 6 ์ฆ๊ฑฐ์šด ์‚ถ

์šฐ๋ฆฌ ์ด์‚ฌ๋Š” "์‚ฌ๋ฌด์‹ค ์ฒญ์†Œ"๋ผ๋Š” ์ž„๋ฌด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋นจ๋ฆฌ ์œ„์ž„ ํ•  ์‚ฌ๋žŒ์„ ์ฐพ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค :) WITH ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , MySQL ๋ฒ„์ „ 8๋ถ€ํ„ฐ๋Š” ๋” ์ด์ƒ ๋ชจ๋“  ํ•˜์œ„ ์ฟผ๋ฆฌ๋ฅผ ์ตœ์ข… ์ฟผ๋ฆฌ์— ๋ฐ”๋กœ ๋„ฃ์„ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๋ณ„๋„๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด WITH ๋ฌธ์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค .

์ด๋ฅผ ํ†ตํ•ด ๊ฐ€์ƒ ํ…Œ์ด๋ธ”(๋ช…๋ช…๋œ ์ฟผ๋ฆฌ)์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๋ชจ์–‘์€ ํ…œํ”Œ๋ฆฟ์— ์˜ํ•ด ์ง€์ •๋ฉ๋‹ˆ๋‹ค.

WITH Name AS (request) 

๊ณ ์œ ํ•œ ์ด๋ฆ„์„ ํ• ๋‹นํ•˜์ง€ ์•Š์€ COUNT(*)์™€ ๊ฐ™์ด ํ•˜์œ„ ์ฟผ๋ฆฌ์— ์ด๋ฆ„์ด ์ง€์ •๋˜์ง€ ์•Š์€ ์—ด์ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ WITH ๋ฌธ์—๋Š” ํ•˜์œ„ ์ฟผ๋ฆฌ์— ๋Œ€ํ•œ ์ƒˆ ์—ด ์ด๋ฆ„์„ ์ง€์ •ํ•˜๋Š” ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ํ˜•์‹์€ ํ…œํ”Œ๋ฆฟ์— ์˜ํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

WITH Name(column1, column2, โ€ฆ) AS (request) 

์›ํ•˜๋Š” ๋งŒํผ ๊ฐ€์ƒ ํ…Œ์ด๋ธ”(๋ช…๋ช…๋œ ์ฟผ๋ฆฌ)์„ ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋กœ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์š”์ฒญ์˜ ์ผ๋ฐ˜์ ์ธ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

WITH name1 AS (request1),  
       	name2 AS (request2), 
       	name3 AS (request3) 
SELECT * FROM name1 JOIN name2 ON โ€ฆ 

์ด์ œ ์šฐ๋ฆฌ์˜ ๋ฌด์„œ์šด ์งˆ๋ฌธ์„ ํ•ด๋ณด์ž:

SELECT * FROM employee e JOIN ( 
 	SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline 
 	FROM task 
) t ON e.id = t.emploee_id  

๊ทธ๋ฆฌ๊ณ  WITH ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์‹ญ์‹œ์˜ค.

WITH task2(id, employee_id, name, deadline) 
   AS (SELECT id, IFNULL(employee_id, 4), name, deadline FROM task) 
SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id

๋˜๋Š” ์—ด ์ด๋ฆ„ ์—†์ด ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ IFNULL() ํ•จ์ˆ˜์— ๋Œ€ํ•œ ๋ณ„์นญ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

WITH task2 AS ( 
 	SELECT id, IFNULL(employee_id, 4) AS employee_id, name, deadline FROM task 
) 
SELECT * FROM employee e JOIN task2 t ON e.id = t.emploee_id