[SQL 7] JOIN (inner, lert, right.. etc)
๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ

[SQL 7] JOIN (inner, lert, right.. etc)

Lecture
CS
ํƒœ๊ทธ
cs
mysql
sql
public
์™„์„ฑ
Y
์ƒ์„ฑ์ผ
Mar 17, 2024 06:26 PM
LectureName
MySQL

MySQL์—์„œ Join ์‚ฌ์šฉํ•˜๊ธฐ


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

๋ถ€๋ชจํ…Œ์ด๋ธ”๊ณผ ์ž์‹ํ…Œ์ด๋ธ”

MySQL์—์„œ Join์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€๋ชจ ํ…Œ์ด๋ธ”๊ณผ ์ž์‹ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์€ ์ž์‹ ํ…Œ์ด๋ธ”๋ณด๋‹ค ๋จผ์ € ์ƒ์„ฑ๋˜๋ฉฐ, ์ž์‹ ํ…Œ์ด๋ธ”์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐํ•˜๋Š” ์™ธ๋ž˜ ํ‚ค๋ฅผ ํฌํ•จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Join์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์ด๋Ÿฌํ•œ ๊ด€๊ณ„๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
ย 
ย 
ย 

Join ์ข…๋ฅ˜


Inner Join ( ๊ด€๊ณ„๊ฐ€ ์žˆ๋Š” ์‚ฌ์šฉ์ž : inner )

Inner Join์€ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ณตํ†ต ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. Inner Join์€ ๊ธฐ๋ณธ์ ์ธ Join ์œ ํ˜•์œผ๋กœ, ๋‘ ํ…Œ์ด๋ธ”์—์„œ ๊ณตํ†ต๋œ ๊ฐ’์„ ๊ฐ€์ง„ ํ–‰๋งŒ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT * FROM table1 INNER JOIN table2 ON table1.column_name = table2.column_name;
ย 

Left Join

Left Join์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์™€ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋งŒ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT * FROM table1 LEFT JOIN table2 ON table1.column_name = table2.column_name;
ย 

Right Join

Right Join์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT * FROM table1 RIGHT JOIN table2 ON table1.column_name = table2.column_name;
ย 

Full Outer Join ( ๊ด€๊ณ„๊ฐ€ ์—†๋Š” ์‚ฌ์šฉ์ž : outter )

Full Outer Join์€ ์™ผ์ชฝ ํ…Œ์ด๋ธ”๊ณผ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉฐ, ์ผ์น˜ํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๊ฐ€ ์—†์œผ๋ฉด NULL ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT * FROM table1 FULL OUTER JOIN table2 ON table1.column_name = table2.column_name;
ย 
ย 

Join ํ™œ์šฉํ•˜๊ธฐ


Join์€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํ•™์ƒ ์ •๋ณด์™€ ์„ฑ์  ์ •๋ณด๊ฐ€ ๊ฐ๊ฐ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด, Join์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•™์ƒ ์ด๋ฆ„๊ณผ ์„ฑ์ ์„ ํ•จ๊ป˜ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT students.name, grades.grade FROM students INNER JOIN grades ON students.student_id = grades.student_id;
์œ„์˜ ์ฝ”๋“œ๋Š” ํ•™์ƒ ์ด๋ฆ„๊ณผ ์„ฑ์  ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. INNER JOIN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์„ค์ •ํ•˜๊ณ , ํ•™์ƒ ID๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ ˆ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ•™์ƒ ์ด๋ฆ„๊ณผ ์„ฑ์ ์ด ํ•จ๊ป˜ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
ย 
ย 

์…€ํ”„ ์กฐ์ธ (SELF JOIN)

์…€ํ”„ ์กฐ์ธ์€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ Join์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ๋‘ ๊ฐœ์˜ ๋ณ„์นญ์œผ๋กœ ๋‚˜๋ˆ„์–ด Join์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT A.column_name1, B.column_name2 FROM table_name AS A, table_name AS B WHERE A.column_name3 = B.column_name3;
์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” table_name์„ A์™€ B๋ผ๋Š” ๋ณ„์นญ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. A์™€ B๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ฐ™์€ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ Join์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด, ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 
ย 

ํ…Œ์ด๋ธ” ๋ช…์ด ๋„ˆ๋ฌด ๊ธธ๋‹ค๊ตฌ์š”?

MySQL์—์„œ Join์„ ์‚ฌ์šฉํ•  ๋•Œ, ํ…Œ์ด๋ธ” ๋ช…์— ๋ณ„์นญ์„ ์ฃผ์–ด ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„์นญ์€ AS ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ์‹œ ์ฝ”๋“œ:
SELECT * FROM table1 AS t1 INNER JOIN table2 AS t2 ON t1.column_name = t2.column_name;
์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” table1์„ t1, table2๋ฅผ t2๋ผ๋Š” ๋ณ„์นญ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ๋” ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.