๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DBMS/Mariadb

[DBMS]MariaDB JOIN: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜๋Š” ๋ฐฉ๋ฒ•

by YJ Dev 2024. 5. 31.
728x90
๋ฐ˜์‘ํ˜•
SMALL

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ •๋ณด๋ฅผ ์ถ”์ถœํ•˜๊ฑฐ๋‚˜ ๋ถ„์„ํ•  ๋•Œ ์ข…์ข… ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ JOIN์€ ํ•„์ˆ˜์ ์ธ ๋„๊ตฌ์ž…๋‹ˆ๋‹ค. MariaDB์—์„œ JOIN์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SQL JOIN


ํ…Œ์ด๋ธ” ์ƒ์„ฑ, ์ •๋ณด ์กฐํšŒ, ์ˆ˜์ •, ์กฐํšŒ, ์‚ญ์ œ์— ๊ด€ํ•œ ๋‚ด์šฉ์€ ์•„๋ž˜ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•ด ์ฃผ์„ธ์š”๐Ÿ‘€

" "

[DBMS]MariaDB SQL์„ ์‚ฌ์šฉํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ” ๊ด€๋ฆฌ: ์ƒ์„ฑ, ์ •๋ณด ์กฐํšŒ, ์ˆ˜์ •, ์กฐํšŒ ๋ฐ ์‚ญ์ œ ๋ฐฉ๋ฒ•

MariaDB๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•˜๊ณ  ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ SQL ๊ธฐ๋ณธ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ๊ธฐ๋ณธ์ ์ธ CREATE TABLE ๋ฌธ๋ถ€ํ„ฐ ํ…Œ์ด๋ธ”์„ ์ˆ˜์ •ํ•˜๋Š” ALTER ๋ฌธ๊นŒ์ง€ ๋‹ค๋ฃฐ ๊ฒƒ์ž…๋‹ˆ๋‹ค.โ‰ฃ ๋ชฉ์ฐจํ…Œ

creativevista.tistory.com

INNER JOIN๐Ÿ”„

INNER JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰๋งŒ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ด€๋ จ ๋ฐ์ดํ„ฐ๋งŒ์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์–ด ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT *
FROM ํ…Œ์ด๋ธ”1
INNER JOIN ํ…Œ์ด๋ธ”2 ON ํ…Œ์ด๋ธ”1.์—ด = ํ…Œ์ด๋ธ”2.์—ด;

LEFT JOIN๐Ÿ‘ˆ

LEFT JOIN์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์ผ์น˜ํ•˜๋Š” ํ–‰์ด ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELECT *
FROM ์™ผ์ชฝํ…Œ์ด๋ธ”
LEFT JOIN ์˜ค๋ฅธ์ชฝํ…Œ์ด๋ธ” ON ์™ผ์ชฝํ…Œ์ด๋ธ”.์—ด = ์˜ค๋ฅธ์ชฝํ…Œ์ด๋ธ”.์—ด;

RIGHT JOIN๐Ÿ‘‰

RIGHT JOIN์€ LEFT JOIN๊ณผ ๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰๊ณผ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ์ผ์น˜ํ•˜๋Š” ํ–‰์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELECT *
FROM ์™ผ์ชฝํ…Œ์ด๋ธ”
RIGHT JOIN ์˜ค๋ฅธ์ชฝํ…Œ์ด๋ธ” ON ์™ผ์ชฝํ…Œ์ด๋ธ”.์—ด = ์˜ค๋ฅธ์ชฝํ…Œ์ด๋ธ”.์—ด;

CROSS JOINโœ–๏ธ

CROSS JOIN์€ ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ–‰์„ ์กฐํ•ฉํ•˜์—ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ, ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆ˜์™€ ๋‘ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆ˜๋ฅผ ๊ณฑํ•œ ๋งŒํผ์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค. ๋ณดํ†ต, ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ชจ๋“  ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

SELECT *
FROM ํ…Œ์ด๋ธ”1
CROSS JOIN ํ…Œ์ด๋ธ”2;

์˜ˆ๋ฅผ ๋“ค์–ด, 3๊ฐœ์˜ ์ œํ’ˆ๊ณผ 2๊ฐœ์˜ ์นดํ…Œ๊ณ ๋ฆฌ๊ฐ€ ์žˆ์„ ๋•Œ, ๋ชจ๋“  ์ œํ’ˆ๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ์กฐํ•ฉ์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

SELF JOIN๐Ÿ”

SELF JOIN์€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์„ ๋‘ ๋ฒˆ ์ฐธ์กฐํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋กœ ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ๋˜๋Š” ์ž๊ธฐ ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

