
๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ ํ
์ด๋ธ์ ๋๋ ์ค๊ณํ๊ณ ,
ํ์ํ ๋ ์กฐ์ธ(JOIN) ์ผ๋ก ์ฐ๊ฒฐํด ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ!
์ด๋ฒ ๊ธ์์๋ INNER JOIN, OUTER JOIN, NATURAL JOIN ๋ฑ์ ๊ฐ๋ ์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค.
JOIN์ ๋ ๊ฐ ์ด์์ ํ
์ด๋ธ์ ๊ณตํต๋ ์ปฌ๋ผ(ํค) ์ ๊ธฐ์ค์ผ๋ก ์ฐ๊ฒฐํด
ํ๋์ ๊ฒฐ๊ณผ ํ
์ด๋ธ๋ก ๋ง๋๋ SQL ๋ฌธ๋ฒ์
๋๋ค.
๐ ํ์ค์ ์:
๊ณ ๊ฐ ์ ๋ณด๋Customer, ์ฃผ๋ฌธ ์ ๋ณด๋Orders์ ๋ฐ๋ก ์ ์ฅ
โ ๊ณ ๊ฐ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ํ ์ด๋ธ์ ์กฐ์ธํ์ฌ "๋๊ฐ ๋ฌด์์ ์ฃผ๋ฌธํ๋๊ฐ"๋ฅผ ์ ์ ์์!
SELECT ์ปฌ๋ผ๋ช
FROM ํ
์ด๋ธ1
JOIN ํ
์ด๋ธ2 ON ์กฐ๊ฑด;
SELECT ์ปฌ๋ผ๋ช
FROM ํ
์ด๋ธ1, ํ
์ด๋ธ2
WHERE ์กฐ๊ฑด;



โข ์์ชฝ ํ
์ด๋ธ์์ ์กฐ๊ฑด์ ๋ง๋ ํ๋ง ์ฐ๊ฒฐ
โข ๊ฐ์ฅ ์ผ๋ฐ์ ์ด๊ณ ๋ง์ด ์ฌ์ฉ๋จ
SELECT C.name, O.book
FROM Customer C
JOIN Orders O ON C.custid = O.custid;

โข Customer์ Orders ๋ ๋ค custid๊ฐ ์กด์ฌํ๋ ํ๋ง ์ถ๋ ฅ
โข custid = 3 (๋ฐ๋ฏผ์)์ ์ฃผ๋ฌธ ๊ธฐ๋ก์ด ์์ด์ ์ ์ธ๋จ
โข custid = 5๋ Orders์ ์์ง๋ง Customers์ ์์ด์ ์ ์ธ๋จ
์กฐ๊ฑด์ ๋ง์ง ์๋๋ผ๋ ํ์ชฝ ํ
์ด๋ธ์ ํ์ ์ ์งํ๋ JOIN
โ ๋๋ฝ๋ ์ ๋ณด๊น์ง ํฌํจํ๊ณ ์ถ์ ๋ ์ฌ์ฉ
| JOIN ์ข ๋ฅ | ๊ธฐ์ค ํ ์ด๋ธ ์ ์ง | ์กฐ์ธ ์กฐ๊ฑด ๋ถ์ผ์น ์ | ํฌํจ ์ฌ๋ถ | ์ค๋ช |
|---|---|---|---|---|
| LEFT OUTER JOIN | ์ผ์ชฝ ํ ์ด๋ธ | ์ค๋ฅธ์ชฝ NULL ์ฑ์ | โ (์ผ์ชฝ ๊ธฐ์ค) | ์ผ์ชฝ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ํฌํจ |
| RIGHT OUTER JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ | ์ผ์ชฝ NULL ์ฑ์ | โ (์ค๋ฅธ์ชฝ ๊ธฐ์ค) | ์ค๋ฅธ์ชฝ ๋ฐ์ดํฐ๋ ๋ฌด์กฐ๊ฑด ํฌํจ |
| FULL OUTER JOIN | ์์ชฝ ๋ชจ๋ | ์๋ก NULL ์ฑ์ | โ (์ ์ฒด ์ ์ง) | ์์ชฝ ํ ์ด๋ธ ๋ชจ๋ ์ ์ง (DBMS์ ๋ฐ๋ผ ์ ํ) |
SELECT C.name, O.book
FROM Customer C
LEFT OUTER JOIN Orders O ON C.custid = O.custid;

โข Customer์ ์๋ ๋ชจ๋ ๊ณ ๊ฐ์ด ๊ธฐ์ค์ด ๋จ
โข ์ฃผ๋ฌธ์ด ์๋ ๊ณ ๊ฐ(๋ฐ๋ฏผ์, ์ ์๋ฆฐ)๋ ๊ฒฐ๊ณผ์ ํฌํจ๋จ
โข ๋์ ์ฐ๊ฒฐ๋ ์ฃผ๋ฌธ์ด ์์ผ๋ฏ๋ก book์ NULL๋ก ๋์ด
SELECT C.name, O.book
FROM Customer C
RIGHT OUTER JOIN Orders O ON C.custid = O.custid;

