ํ์ ์ฟผ๋ฆฌ๋ ํ ์ด๋ธ์ ๋ฐํํฉ๋๋ค.
๋ง์ง๋ง์ผ๋ก ์ธ ๋ฒ์งธ ์ต์ ์ ํ์ ์ฟผ๋ฆฌ๊ฐ ์ ์ฒด ํ ์ด๋ธ์ ๋ฐํํ๋ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๊ฒ์ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ์ต์ ์ ๋๋ค.
ํน์ ํ ์ด๋ธ์ ์ฝ๊ฐ ์กฐ์ ํ๊ณ ์ถ์ ์ํฉ์ด ๋งค์ฐ ์์ฃผ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ์์ ๋ ํ ์ด๋ธ์ ๋ค๋ฅธ ํ ์ด๋ธ๊ณผ ์กฐ์ธ(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
GO TO FULL VERSION