SELECT A.์—ด, B.์—ด
FROM ํ…Œ์ด๋ธ” A, ํ…Œ์ด๋ธ” B
WHERE A.๊ธฐ์ค€์—ด = B.๊ธฐ์ค€์—ด;

์˜ˆ๋ฅผ ๋“ค์–ด, ์ง์› ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ์ง์›์˜ ๋งค๋‹ˆ์ € ์ •๋ณด๋ฅผ ์กฐํšŒํ•  ๋•Œ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

NATURAL JOIN๐ŸŒฟ

NATURAL JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ด์„ ์ž๋™์œผ๋กœ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์•„ JOIN์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋™์ผํ•œ ์—ด์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

SELECT *
FROM ํ…Œ์ด๋ธ”1
NATURAL JOIN ํ…Œ์ด๋ธ”2;

NATURAL JOIN์€ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์—ด์ด ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๋•Œ ํŠนํžˆ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

USING ์ ˆ๐Ÿ› ๏ธ

USING ์ ˆ์€ JOIN์—์„œ ํŠน์ • ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ํ…Œ์ด๋ธ”์„ ๊ฒฐํ•ฉํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์—ด ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT *
FROM ํ…Œ์ด๋ธ”1
INNER JOIN ํ…Œ์ด๋ธ”2 USING(์—ด);

USING ์ ˆ์€ SQL ๋ฌธ์„ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์ค๋‹ˆ๋‹ค.

ON ์ ˆ๐Ÿ”

ON ์ ˆ์€ JOIN ์กฐ๊ฑด์„ ๋ช…์‹œํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋ณด๋‹ค ์œ ์—ฐํ•œ ์กฐ๊ฑด์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

SELECT *
FROM ํ…Œ์ด๋ธ”1
INNER JOIN ํ…Œ์ด๋ธ”2 ON ํ…Œ์ด๋ธ”1.์—ด = ํ…Œ์ด๋ธ”2.์—ด;

ON ์ ˆ์€ ์„œ๋กœ ๋‹ค๋ฅธ ์ด๋ฆ„์˜ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ JOIN์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ค์ œ ์‘์šฉ ์˜ˆ์ œ๐Ÿ’ก

๋งˆ๋ฆฌ์•„DB์—์„œ JOIN์„ ํ™œ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์‹ค์šฉ์ ์ธ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์ฃผ๋ฌธ ํ…Œ์ด๋ธ”๊ณผ ๊ณ ๊ฐ ํ…Œ์ด๋ธ”์„ ์˜ˆ๋กœ ๋“ค์–ด, INNER JOIN, LEFT JOIN, RIGHT JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

์šฐ์„ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์ œ ๋ฐ์ดํ„ฐ

์šฐ์„ , ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ณ ๊ฐ ํ…Œ์ด๋ธ” (customers)

๊ณ ๊ฐID ์ด๋ฆ„ ๋„์‹œ
1 ํ™๊ธธ๋™ ์„œ์šธ
2 ์ด์ˆœ์‹  ๋ถ€์‚ฐ
3 ์žฅ๋ณด๊ณ  ์ œ์ฃผ
4 ์ด์ˆœ์‹  ๋Œ€๊ตฌ

์ฃผ๋ฌธ ํ…Œ์ด๋ธ” (orders)

์ฃผ๋ฌธID ๊ณ ๊ฐID ์ œํ’ˆ๋ช… ๊ธˆ์•ก
101 1 ๋…ธํŠธ๋ถ 1500
102 2 ์Šค๋งˆํŠธํฐ 800
103 1 ํƒœ๋ธ”๋ฆฟ 600
104 3 ์Šค๋งˆํŠธ์›Œ์น˜ 200

INNER JOIN ์˜ˆ์ œ

INNER JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ๊ฐ์˜ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ๊ณ ๊ฐ์ด ์ฃผ๋ฌธํ•œ ์ œํ’ˆ๋ช…์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

SELECT `customers`.`์ด๋ฆ„`, `orders`.`์ œํ’ˆ๋ช…`
FROM `customers`
INNER JOIN `orders` ON `customers`.`๊ณ ๊ฐID` = `orders`.`๊ณ ๊ฐID`;

๊ฒฐ๊ณผ

์ด๋ฆ„ ์ œํ’ˆ๋ช…
ํ™๊ธธ๋™ ๋…ธํŠธ๋ถ
์ด์ˆœ์‹  ์Šค๋งˆํŠธํฐ
ํ™๊ธธ๋™ ํƒœ๋ธ”๋ฆฟ
์žฅ๋ณด๊ณ  ์Šค๋งˆํŠธ์›Œ์น˜

