
[JOIN ์ฉ์ด ์ ๋ฆฌ]
๋ฑ๊ฐ ์กฐ์ธ ๋ด๋ถ ์กฐ์ธ(INNER JOIN), JOIN USING / ON
+ ์์ฐ ์กฐ์ธ(NATURAL JOIN, ๋ฑ๊ฐ ์กฐ์ธ ๋ฐฉ๋ฒ ์ค ํ๋)
ํฌ๊ด ์กฐ์ธ ์ผ์ชฝ ์ธ๋ถ ์กฐ์ธ(LEFT OUTER), ์ค๋ฅธ์ชฝ ์ธ๋ถ ์กฐ์ธ(RIGHT OUTER)
+ ์ ์ฒด ์ธ๋ถ ์กฐ์ธ(FULL OUTER, ์ค๋ผํด ๊ตฌ๋ฌธ์ผ๋ก๋ ์ฌ์ฉ ๋ชปํจ)
์นดํ
์์(์นดํฐ์
) ๊ณฑ ๊ต์ฐจ ์กฐ์ธ(CROSS JOIN)
CARTESIAN PRODUCT
-- JOIN
-- ํ๋ ์ด์์ ํ
์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉ.
-- ์ํ ๊ฒฐ๊ณผ๋ ํ๋์ Result Set์ผ๋ก ๋์ด.
-- (์ฐธ๊ณ ) JOIN์ ์๋ก ๋ค๋ฅธ ํ
์ด๋ธ์ ํ์ ํ๋์ฉ ์ด์ด ๋ถ์ด๊ธฐ ๋๋ฌธ์
-- ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ๋จ์ ์ด ์๋ค!
๊ธฐ๋ณธ์ ์ผ๋ก JOIN์ INNER JOIN์ด๋ฉฐ
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ ์กฐ์ธํ ๋ ์ผ์นํ๋ ๊ฐ์ด ์๋ ํ์ ์กฐ์ธ์์ ์ ์ธ๋จ
OUTER JOIN์ ์ผ์นํ์ง ์์ ๊ฐ๋ ํฌํจ์ด ๋๋ฉฐ ๋ฐ๋์ OUTER JOIN ๋ช ์

SELECT <์ด ๋ชฉ๋ก>
FROM <์ฒซ ๋ฒ์งธ ํ
์ด๋ธ>
INNER JOIN <๋ ๋ฒ์งธ ํ
์ด๋ธ>
ON <์กฐ์ธ ์กฐ๊ฑด>
[WHERE ๊ฒ์ ์กฐ๊ฑด]
#INNER JOIN์ JOIN์ด๋ผ๊ณ ๋ง ์จ๋ INNER JOIN์ผ๋ก ์ธ์ํฉ๋๋ค.

SELECT <์ด ๋ชฉ๋ก>
FROM <์ฒซ ๋ฒ์งธ ํ
์ด๋ธ(LEFT ํ
์ด๋ธ)>
<LEFT | RIGHT | FULL> OUTER JOIN <๋ ๋ฒ์งธ ํ
์ด๋ธ(RIGHT ํ
์ด๋ธ)>
ON <์กฐ์ธ ์กฐ๊ฑด>
[WHERE ๊ฒ์ ์กฐ๊ฑด]

ํ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ๊ณผ ๋ค๋ฅธ ์ชฝ ํ
์ด๋ธ์ ๋ชจ๋ ํ์ ์กฐ์ธ์ํค๋ ๊ธฐ๋ฅ์
๋๋ค. ์ํธ ์กฐ์ธ ๊ฒฐ๊ณผ์ ์ ์ฒด ํ ๊ฐ์๋ ๋ ํ
์ด๋ธ์ ๊ฐ ํ์ ๊ฐ์๋ฅผ ๊ณฑํ ์๋งํผ ๋ฉ๋๋ค.
์นดํฐ์
๊ณฑ(CARTESIAN PRODUCT)๋ผ๊ณ ๋ ํฉ๋๋ค.
SELECT *
FROM <์ฒซ ๋ฒ์งธ ํ
์ด๋ธ>
CROSS JOIN <๋ ๋ฒ์งธ ํ
์ด๋ธ>

์์ฒด(SELF) ์กฐ์ธ์ ์๊ธฐ ์์ ๊ณผ ์กฐ์ธํ๋ฏ๋ก 1๊ฐ์ ํ ์ด๋ธ์ ์ฌ์ฉํฉ๋๋ค. ๋ณ๋์ ๋ฌธ๋ฒ์ด ์๋ ๊ฒ์ ์๋๊ณ 1๊ฐ๋ก ์กฐ์ธํ๋ฉด ์์ฒด ์กฐ์ธ์ด ๋ฉ๋๋ค.
SELECT <์ด ๋ชฉ๋ก>
FROM <ํ
์ด๋ธ> ๋ณ์นญA
INNER JOIN <ํ
์ด๋ธ> ๋ณ์นญB
[WHERE ๊ฒ์ ์กฐ๊ฑด]

Natural Join์ ์ฌ์ฉํ๋ฉด ๊ณตํต๋ ์์ฑ์ ์ฐพ์ ๊ฐ์ ๊ฐ์ ๊ฐ๋ ํญ๋ชฉ๋ผ๋ฆฌ ๊ฒฐํฉ์์ผ์ค๋ค.
๋ง์ฝ ๊ฐ์ ๊ฐ์ ๊ฐ๋ ํญ๋ชฉ์ด ์๋ค๋ฉด ํด๋น ํญ๋ชฉ์ ์ ์ธํ๋ค.

ํ๋ ์ด์์ ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐํํ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์ํ ๊ฒฐ๊ณผ๋ ํ๋์ Result Set์ผ๋ก ๋์ด
-- ์ฌ์ ์ด๋ฆ, ๋ถ์๋ช , ์ง์ญ๋ช ์กฐํ
-- EMP_NAME(EMPLOYEE)
-- DEPT_TITLE(DEPARTMENT)
-- LOCAL_NAME(LOTATION)
-- ORACLE
SELECT EMP_NAME, DEPT_TITLE, LOCAL_NAME
FROM EMPLOYEE, DEPARTMENT, LOCATION
WHERE DEPT_CODE = DEPT_ID -- EMPLOYEE + DEPARTMENT ์กฐ์ธ
AND LOCATION_ID = LOCAL_CODE; -- (EMPLOYEE + DEPARTMENT) + LOCATION ์กฐ์ธ