โข Orders ํ ์ด๋ธ์ ๋ชจ๋ ์ฃผ๋ฌธ์ ๊ธฐ์ค์ผ๋ก
โข ๊ณ ๊ฐ ์ ๋ณด๊ฐ ์๋ ์ฃผ๋ฌธ(custid = 5)๋ ๊ฒฐ๊ณผ์ ํฌํจ
โข ํด๋น ๊ณ ๊ฐ์ด ์์ผ๋ฏ๋ก name์ NULL
โข ๊ณตํต๋ ์์ฑ๋ช
์ด ์์ผ๋ฉด ์๋์ผ๋ก ์กฐ์ธ
โข ์ค๋ณต๋ ์ปฌ๋ผ์ 1๊ฐ๋ก ์ถ๋ ฅ๋จ (์ง๊ด์ ์ด์ง๋ง ์์ธก ๋ถ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์์)
SELECT *
FROM Book
NATURAL JOIN Orders;

bookid๊ฐ ์์ชฝ ํ ์ด๋ธ์ ๊ฐ์ ์ด๋ฆ์ผ๋ก ์กด์ฌํ๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ด ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก JOINํจ
์ค๋ณต๋ bookid๋ ๊ฒฐ๊ณผ์ ํ ๋ฒ๋ง ์ถ๋ ฅ๋จ

SELECT E.name AS ์ง์, M.name AS ์์ฌ
FROM Employee E
JOIN Employee M ON E.managerid = M.empid;

Employee ํ ์ด๋ธ์ E, M ๋ ๋ฒ ์ฌ์ฉํด์
E์ managerid = M์ empid ์ธ ๊ฒฝ์ฐ ์กฐ์ธ
์ฆ, โ์ด ์ง์์ ์์ฌ๋ ๋๊ตฌ์ธ๊ฐ?โ๋ฅผ ํํํ ์
-- ๊ณ ๊ฐ ์ด๋ฆ๊ณผ ์ฃผ๋ฌธํ ๋์์ ์ด๋ฆ
SELECT C.name, B.bookname
FROM Customer C
JOIN Orders O ON C.custid = O.custid
JOIN Book B ON O.bookid = B.bookid;
-- ์ฃผ๋ฌธํ์ง ์์ ๊ณ ๊ฐ๋ ํฌํจ (LEFT OUTER JOIN)
SELECT C.name, O.orderid
FROM Customer C
LEFT OUTER JOIN Orders O ON C.custid = O.custid;
| JOIN ์ข ๋ฅ | ์ค๋ช | ๋๋ฝ ๋ฐ์ดํฐ ํฌํจ ์ฌ๋ถ |
|---|---|---|
| INNER JOIN | ์์ชฝ ํ ์ด๋ธ ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ๋ง ๋ฐํ | โ |
| LEFT OUTER JOIN | ์ผ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ + ๋งค์นญ๋๋ ์ค๋ฅธ์ชฝ ํ | โ (์ผ์ชฝ ๊ธฐ์ค) |
| RIGHT OUTER JOIN | ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ + ๋งค์นญ๋๋ ์ผ์ชฝ ํ | โ (์ค๋ฅธ์ชฝ ๊ธฐ์ค) |
| FULL OUTER JOIN | ์์ชฝ ํ ์ด๋ธ์ ๋ชจ๋ ํ์ ํฌํจ (๋งค์นญ ์ ๋ผ๋ ํฌํจ) | โ (์์ชฝ ๋ค ์ ์ง) |
| NATURAL JOIN | ๊ณตํต ์์ฑ ์๋ ์กฐ์ธ, ์ค๋ณต ์์ฑ์ 1๊ฐ๋ก ์ ๋ฆฌ๋จ | ์กฐ๊ฑด ์๋ ์ถ๋ก |
| SELF JOIN | ์๊ธฐ ์์ ๊ณผ ์กฐ์ธํ์ฌ ๊ณ์ธต์ /๊ด๊ณ์ ๊ตฌ์กฐ ํํ | - |
๐ ํ์ต ํ
โข INNER JOIN์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด์ ์์ ํ ์ ํ
โข OUTER JOIN์ ๋ฐ์ดํฐ ๋๋ฝ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ๊ณ ์ถ์ ๋
โข JOIN์ด ๋ง์์ง๋ฉด ์์์ ON ์กฐ๊ฑด์ ์ ํํ ํ์ธํด์ผ ํจ
โข ๋ณ์นญ(alias)์ ์ ํ์ฉํ๋ฉด ๊ฐ๋ ์ฑ์ด ๋์์ง