LEFT JOIN ์˜ˆ์ œ

LEFT JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ๊ณ ๊ฐ์˜ ์ด๋ฆ„๊ณผ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์ฃผ๋ฌธ ์ •๋ณด๊ฐ€ ์—†๋Š” ๊ณ ๊ฐ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

SELECT `customers`.`์ด๋ฆ„`, `orders`.`์ œํ’ˆ๋ช…`
FROM `customers`
LEFT JOIN `orders` ON `customers`.`๊ณ ๊ฐID` = `orders`.`๊ณ ๊ฐID`;

๊ฒฐ๊ณผ

์ด๋ฆ„ ์ œํ’ˆ๋ช…
ํ™๊ธธ๋™ ๋…ธํŠธ๋ถ
ํ™๊ธธ๋™ ํƒœ๋ธ”๋ฆฟ
์ด์ˆœ์‹  ์Šค๋งˆํŠธํฐ
์žฅ๋ณด๊ณ  ์Šค๋งˆํŠธ์›Œ์น˜
๊น€์œ ์‹  NULL

RIGHT JOIN ์˜ˆ์ œ

RIGHT JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ฃผ๋ฌธ๊ณผ ํ•ด๋‹น ๊ณ ๊ฐ์˜ ์ด๋ฆ„์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๊ณ ๊ฐ ์ •๋ณด๊ฐ€ ์—†๋Š” ์ฃผ๋ฌธ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

SELECT `customers`.`์ด๋ฆ„`, `orders`.`์ œํ’ˆ๋ช…`
FROM `customers`
RIGHT JOIN `orders` ON `customers`.`๊ณ ๊ฐID` = `orders`.`๊ณ ๊ฐID`;

๊ฒฐ๊ณผ

์ด๋ฆ„ ์ œํ’ˆ๋ช…
ํ™๊ธธ๋™ ๋…ธํŠธ๋ถ
์ด์ˆœ์‹  ์Šค๋งˆํŠธํฐ
ํ™๊ธธ๋™ ํƒœ๋ธ”๋ฆฟ
์žฅ๋ณด๊ณ  ์Šค๋งˆํŠธ์›Œ์น˜

CROSS JOIN ์˜ˆ์ œ

๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์ˆซ์ž ์กฐํ•ฉ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, 1๋ถ€ํ„ฐ 3๊นŒ์ง€์˜ ์ˆซ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ด๋ธ”๊ณผ ์•ŒํŒŒ๋ฒณ A๋ถ€ํ„ฐ C๊นŒ์ง€์˜ ๋ฌธ์ž๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ด…์‹œ๋‹ค.

์ˆซ์ž ํ…Œ์ด๋ธ” (numbers)

์ˆซ์ž
1
2
3

์•ŒํŒŒ๋ฒณ ํ…Œ์ด๋ธ” (letters)

์•ŒํŒŒ๋ฒณ
A
B
C


์ด์ œ CROSS JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT `numbers`.`์ˆซ์ž`, `letters`.`์•ŒํŒŒ๋ฒณ`
FROM `numbers`
CROSS JOIN `letters`;

์œ„์˜ ์ฟผ๋ฆฌ๋Š” ์ˆซ์ž ํ…Œ์ด๋ธ”๊ณผ ์•ŒํŒŒ๋ฒณ ํ…Œ์ด๋ธ”์„ CROSS JOINํ•˜์—ฌ ๋ชจ๋“  ์ˆซ์ž์™€ ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์˜ ์กฐํ•ฉ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

์ˆซ์ž ์•ŒํŒŒ๋ฒณ
1 A
1 B
1 C
2 A
2 B
2 C
3 A
3 B
3 C

์œ„์˜ ๊ฒฐ๊ณผ์—์„œ๋Š” ์ˆซ์ž์™€ ์•ŒํŒŒ๋ฒณ์˜ ๋ชจ๋“  ์กฐํ•ฉ์ด ๋‚˜์—ด๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ์ˆซ์ž์™€ ๋ชจ๋“  ์•ŒํŒŒ๋ฒณ์„ ์กฐํ•ฉํ•˜์—ฌ ์ƒ์„ฑ๋˜๋Š” ์นดํ‹ฐ์…˜ ๊ณฑ(Cartesian Product)์ž…๋‹ˆ๋‹ค.


SELF JOIN ์˜ˆ์ œ

SELF JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ™์€ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ง์› ํ…Œ์ด๋ธ”์—์„œ ๊ฐ ์ง์›์˜ ๋งค๋‹ˆ์ €๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง์› ํ…Œ์ด๋ธ” (employees)

