[MySQL JOIN ์™„์ „ ์ •๋ฆฌ ๐Ÿง ]

์•„๋‡จ ๋ฏผ๊ท ๋ฐ์š”ยท2025๋…„ 5์›” 22์ผ
0

SQL์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” JOIN!
๊ฐœ๋…์€ ์ต์ˆ™ํ•œ๋ฐ ๋ง‰์ƒ ์“ฐ๋ ค ํ•˜๋ฉด ํ—ท๊ฐˆ๋ฆฌ๋Š” JOIN๋“คโ€ฆ
๋‚ด๊ฐ€ ์ง์ ‘ ๊ถ๊ธˆํ–ˆ๋˜ ๊ฒƒ๋“ค์„ ๊ธฐ์ค€์œผ๋กœ JOIN ์™„์ „ ์ •๋ฆฌ + ์‹ค์Šต์šฉ ์˜ˆ์ œ๊นŒ์ง€ ์ค€๋น„ํ–ˆ์Œ.
๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ์ž…๋ฌธ์ž๋„ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ ํ•˜๋ฉด ๊ฐ ์žก์„ ์ˆ˜ ์žˆ์Œ!

์ œ๋ฐœ... ์‹œ๊ฐ„ ๋‚ด์„œ ์™„๋…ํ•˜๊ณ  ํ•œ ๋ฒˆ๋งŒ ์‹ค์Šต ์˜ˆ์ œ๊นŒ์ง€ ํ’€์–ด์ฃผ๋ฉด ์ข‹๊ฒ ๋‹ค... ๋ฌด์กฐ๊ฑด ์ดํ•ด ๋ ํ…๋ฐ...


โœ… JOIN vs INNER JOIN

-- ์•„๋ž˜ ๋‘ ์ฟผ๋ฆฌ๋Š” ์™„์ „ํžˆ ๋™์ผํ•˜๋‹ค!
SELECT * FROM A JOIN B ON A.id = B.a_id;
SELECT * FROM A INNER JOIN B ON A.id = B.a_id;
  • JOIN = INNER JOIN
  • ๋‘˜ ๋‹ค ์–‘์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์กฐ๊ฑด์ด ๋งž๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ถœ๋ ฅํ•จ

โœ… FULL JOIN์€ MySQL์— ์—†๋‹ค?

MySQL์€ FULL OUTER JOIN์„ ์ง์ ‘ ์ง€์›ํ•˜์ง€ ์•Š์•„!
๋Œ€์‹  ์ด๋ ‡๊ฒŒ LEFT JOIN + RIGHT JOIN + UNION ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ:

SELECT *
FROM A LEFT JOIN B ON A.id = B.a_id

UNION

SELECT *
FROM A RIGHT JOIN B ON A.id = B.a_id;

โœ… ON ์—†์ด JOIN ์“ฐ๋ฉด?

SELECT * FROM A JOIN B WHERE A.id = B.id;
  • ์ด๊ฑด ์‚ฌ์‹ค์ƒ CROSS JOIN ํ›„ WHERE ํ•„ํ„ฐ ๊ฑธ๊ธฐ
  • ๊ถŒ์žฅ ๋ฐฉ์‹ ์•„๋‹˜, JOIN ... ON ... ๋ฐฉ์‹์ด ๋ช…ํ™•ํ•˜๊ณ  ์•ˆ์ „ํ•จ

โœ… CROSS JOIN์ด๋ž€?

  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ์กฐ์ธ
  • A์— 2ํ–‰, B์— 3ํ–‰ โ†’ ๊ฒฐ๊ณผ๋Š” 6ํ–‰ (2ร—3)
SELECT * FROM A CROSS JOIN B;

