๐ ์กฐ์ธ์ ์๊ธฐ์ ์ ๊ธฐ๋ณธ์ง์์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด๊ณ ๊ฐ๊ฒ ์ต๋๋ค.
ํ๋ณดํค ๊ธฐ๋ณธํค ๋์ฒดํค ์ํผํค ์ธ๋ํค ์ ์ผ์ฑ, ์ต์์ฑ ๋ง์กฑ , ๊ฐ ํด์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ์ต์ํ์ ์์ฑ๋ค์ ์งํฉ (๊ธฐ๋ณธํค๊ฐ ๋ ์ ์๋ ํ๋ณด๋ค) ์ ์ผ์ฑ, ์ต์ก์ฑ ๋ง์กฑ, ํ๋ณดํค๋ค ์ค์์ ํ๋๋ฅผ ์ ํํ ํค. null๊ฐ์ ์ ๋ ๊ฐ์ง ์ ์๊ณ , ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. ๊ธฐ๋ณธํค๋ก ์ ์ ๋์ง ์์ ํ๋ณดํค ์ ์ผ์ฑ๋ง ๋ง์กฑ. ๊ฐ ํ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ํ๋ ๋๋ ๊ทธ ์ด์์ ์์ฑ๋ค์ ์งํฉ ๋ค๋ฅธ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ ๋ ์๋ ๊ฐ์ ์ฐธ์กฐํ ์ ์๋๋ก ์ ์ฝ์ ์ฃผ๋ ๊ฒ. ํด๋น ํค๋ ์ฐธ์กฐ๋ ํ ์ด๋ธ์์ ๊ธฐ๋ณธํค๋ก ์ค์ ๋์ด ์์ด์ผ ํจ ๋ฐ์ดํฐ๋ฒ ์ด์ค : ์ผ์ ํ ๊ท์น์ผ๋ก ๊ตฌ์กฐํ๋์ด ์ ์ฅํ ๋ฐ์ดํฐ์ ๋ชจ์. ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ ์ด, ๊ด๋ฆฌํ๋ ํตํฉ ์์คํ ์ DBMS๋ผ๊ณ ํ๋ค.
๋ ๊ฐ ์ด์์ ํ ์ด๋ธ์ด๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ
//์ฒซ ๋ฒ์ฌ ํ
์ด๋ธ๋ ์ ํ์ ํ๋ฒ์ ํ๋์ฉ ์ฝ๊ณ ๊ทธ ๋ค์ ํ
์ด๋ธ์์๋ ํ์ ํ๋์ฉ ์ฝ์ด ์กฐ๊ฑด์ ๋ง๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ๊ฒฐ๊ด๊ฐ์ ๋ฐํ
for each row in t1 matching reference key {
for each row in t2 matching reference key {
if row satisfies jion conditions, send to client
}
}
> ๋น๋๋จ๊ณ : ์
๋ ฅ ํ
์ด๋ธ ์ค ํ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ด ํด์ ํ
์ด๋ธ์ ๋น๋ํ๋ ๋จ๊ณ
> ํ๋ก๋ธ ๋จ๊ณ : ๋ ์ฝ๋ ์ฝ๊ธฐ ์์, ๊ฐ ๋ ์ฝ๋์์ 'Person.country_id"์ ์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํ
A, B ํ
์ด๋ธ์ ๊ต์งํฉ, ์ค๋ณต๋ ๊ฐ์ ๋ณด์ฌ์ค๋ค.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
Aํ
์ด๋ธ์ ๊ฐ๊ณผ ์ค๋ณต๋ ๊ฐ๋ ํฌํจํ์ฌ ๋ณด์ฌ์ค๋ค. (๊ทธ๋ฅ A ํ
์ด๋ธ ์์ฒด), A๋ฅผ ๊ธฐ์ค์ผ๋ก JOINํ๋ค.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
// RIGTHT OUTER JOIN๋ ๋์ผํ ๋ก์ง
ํฉ์งํฉ.
A,Bํ
์ด๋ธ์ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๊ฒ์๋จ.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ ๋ถ ๊ฒ์๊ฐ๋ฅ.
3*4 = 12๊ฐ์ ์ผ์ด์ค๋ก ๊ฒ์๋จ.
SELECT
A.NAME, B.AGE
FROM EX_TABLE A
CROSS OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP
์๊ธฐ ์์ ๊ณผ ์์ ์ ์กฐ์ธํ๋ ๊ฒ
์์ ์ด ๊ฐ์ง ์นผ๋ผ์ ๋ค์ํ๊ฒ ๋ณํ์์ผ ํ์ฉํ ๋ ์ ์ฉ
SELECT
A.NAME, B.AGE
FROM EX_TABLE A, EX_TABLE B