์ง์›ID ์ด๋ฆ„ ์ƒ์‚ฌID
1 Alice Lee 3
2 Bob Smith 3
3 Carol Brown NULL
4 David Kim 2
5 Emily Park 2


์ด์ œ SELF JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ์ง์›์˜ ์ƒ์‚ฌ๋ฅผ ์กฐํšŒํ•˜๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT `e1`.`์ด๋ฆ„` AS `์ง์›`, COALESCE(`e2`.`์ด๋ฆ„`, '์—†์Œ') AS `์ƒ์‚ฌ`
FROM `employees e1`
LEFT JOIN `employees e2` ON `e1`.`์ƒ์‚ฌID` = `e2`.`์ง์›ID`;

์œ„์˜ ์ฟผ๋ฆฌ๋Š” employees ํ…Œ์ด๋ธ”์„ ๋‘ ๋ฒˆ ์ฐธ์กฐํ•˜์—ฌ e1๊ณผ e2๋ผ๋Š” ๋ณ„์นญ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฐธ์กฐ(e1)์—์„œ๋Š” ๊ฐ ์ง์›์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ , ๋‘ ๋ฒˆ์งธ ์ฐธ์กฐ(e2)์—์„œ๋Š” ์ƒ์‚ฌ์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. LEFT JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ง์›์„ ๊ฐ€์ ธ์˜ค๋ฉด์„œ ์ƒ์‚ฌ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ์‚ฌ์˜ ์ •๋ณด๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ƒ์‚ฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” '์—†์Œ'์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

์ง์› ์ƒ์‚ฌ
Alice Lee Carol Brown
Bob Smith Carol Brown
Carol Brown ์—†์Œ
David Kim Bob Smith
Emily Park Bob Smith

์œ„์˜ ๊ฒฐ๊ณผ์—์„œ๋Š” ๊ฐ ์ง์›์˜ ์ด๋ฆ„๊ณผ ํ•ด๋‹น ์ง์›์˜ ์ƒ์‚ฌ์˜ ์ด๋ฆ„์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ƒ์‚ฌ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” '์—†์Œ'์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.


NATURAL JOIN ์˜ˆ์ œ

NATURAL JOIN์€ ๋‘ ํ…Œ์ด๋ธ” ์‚ฌ์ด์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋™์œผ๋กœ ์กฐ์ธํ•˜๋Š” ์œ ํ˜•์˜ ์กฐ์ธ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ํ…Œ์ด๋ธ”์ด ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ด์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , ํ•ด๋‹น ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์› ์ •๋ณด์™€ ๋ถ€์„œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ๋‘ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์› ํ…Œ์ด๋ธ” (employees)

์‚ฌ์›ID ์ด๋ฆ„ ๋ถ€์„œID
1 Alice 101
2 Bob 102
3 Carol 103

๋ถ€์„œ ํ…Œ์ด๋ธ” (departments)

๋ถ€์„œID ๋ถ€์„œ๋ช…
101 IT
102 Sales
103 HR

์ด์ œ NATURAL JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ”์„ ์กฐ์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

SELECT *
FROM `employees`
NATURAL JOIN `departments`;

์œ„์˜ ์ฟผ๋ฆฌ๋Š” ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ NATURAL JOIN์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ํ…Œ์ด๋ธ” ์‚ฌ์ด์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์—ด์„ ๊ธฐ์ค€์œผ๋กœ ์ž๋™์œผ๋กœ ์กฐ์ธ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” "๋ถ€์„œID"๋ผ๋Š” ์—ด์ด ๋™์ผํ•˜๊ฒŒ ์กด์žฌํ•˜๋ฏ€๋กœ ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž๋™์œผ๋กœ ์กฐ์ธ์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๊ฒฐ๊ณผ

์‚ฌ์›ID ์ด๋ฆ„ ๋ถ€์„œID ๋ถ€์„œ๋ช…
1 Alice 101 IT
2 Bob 102 Sales
3 Carol 103 HR

์œ„์˜ ๊ฒฐ๊ณผ์—์„œ๋Š” ์‚ฌ์› ํ…Œ์ด๋ธ”๊ณผ ๋ถ€์„œ ํ…Œ์ด๋ธ” ์‚ฌ์ด์—์„œ ๋ถ€์„œID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์กฐ์ธํ•˜์—ฌ ์‚ฌ์› ์ •๋ณด์™€ ํ•ด๋‹น ๋ถ€์„œ์˜ ๋ถ€์„œ๋ช…์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๋‚ด์šฉ๐Ÿ‘€

SQL JOIN

728x90
๋ฐ˜์‘ํ˜•