โœ… ์ปฌ๋Ÿผ๋ช…์ด ๊ฒน์น˜๋ฉด?

  • ์˜ˆ: A.id, B.id ๊ฐ™์ด ๊ฐ™์€ ์ด๋ฆ„์˜ ์ปฌ๋Ÿผ์ด ์žˆ์„ ๊ฒฝ์šฐ
  • ์‹ค์ œ ๊ฒฐ๊ณผ์—๋Š” ๋‘ ์ปฌ๋Ÿผ ๋‹ค ํฌํ•จ๋˜์ง€๋งŒ,
    DBeaver ๊ฐ™์€ ํˆด์€ ํ•˜๋‚˜๋งŒ ๋ณด์—ฌ์ฃผ๊ฑฐ๋‚˜ ์ด๋ฆ„์„ ๋ฐ”๊ฟ” ๋ณด์—ฌ์คŒ

๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๋ ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜์ž:

SELECT A.id AS a_id, B.id AS b_id FROM A JOIN B ON A.id = B.id;

โœ… CSV๋กœ ๋‚ด๋ณด๋‚ด๋ฉด?

  • ํˆด์—์„œ๋Š” ํ•˜๋‚˜๋งŒ ๋ณด์ด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์—ฌ๋„,
    CSV๋กœ ์ถ”์ถœํ•˜๋ฉด ์‹ค์ œ ๋ชจ๋“  ์ปฌ๋Ÿผ์ด ํฌํ•จ๋จ
  • ๋‹จ, ์ค‘๋ณต ์ปฌ๋Ÿผ ์ด๋ฆ„์€ ์ž๋™์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ์Œ (id, id_1 ๋“ฑ)

๐Ÿงฉ ์‹ค์Šต์šฉ ํ…Œ์ด๋ธ” ์˜ˆ์ œ

๐ŸŽต students ํ…Œ์ด๋ธ”

idname
1์ฒ ์ˆ˜
2์˜ํฌ
CREATE TABLE students (
  id INT,
  name VARCHAR(20)
);

INSERT INTO students (id, name)
VALUES (1, '์ฒ ์ˆ˜'), (2, '์˜ํฌ');

๐ŸŽธ hobbies ํ…Œ์ด๋ธ”

idhobby
1๋†๊ตฌ
2ํ”ผ์•„๋…ธ
3๊ฒŒ์ž„
CREATE TABLE hobbies (
  id INT,
  hobby VARCHAR(20)
);

INSERT INTO hobbies (id, hobby)
VALUES (1, '๋†๊ตฌ'), (2, 'ํ”ผ์•„๋…ธ'), (3, '๊ฒŒ์ž„');

๐Ÿงช ์‹ค์Šต ์ฟผ๋ฆฌ ์˜ˆ์ œ

1๏ธโƒฃ INNER JOIN

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
INNER JOIN hobbies h ON s.id = h.id;

โ†’ ๊ณตํ†ต ID๋งŒ ๋งค์นญ๋จ (1, 2)


2๏ธโƒฃ LEFT JOIN

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
LEFT JOIN hobbies h ON s.id = h.id;

โ†’ ๋ชจ๋“  ํ•™์ƒ + ๋งค์นญ๋˜๋Š” ์ทจ๋ฏธ
(์˜ํฌ๊ฐ€ ์—†๋Š” ์ทจ๋ฏธ๋„ NULL๋กœ ๋‚˜์˜ด)


3๏ธโƒฃ RIGHT JOIN

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
RIGHT JOIN hobbies h ON s.id = h.id;

โ†’ ๋ชจ๋“  ์ทจ๋ฏธ + ๋งค์นญ๋˜๋Š” ํ•™์ƒ
(๊ฒŒ์ž„์€ ํ•™์ƒ ์—†์Œ โ†’ NULL)


4๏ธโƒฃ FULL JOIN (MySQL ์œ ์‚ฌ ๊ตฌํ˜„)

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
LEFT JOIN hobbies h ON s.id = h.id

UNION

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
RIGHT JOIN hobbies h ON s.id = h.id;

