[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์กฐ์ธ์ฐ์ฐ(Join Operation)
Join
์กฐ์ธ์ ๋ค์์ ํ ์ด๋ธ์ ์ฐ๊ฒฐํด์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์๋ด๋ ์ฐ์ฐ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก Join ์ ์ ๊ทํ๋ ํ ์ด๋ธ์ ์ฌ์ฉํ๊ฒ ๋๊ณ ์ฌ๋ฌ ์ข ๋ฅ์ ์กฐ์ธ์ฐ์ฐ๋ค์ ์ ๋ฆฌํด๋ด ์๋ค.
Natural Join
Natural ์ ๋ ํ ์ด๋ธ์์ ๊ฐ์ ์์ฑ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ํฉ์ณ์ ์๋ก์ด ํ ์ด๋ธ์ ๋ง๋๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ค๋ณต๋๋ ์์ฑ๋ค์ ํฉ์ณ์ ํ๋๋ก ๋ง๋ญ๋๋ค.
students_info
student_id | student_name | age | sex |
---|---|---|---|
1 | ์ฌํ | 26 | M |
2 | ์ค์ด | 24 | F |
3 | ํ๊ธฐ | 21 | M |
students_department
student_id | Department |
---|---|
1 | CSEE |
2 | CPSW |
3 | CSEE |
์์ ๊ฐ์ ๋ ํ ์ด๋ธ์ด ์๋ค๋ฉด, Natural Join์ ํ์ ๋, student_id ๋ฅผ ๊ธฐ์ค์ผ๋ก ํฉ์ณ์ ธ์ ๋ค์๊ณผ ๊ฐ์ ํ ์ด๋ธ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ ํ ์ด๋ธ์์ Student_id ๊ฐ ๊ฐ๊ฐ ์กด์ฌํ์ง๋ง ์ค๋ณต๋๋ ์์ฑ์ด๊ธฐ ๋๋ฌธ์ ์กฐ์ธ ์ดํ์๋ ํ๋๊ฐ ๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
student_id | student_name | age | sex | Department |
---|---|---|---|---|
1 | ์ฌํ | 26 | M | CSEE |
2 | ์ค์ด | 24 | F | CPSW |
3 | ํ๊ธฐ | 21 | M | CSEE |
MySQL ์์ Natural Join์ ํ ๋๋ ๋ค์๊ณผ ๊ฐ์ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค.
SELECT *
FROM students_info, students_department
WHERE students_info.student_id = student_department.student_id
or
SELECT *
FROM students_info NATURAL JOIN students_department
์ฒซ๋ฒ์งธ ์ฟผ๋ฆฌ๋ Natural Join์ ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ ์์์ง๋ง, WHERE ๋ฌธ์ ํตํด์ student_id ๊ฐ ๊ฐ์ ํํ์ ๋ฝ๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ์ NATURAL JOIN ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ฒ๋ฉ๋๋ค. ๋๋ฒ์งธ ์ฟผ๋ฆฌ๋ NATURAL JOIN ์ฐ์ฐ์ ์ด์ฉํด์ ๋ ํ ์ด๋ธ์ ๊ณตํต๋ ์์ฑ๋ค์ ๊ฐ์ ์๋์ผ๋ก ์ฐพ์ ํ ์ด๋ธ์ ํฉ์ณ์ค๋๋ค. ์ด๋ ์ฃผ์ํ ์ ์ Natural Join์ ์ฌ์ฉ์๊ฐ ์ง์ ํ์ง ์๊ณ ์ฐ์ฐ๊ณผ์ ์์ ๋์ผํ ์์ฑ์ ์ด๋ฆ์ ์ฐพ์์ join ํ๊ธฐ ๋๋ฌธ์ ์์ฑ์ ์ด๋ฆ๋ง ๊ฐ๊ณ ๊ทธ ์๋ฏธ๊ฐ ๋ค๋ฅธ ํ ์ด๋ธ๋ค์ด ํฉ์ณ์ง๋ฉด์ ์ ๋ณด๊ฐ ํผ์ ๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๋ค.
SELECT name, title
FROM student, NATURAL JOIN takes NATURAL JOIN course
์ด๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ค๋ฉด, ํ๋ฒ์ ์ธ ํ ์ด๋ธ์ ํฉ์น๋ฉด์ ์ธ ํ ์ด๋ธ์ด ๊ฐ์ง ๋์ผํ ์์ฑ์ ์๋ฏธ๊ฐ ๋ฌ๋ผ์ง๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๊ฒ๋ฉ๋๋ค.
Join (Inner Join)
Natural Join์ ๋ฌธ์ ์ ์ ๋์ผํ ์ด๋ฆ์ ์์ฑ์ ๋ง์๋๋ก ํ๋๋ก ํฉ์ณ๋ฒ๋ฆฐ๋ค๋ ๊ฒ์ด์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ Inner Join ์ฐ์ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. Natural Join์ ON ์ฐ์ฐ์ ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค. Where ์ฒ๋ผ ON์ ํตํด์ ํ ์ด๋ธ์ ํฉ์น ์กฐ๊ฑด์ ์ง์ ๋ช ์ํด์ค ์ ์์ต๋๋ค.
students_info
student_id | student_name | age | sex |
---|---|---|---|
1 | ์ฌํ | 26 | M |
2 | ์ค์ด | 24 | F |
3 | ํ๊ธฐ | 21 | M |
students_department
student_id | Department |
---|---|
1 | CSEE |
2 | CPSW |
3 | CSEE |
์์ ์ฌ์ฉํ๋ ํ ์ด๋ธ์ Natural Join์ ํตํด์ ํฉ์น ๋๋
SELECT *
FROM students_info NATURAL JOIN students_department
์ด๋ฐ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฅผ ํตํด์ ์ด๋ค ์์ฑ์ด ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ง๋์ง ๋ช ์ํ์ง ์์์ง๋ง, Natural Join์ด ํด๋น ์์ฑ์ ์์์ ์ฐพ๊ณ ํฉ์ณ์ฃผ์์ต๋๋ค.
Inner Join ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด
SELECT *
FROM students_info JOIN students_department
ON tudents_info.student_id = student_department.student_id
์ด๋ ๊ฒ ์ด๋ค ์์ฑ์ ๊ธฐ์ค์ผ๋ก ํฉ์น ๊ฒ์ธ์ง ์ง์ ํด์ค ์๊ฐ ์๋ค. ๋ฐ๋ผ์, ์ค๋ณต๋๋ ์์ฑ์ด ์ฌ๋ฌ๊ฐ ์์ ๋, ์ด๋ค ์์ฑ์ ๊ธฐ์ค์ผ๋ก ํฉ์น ์ง ์ฌ์ฉ์๊ฐ ์ ํํด์ค ์ ์์ต๋๋ค. ๋ง์ฝ, ๋ ํ ์ด๋ธ์ ๊ฐ์ด ์ผ์นํ์ง ์๋ ํํ๋ค์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น์? ์ด๋ฐ ํํ๋ค์ ๋ชจ๋ ์ญ์ ๋๊ณ ์๋ฒฝํ๊ฒ ์ผ์นํ๋ ํํ๋ค๋ง ์๋ก ํฉ์ณ์ง ํ ์ด๋ธ์ ๋จ๊ฒ๋ฉ๋๋ค.
Outer Join
Natural Join ๊ณผ Inner Join์ ๋ ํ ์ด๋ธ์์ ์ผ์นํ๋ ๊ฐ์ด ์๋ ํํ๋ค์ ๋ชจ๋ ์์ ๋ฒ๋ฆฌ๊ฒ ๋๋๋ฐ, ์ด๋ค ๊ฒฝ์ฐ์๋ ํด๋น ์ ๋ณด๋ค์ด ํ์ํ ์ง๋ ๋ชจ๋ฆ ๋๋ค.
Outer Join ์ Inner Join ์ด๋ Natural Join ๊ณผ๋ ๋ค๋ฅด๊ฒ ์ง์ ์ฐพ์ง ๋ชปํ ์์ฑ๊ฐ๋ค๋ ๊ฒฐ๊ณผ ํ ์ด๋ธ์ ์ ์งํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Outer Join์ ์ข ๋ฅ์ ๋ฐ๋ผ ์ง์ ์ฐพ์ง ๋ชปํ ํํ๋ค ์ค ์ด๋ค ์ข ๋ฅ์ ํํ๋ค๋ง ๋จ๊ธธ์ง ์ ํํ ์ ์๋ค. ์ง์ ์ฐพ์ง ๋ชปํ๊ฒ ๋๋ฉด ํฉ์ณ์ ธ์ ์๋ก ์ถ๊ฐ๋ ์์ฑ์ ๋ฃ์ด์ค ๊ฐ์ด ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์, ํด๋น ์์ฑ์ ๊ฐ์ NULL๋ก ์ต๊ธฐํํ๊ฒ ๋ฉ๋๋ค.
Left Outer Join
Left Outer Join์ join ์ฐ์ฐ์ ์ํํ ๋ ์ผ์ชฝ์ ์์น์์ผฐ๋ ํ ์ด๋ธ์ ํํ์ ๋ชจ๋ ๋จ๊ธฐ๊ณ , ์ค๋ฅธ์ชฝ์ ์์น์์ผฐ๋ ํ ์ด๋ธ์ ๊ฐ์ด ์ผ์นํ๋ ํํ๋ง ๋จ๊ธฐ๋ ์ฐ์ฐ์ ๋๋ค.
students_info
student_id | student_name | age | sex |
---|---|---|---|
1 | ์ฌํ | 26 | M |
2 | ์ค์ด | 24 | F |
3 | ํ๊ธฐ | 21 | M |
4 | ๊ตญ์ธ | 22 | M |
students_department
student_id | Department |
---|---|
1 | CSEE |
2 | CPSW |
3 | CSEE |
5 | SWFL |
์ ํ ์ด๋ธ์ ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง ๊ตญ์ธ์ด์ ์ ๋ณด๊ฐ department ํ ์ด๋ธ์ ์๊ณ , id 5๋ฒ์ ์ ๋ณด๊ฐ student ํ ์ด๋ธ์ ์์ต๋๋ค. Inner Join ๊ณผ Natural Join ์ ์ฌ์ฉํ๋ค๋ฉด, ๊ตญ์ธ์ด์ id 5๋ฒ ํ์์ ์ ๋ณด๊ฐ ์ฌ๋ผ์ก๊ฒ ์ง๋ง, ์ด๋ฒ์ ๊ทธ๋ ์ง ์์ต๋๋ค. Left Outer Join ์ด๊ธฐ ๋๋ฌธ์ ์ผ์ชฝ์ ๊ธฐ์ค์ผ๋ก ํ ์ด๋ธ์ ํฉ์น๋ ์ฐ์ฐ์ ์ํํ๊ฒ ๋ฉ๋๋ค.
student_id | student_name | age | sex | Department |
---|---|---|---|---|
1 | ์ฌํ | 26 | M | CSEE |
2 | ์ค์ด | 24 | F | CPSW |
3 | ํ๊ธฐ | 21 | M | CSEE |
4 | ๊ตญ์ธ | 22 | M | null |
Join ์ ์ํํ์ ๋, ์๋ก ๊ณต์ ๋๋ ์์ฑ์ student_id ์ ๋๋ค. ํ์ง๋ง ์ผ์ชฝ ํ ์ด๋ธ์ ์๋ ๊ตญ์ธ์ด์ ๋ํ ์ ๋ณด๊ฐ ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์๋ ์กด์ฌํ์ง ์์ต๋๋ค. Left Outer Join ์ ์ด๋ ์ผ์ชฝ์๋ง ์กด์ฌํ๋ ์ ๋ณด๋ฅผ ์ ์ง์ํค๊ณ ํฉ์ณค์ ๋ ๋น์ด์๊ฒ ๋๋ ์์ฑ๋ค์ null์ ์ฝ์ ํฉ๋๋ค. ๋ฐ๋ผ์ ์ผ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ํฉ์ณค์ ๋ ์ถ๊ฐ๋๋ Department ์ ๊ตญ์ธ์ด์ ๋ํ ๊ฐ์ด null์ด ๋ค์ด๊ฐ๊ฒ ๋๋ ๊ฒ์ ๋๋ค.
์ฟผ๋ฆฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํฉ๋๋ค.
SELECT *
FROM students_info NATURAL LEFT OUTER JOIN students_department
Right Outer Join
Right Outer Join ์ Left Outer Join ๊ณผ๋ ๋ฐ๋๋ก ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์๋ ์ ๋ณด๋ฅผ ์ ์ง์ํค๋ ์ฐ์ฐ์ ๋๋ค.
Left Outer Join ์์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ ํ ์ด๋ธ์ Right Outer Join์ผ๋ก ํฉ์ณ๋ณด๊ฒ ์ต๋๋ค.
students_info
student_id | student_name | age | sex |
---|---|---|---|
1 | ์ฌํ | 26 | M |
2 | ์ค์ด | 24 | F |
3 | ํ๊ธฐ | 21 | M |
4 | ๊ตญ์ธ | 22 | M |
students_department
student_id | Department |
---|---|
1 | CSEE |
2 | CPSW |
3 | CSEE |
5 | SWFL |
์ ๋ ํ ์ด๋ธ์ ์ค๋ฅธ์ชฝ์ ๊ธฐ์ค์ผ๋ก ํฉ์น๋ฉด,
student_id | Department | student_name | age | sex |
---|---|---|---|---|
1 | CSEE | ์ฌํ | 26 | M |
2 | CPSW | ์ค์ด | 24 | F |
3 | CSEE | ํ๊ธฐ | 21 | M |
5 | SWFL | null | null | null |
์ด๋ ๊ฒ ๊ตญ์ธ์ด์ ์ ๋ณด๋ ํฌํจํ์ง ์์ง๋ง ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ์๋ id 5๋ฒ์ ์ ๋ณด๋ ํฌํจํ ์ฑ๋ก ํฉ์ณ์ง๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
์ฟผ๋ฆฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
SELECT *
FROM students_info NATURAL RIGHT OUTER JOIN students_department
Full Outer Join
Full Outer Join์ ์์ชฝ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ ์งํ์ฑ๋ก ํ ์ด๋ธ์ ํฉ์น๋ ์ฐ์ฐ์ ๋๋ค.
์์์ ๊ณ์ ์ฌ์ฉํ๋ ํ ์ด๋ธ์ full outer join ์ผ๋ก ํฉ์ณ๋ณด๊ฒ ์ต๋๋ค.
students_info
student_id | student_name | age | sex |
---|---|---|---|
1 | ์ฌํ | 26 | M |
2 | ์ค์ด | 24 | F |
3 | ํ๊ธฐ | 21 | M |
4 | ๊ตญ์ธ | 22 | M |
students_department
student_id | Department |
---|---|
1 | CSEE |
2 | CPSW |
3 | CSEE |
5 | SWFL |
๋ ํ ์ด๋ธ์ ํฉ์น๋ฉด,
student_id | student_name | age | sex | Department |
---|---|---|---|---|
1 | ์ฌํ | 26 | M | CSEE |
2 | ์ค์ด | 24 | F | CPSW |
3 | ํ๊ธฐ | 21 | M | CSEE |
4 | ๊ตญ์ธ | 22 | M | null |
5 | null | null | null | SWFL |
์ด๋ ๊ฒ ๋ ์์ชฝ ํ ์ด๋ธ์ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจํ ํ ์ด๋ธ์ด ๋ง๋ค์ด์ง๋๋ค. ์ด๋ฒ์๋ ๊ตญ์ธ์ด์ ์ ๋ณด์ id 5๋ฒ์ ์ ๋ณด๊ฐ ๋ชจ๋ ํฌํจ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ด์๋ ๊ฐ์ null ๋ก ์ด๊ธฐํ๋ฉ๋๋ค.
MySQL ์์๋ Full Outer Join์ ์ฟผ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ต๋๋ค. ๊ทธ๋์ ์ฐ๋ฆฌ๋ ์ง์ ์ด ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋๋ฐ, ์์ชฝ ์ ๋ณด๋ฅผ ๋ชจ๋ ํฌํจ์ํค๋ ค๋ฉด, Left Outer Join ๊ณผ Right Outer Join ์ ๋ด์ฉ์ ๋ชจ๋ ํฌํจํ๋ ๊ฒ์์ผ๋ก UNION ์ฐ์ฐ์ ํตํด ์ผ์ชฝ ๊ธฐ์ค์ผ๋ก ์กฐ์ธํ ํ ์ด๋ธ, ์ค๋ฅธ์ชฝ ๊ธฐ์ค์ผ๋ก ์กฐ์ธํ ํ ์ด๋ธ์ ํฉ์ณ์ฃผ๋ฉด ๋ฉ๋๋ค.
์ฟผ๋ฆฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค.
SELECT student_id, student_name, age, sex, Department
FROM students_info NATURAL LEFT OUTER JOIN students_Department
UNION
SELECT student_id, student_name, age, sex, Department
FROM students_info NATURAL RIGHT OUTER JOIN students_Department;
์ด๋ ๊ฒ ๋ ์ฟผ๋ฆฌ๋ฅผ ํฉ์ณ์ฃผ๋ ๊ฒ์ผ๋ก Full Outer Join์ ๊ตฌํํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ช ์ฌํด์ผํ ๋ถ๋ถ์ UNION ๊ฐ์ ์งํฉ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋, ๋ ํ ์ด๋ธ์ ์์ฑ์ ์์๊ฐ ๋์ผํด์ผํ๊ธฐ ๋๋ฌธ์, SELECT ๋ฌธ์์ ์์ฑ์ด๋ฆ์ ์์๋ฅผ ์ง์ ํด์ค์ผํ๋ค๋ ๊ฒ์ ๋๋ค.
'๐ฎ ์จ-์์ค > ๐ ๋ฐ์ดํฐ๋ฒ ์ด์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํธ๋์ญ์ (Transaction) (0) | 2021.09.05 |
---|---|
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ํค(Keys) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ ๊ทํ(Normalization) (0) | 2021.09.05 |
[๋ฐ์ดํฐ๋ฒ ์ด์ค] ์ด์ ํ์(Anomaly) (0) | 2021.09.05 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote