์กฐ์ธ ์ด๋ (Join)
๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ด์ ์ฌ๋ฌ ํ ์ด๋ธ์์ ๊ฐ์ ธ์จ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ์ฌ ํ๋์ ํ ์ด๋ธ์ด๋ ๊ฒฐ๊ณผ ์งํฉ์ผ๋ก ํํํ๋ ๊ฒ์ Join ์ด๋ผ๊ณ ํ๋ค.
์ด๋ฌํ JOIN์ ๋ณดํต SELECT๋ฌธ๊ณผ ํจ๊ป ์์ฃผ ์ฌ์ฉ๋๋ฉฐ ํ์ค SQL์์๋ ๋ ์ฝ๋๋ฅผ ์กฐํฉํ๋ ๋ฐฉ์์ ๋ฐ๋ผ JOIN์ INNER JOIN, LEFT JOIN, RIGHT JOIN ์ผ๋ก ๊ตฌ๋ถํ๋ค.
๊ธฐ๋ณธ ์๋ฆฌ
Join์ ๊ธฐ๋ณธ ์๋ฆฌ๋ N ๊ฐ์ ํ ์ด๋ธ์ ์นดํ ์์ ๊ณฑ (Cartesian Product)์ผ๋ก ํ ์ด๋ธ์ ์กฐํฉํ๋ค๋ ๊ฒ์ ์๋ค.
์กฐ์ธ์ ํตํ์ฌ ํ์ํ ์ ๋ณด๋ฅผ ์กฐํํ๊ณ ์ ํ ๋๋ ์กฐ์ธ ์กฐ๊ฑด์ ๋ช ์ํด์ค์ผ ํ๋๋ฐ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ๊ฐ์ ํ ์ด๋ธ์ PK๋ FK์ ๊ด๊ณ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์ด ๊ฐ์ ํน์ ํ ๊ท์น์ ํตํด์ ๋ช ์ํ๋ค.
์๋ฅผ ๋ค์ด, N๊ฐ์ ํ ์ด๋ธ์ ์กฐ์ธํ ๋์๋ ์ต์ (N-1)๊ฐ์ ์กฐ์ธ ์กฐ๊ฑด์ด ํ์ํ๋ค!!
์กฐ์ธ ์ข ๋ฅ
Oracle ๊ธฐ์ค์ผ๋ก Join์ ์ข ๋ฅ๋ฅผ ์ด๊ฑฐํด๋ณด๋ฉด ๋ด๋ถ ์กฐ์ธ, ์ธ๋ถ ์กฐ์ธ, ๋๋ฑ ์กฐ์ธ, ์ํฐ ์กฐ์ธ, ์ ํ ์กฐ์ธ, ์ธ๋ฏธ ์กฐ์ธ, ์นดํ์์ ์กฐ์ธ, ASNI ์กฐ์ธ ๋ฑ 8๊ฐ์ง ์กฐ์ธ์ด ์กด์ฌํ๋ค.
์ด 8๊ฐ์ง ์กฐ์ธ์ ์ฌ์ค ์กฐ์ธ ๋ฐฉ๋ฒ์ด ์๋์ ์ผ๋ก ๋ ๋ฆฝ์ ์ธ ๊ฐ๋ ์ ์๋๋ฉฐ ๋ด๋ถ ์กฐ์ธ์ ์๋ ๊ฐ๋ ์ด ์ธ๋ถ ์กฐ์ธ์ด๋ฉฐ ์ธ๋ถ ์กฐ์ธ์ ์ ์ธํ ์ ํ ์กฐ์ธ, ์ํฐ ์กฐ์ธ, ์ธ๋ฏธ ์กฐ์ธ, ๋๋ฑ ์กฐ์ธ ๋ฑ์ ๋ชจ๋ ๋ด๋ถ ์กฐ์ธ์ ํฌํจ๋๋ค.
ํ๋ง๋๋ก Oracle์ด๋ MySQL์ด๋ ํ์ค SQL์์๋ Join์ ๋ด๋ถ ์กฐ์ธ (INNER JOIN)๊ณผ ์ธ๋ถ ์กฐ์ธ (Outer Join)์ผ๋ก ๊ตฌ๋ถํ๋ค๋ ๊ฒ์ด๋ค.
๋ํ, ์ธ๋ถ ์กฐ์ธ (Outer Join)์ ์ฌ์ค LEFT JOIN, RIGHT JOIN, FULL JOIN ์ด ์กด์ฌํ๋๋ฐ MySQL์์๋ FULL JOIN์ ์ง์ํ์ง ์๋๋ค.
๋ด๋ถ ์กฐ์ธ (Inner Join)
INNER JOIN์ ON ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ON ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ๋ง์ ๊ฐ์ ธ์ต๋๋ค.
์ฆ, ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ชฝ ๋ชจ๋์ ๊ฐ์ด ์๋ ํ (NOT NULL)๋ง์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด๋ค.
[ํ์]
SELECT <์ด ๋ชฉ๋ก>
FROM <๊ธฐ์ค ํ
์ด๋ธ>
[INNER] JOIN <์ฐธ์กฐํ ํ
์ด๋ธ>
ON <์กฐ์ธ ์กฐ๊ฑด>
[WHERE ๊ฒ์์กฐ๊ฑด]
INNER ํค์๋๋ ์๋ต ๊ฐ๋ฅํ๋ค.
์ธ๋ถ ์กฐ์ธ (Outer Join)
ํ์ง๋ง ํด๋น ๋ ์ฝ๋์ ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ํ๋ ๊ฐ์ ๋ชจ๋ NULL๋ก ํ์ํ๋ค.
RIGHT JOIN์ LEFT ์กฐ์ธ๊ณผ๋ ๋ฐ๋๋ก ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก, ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ์กฐํฉํ๋ JOIN์ด๋ฉฐ ์ด ๋ ON ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ ๋ฒ์งธ ํ ์ด๋ธ์ ํ๋ ๊ฐ์ ๊ทธ๋๋ก ๊ฐ์ ธ์จ๋ค.
ํ์ง๋ง ํด๋น ๋ ์ฝ๋์ ์ฒซ ๋ฒ์งธ ํ ์ด๋ธ์ ํ๋ ๊ฐ์ ๋ชจ๋ NULL๋ก ํ์ํ๋ค.
์ฆ, ์ผ๋ฐ ์กฐ์ธ์ ํ์ฅํ ๊ฐ๋ ์ผ๋ก ์กฐ์ธ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋ฐ์ดํฐ ๋ฟ๋ง ์๋๋ผ ์ด๋ ํ ์ชฝ ํ ์ด๋ธ์ ์กฐ์ธ ์กฐ๊ฑด์ ๋ช ์๋ ์ปฌ๋ผ์ ๊ฐ์ด ์๊ฑฐ๋ (NULL ์ด๋๋ผ๋) ํด๋น ํ (Row)๊ฐ ์์ ์๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ถ์ถํ๋ ๊ฒ์ด๋ค!
[ํ์]
SELECT <์ด ๋ชฉ๋ก>
FROM <์ฒซ ๋ฒ์งธ ํ
์ด๋ธ(LEFT)>
<LEFT | RIGHT> [OUTER] JOIN <๋ ๋ฒ์งธ ํ
์ด๋ธ(RIGHT)>
ON <์กฐ์ธ ์กฐ๊ฑด>
[WHERE ๊ฒ์์กฐ๊ฑด];
OUTER ํค์๋๋ ์๋ต ๊ฐ๋ฅํ๋ค.
'๐จโ๐ป Back End > MySQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํธ๋์ญ์ (Transaction) (0) | 2023.07.22 |
---|---|
๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด (0) | 2023.07.22 |
SubQuery (์๋ธ์ฟผ๋ฆฌ) (0) | 2023.07.22 |
SELECT๋ฌธ ๊ตฌ์กฐ ๋ฐ ์คํ ์์ (0) | 2023.07.22 |
ERD (Entity-Relationship Diagram) (0) | 2023.07.21 |