โ†’ ํ•™์ƒ์ด๋“  ์ทจ๋ฏธ๋“  ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ์ถœ๋ ฅ


5๏ธโƒฃ CROSS JOIN

SELECT s.id AS student_id, s.name, h.hobby
FROM students s
CROSS JOIN hobbies h;

โ†’ ์ฒ ์ˆ˜ ร— 3๊ฐœ ์ทจ๋ฏธ, ์˜ํฌ ร— 3๊ฐœ ์ทจ๋ฏธ โ†’ ์ด 6ํ–‰ ์ถœ๋ ฅ


๐Ÿ–ผ JOIN ๋น„๊ต ์š”์•ฝํ‘œ

JOIN ์ข…๋ฅ˜๊ธฐ์ค€ ํ…Œ์ด๋ธ”์ถœ๋ ฅ ๋ฒ”์œ„
INNER JOIN๋‘˜ ๋‹ค์–‘์ชฝ ์กฐ๊ฑด ๋งž๋Š” ํ–‰๋งŒ ์ถœ๋ ฅ
LEFT JOIN์™ผ์ชฝ์™ผ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ์˜ค๋ฅธ์ชฝ ๋งค์นญ
RIGHT JOIN์˜ค๋ฅธ์ชฝ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” ์ „์ฒด + ์™ผ์ชฝ ๋งค์นญ
FULL JOIN๋‘˜ ๋‹ค์–‘์ชฝ ํ•ฉ์ง‘ํ•ฉ (MySQL์€ UNION์œผ๋กœ ๊ตฌํ˜„)
CROSS JOIN์—†์Œ๋ชจ๋“  ์กฐํ•ฉ ์ถœ๋ ฅ (๊ณฑ์ง‘ํ•ฉ)

๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ ์š”์•ฝ

์งˆ๋ฌธํ•œ ์ค„ ์ •๋ฆฌ
JOIN๊ณผ INNER JOIN ์ฐจ์ด?๊ธฐ๋Šฅ ๊ฐ™์Œ
FULL JOIN MySQL์—์„œ?์ง์ ‘ ์—†์Œ, UNION์œผ๋กœ ๋Œ€์ฒด
ON ์—†์ด JOIN ์“ฐ๋ฉด?CROSS JOIN์ฒ˜๋Ÿผ ์ž‘๋™ํ•ด์„œ ๋น„๊ถŒ์žฅ
CROSS JOIN์ด๋ž€?๋ชจ๋“  ์กฐํ•ฉ์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฐฉ์‹
์ค‘๋ณต ์ปฌ๋Ÿผ์€?์‹ค์ œ๋กœ๋Š” ๋‹ค ์žˆ์ง€๋งŒ ํˆด์ด ์ˆจ๊ธฐ๊ฑฐ๋‚˜ ์ด๋ฆ„ ๋ฐ”๊ฟˆ
CSV ์ €์žฅ์€?๋ชจ๋“  ์ปฌ๋Ÿผ ํฌํ•จ๋˜์ง€๋งŒ ์ด๋ฆ„์€ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ์Œ

๐Ÿ“Ž ์ด ๊ธ€ ํ•˜๋‚˜๋กœ JOIN ๋!
๋Œ“๊ธ€์— ์งˆ๋ฌธ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ์ฆ๋งฌ๋ฃจ ๊ฐ์‚ฌํ•˜๊ฒ ์๋‹ˆ๋‹ค... ์ €๋„ ๊ถ๊ธˆํ•œ๊ฒŒ ๋งŽ์œผ๋‹ˆ๊นŒ ๊ฐ™์ด ๊ณต๋ถ€ํ•ด์š”!

profile
this man์„ ๊ฟˆ ์†์—์„œ ๋ณด์‹  ์ ์ด ์žˆ์œผ์‹ ๊ฐ€์š”?

0๊ฐœ์˜ ๋Œ“๊ธ€