* JOIN
2๊ฐ ์ด์์ ํ ์ด๋ธ์ ๋ํด ์ฐ๊ด๋ ํํ์ ๊ฒฐํฉํ๋ฉฐ ํ๋์ ์๋ก์ด ๋ฆด๋ ์ด์ ์ ๋ฐํ ๋๋ ์ํ๋ ๊ฐ์ ์ฐพ๋ ๊ฒ
1. INNER JOIN
: ์ผ์นํ๋ ๋ถ๋ถ๋ง ์กฐ์ธ
: ์กฐ๊ฑด์ด ์๋ INNER JOIN์ ํ๋ฉด CROSS JOIN๊ณผ ๋์ผํ ๊ฒฐ๊ณผ
1) ๋๋ฑ์กฐ์ธ(EQUI JOIN)
: ๋์ ํ ์ด๋ธ์ ๋ํ ๊ณตํต์์ฑ์ ๊ธฐ์ค์ผ๋ก '=' ์ฐ์ฐ์ ๋น๊ต์ ์ํด ๊ฐ์ ๊ฐ์ ๊ฐ์ง๋ ํ์ ์ฐ๊ฒฐํ์ฌ ๊ฒฐ๊ณผ ์์ฑ
: ์ฐ๊ฒฐ๊ณ ๋ฆฌ์ธ ๊ณตํต์์ฑ โก๏ธ JOIN ์์ฑ
ํํ โ '=' ์ฐ์ฐ์๋ฅผ ์ด์ฉํ์ฌ WHERE์ ์ ์กฐ๊ฑด์ผ๋ก ์ค์
ํํ โก NATURAL JOIN : ์๋์ผ๋ก ๊ณตํต์์ฑ์ ์ฐพ์ ์กฐ์ธ
ํํ โข USING(๊ณตํต์์ฑ๋ช ) : ํด๋น ๊ณตํต์์ฑ๊ฐ์ด ์ผ์นํ๋๊ฒ์ด ์๋์ผ๋ก ์กฐ์ธ
-- SELECT ํ
์ด๋ธ1.์์ฑ, ํ
์ด๋ธ2.์์ฑ, ... FROM ํ
์ด๋ธ๋ช
1, ํ
์ด๋ธ๋ช
2 WHERE ํ
์ด๋ธ1.์์ฑ=ํ
์ด๋ธ2.์์ฑ;
-- SELECT ํ
์ด๋ธ1.์์ฑ, ํ
์ด๋ธ2.์์ฑ, ... FROM ํ
์ด๋ธ๋ช
1 NATURAL JOIN ํ
์ด๋ธ๋ช
;
-- SELECT ํ
์ด๋ธ1.์์ฑ, ํ
์ด๋ธ2.์์ฑ, ... FROM ํ
์ด๋ธ๋ช
1 JOIN ํ
์ด๋ธ๋ช
2 USING(๊ณตํต์์ฑ๋ช
);
SELECT ํ๋ฒ, ์ด๋ฆ, ํ์.ํ๊ณผ์ฝ๋, ํ๊ณผ๋ช
FROM ํ์, ํ๊ณผ WHERE ํ์.ํ๊ณผ์ฝ๋=ํ๊ณผ.ํ๊ณผ์ฝ๋;
SELECT ํ๋ฒ, ์ด๋ฆ, ํ์.ํ๊ณผ์ฝ๋, ํ๊ณผ๋ช
FROM ํ์ NATURAL JOIN ํ๊ณผ;
SELECT ํ๋ฒ, ์ด๋ฆ, ํ์.ํ๊ณผ์ฝ๋, ํ๊ณผ๋ช
FROM ํ์ JOIN ํ๊ณผ USING(ํ๊ณผ์ฝ๋);
2) ๋น๋๋ฑ์กฐ์ธ(NON-EQUI JOIN)
: JOIN์กฐ๊ฑด์ด '=' ์กฐ๊ฑด์ด ์๋ ๋น๊ต์ฐ์ฐ์(>,<,<>,<=,>=)๋ฅผ ์ด์ฉํ๋ JOIN๋ฐฉ๋ฒ
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1, ํ
์ด๋ธ2 WHERE ๋น๊ต์กฐ๊ฑด์;
SELECT ํ๋ฒ, ์ด๋ฆ, ์ฑ์ , ๋ฑ๊ธ FROM ํ์, ์ฑ์ ๋ฑ๊ธ
WHERE ํ์.์ฑ์ BETWEEN ์ฑ์ ๋ฑ๊ธ.์ต์ AND ์ฑ์ ๋ฑ๊ธ.์ต๊ณ ;
2. OUTER JOIN
: ์กฐ์ธ์กฐ๊ฑด์ ๋ง์ง ์๋ ํํ๋ ๊ฒฐ๊ณผ๋ก ์ถ๋ ฅํ๊ธฐ์ํ ์กฐ์ธ๋ฐฉ๋ฒ
: ON ๋ค์ ์กฐ์ธ์กฐ๊ฑด ๋ช ์
1) LEFT OUTER JOIN
: ์ผ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์ ๋ถ ์ถ๋ ฅํ๋ ์๋ ๊ฐ์ NULL๋ก ์ถ๋ ฅ
: WHERE ์กฐ๊ฑด์์ผ๋ก ํ๊ธฐ์ NULL๋ก ์ถ๋ ฅํ ํ ์ด๋ธ(์ฐ์ธก) ์ชฝ์ '(+)' ๊ธฐํธ ๋ถ์
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1 LEFT OUTER JOIN ํ
์ด๋ธ2 ON ํ
์ด๋ธ๋ช
1.์์ฑ=ํ
์ด๋ธ๋ช
2.์์ฑ;
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1,ํ
์ด๋ธ2 WHERE ํ
์ด๋ธ1.์์ฑ=ํ
์ด๋ธ2.์์ฑ(+);
2) RIGHT OUTER JOIN
: ์ค๋ฅธ์ชฝ ํ ์ด๋ธ์ ๊ธฐ์ค์ผ๋ก ์ ๋ถ ์ถ๋ ฅํ๋ ์๋ ๊ฐ์ NULL๋ก ์ถ๋ ฅ
: WHERE ์กฐ๊ฑด์์ผ๋ก ํ๊ธฐ์ NULL๋ก ์ถ๋ ฅํ ํ ์ด๋ธ(์ข์ธก) ์ชฝ์ '(+)' ๊ธฐํธ ๋ถ์
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1 RIGHT OUTER JOIN ํ
์ด๋ธ2 ON ํ
์ด๋ธ๋ช
1.์์ฑ=ํ
์ด๋ธ๋ช
2.์์ฑ;
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1,ํ
์ด๋ธ2 WHERE ํ
์ด๋ธ1.์์ฑ(+)=ํ
์ด๋ธ2.์์ฑ;
3) FULL OUTER JOIN
: INNER JOIN์ ๊ฒฐ๊ณผ๋ฅผ ๊ตฌํ ๋ค ํํ์ด ๋ง์ง์๋ ํ ์ข์ฐ ๋ชจ๋ NULL๊ฐ์ ๊ธฐ์
-- SELECT ์์ฑ FROM ํ
์ด๋ธ1 FULL OUTER JOIN ํ
์ด๋ธ2 ON ํ
์ด๋ธ1.์์ฑ=ํ
์ด๋ธ2.์์ฑ;
3. SELF JOIN
: ๊ฐ์ ํ ์ด๋ธ์์ 2๊ฐ์ ์์ฑ์ ์ฐ๊ฒฐํ์ฌ EQUI JOINํ๋ ๊ฒ
: ํ๋์ ํ ์ด๋ธ์ด๋ฏ๋ก ๋ฐ๋์ ๋ณ์นญ์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถ
* 1999 JOIN
1. CROSS JOIN : ์กฐ์ธํ ์ด๋ธ์ ๋ชจ๋ ํ์ ๊ต์ฐจ์กฐ์ธ โก๏ธ CARTASIAN PRODUCT : ์กฐ์ธ์กฐ๊ฑด ๋ช ์ํ์ง ์์
SELECT ๊ฒ์๋์ FROM ํ
์ด๋ธ1 [CROSS]JOIN ํ
์ด๋ธ2;
2. NATURAL JOIN : ์กฐ์ธํ ์ด๋ธ์ "๋ฑ ํ๋"์ ๋์ผํ ์ปฌ๋ผ๋ช ์ ๋์ผ๊ฐ์ ๋ํด ์๋ ์กฐ์ธ
SELECT ๊ฒ์๋์ FROM ํ
์ด๋ธ๋ช
1 NATURAL JOIN ํ
์ด๋ธ๋ช
2;
-- ๋์ผํ ์ปฌ๋ผ๋ช
์ด ํ๋๊ฐ ์๋๊ฒฝ์ฐ USING๊ตฌ๋ฌธ ์ฌ์ฉ
SELECT ๊ฒ์๋์ FROM ํ
์ด๋ธ๋ช
1 JOIN ํ
์ด๋ธ๋ช
2 USING(๊ธฐ์ค๋์ผ์ปฌ๋ผ๋ช
);
3. INNER JOIN : ๋์ผ ์กฐ๊ฑด์ด ๋ง์ ๊ฒฝ์ฐ ์กฐ์ธ
SELECT ๊ฒ์๋์ FROM ํ
์ด๋ธ๋ช
1 [INNER] JOIN ํ
์ด๋ธ๋ช
2 ON ์กฐ์ธ์กฐ๊ฑด;
4. OUTER JOIN : ์กฐ๊ฑด์ด ๋ง์ง ์๋ ๊ฒฝ์ฐ๋ NULL๊ฐ์ ๊ธฐ๋กํ์ฌ ์กฐ์ธ
SELECT ๊ฒ์๋์ FROM ํ
์ด๋ธ๋ช
1 {LEFT|RIGHT|FULL} [OUTER] JOIN ํ
์ด๋ธ๋ช
2 ON ์กฐ์ธ์กฐ๊ฑด;
'DB' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DBMS์ ์๊ธฐ์ , ORM (0) | 2020.09.09 |
---|---|
๋ฐ์ดํฐ ๋ถ์ํจ์ (์ง๊ณํจ์, ๊ทธ๋ฃนํจ์, ์๋์ฐํจ์) (0) | 2020.09.08 |
์ ๊ทํ์ ๋ฐ์ ๊ทํ (0) | 2020.09.07 |
DB๋ชจ๋ธ๋ง, ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค, ๊ด๊ณ๋์, ๊ด๊ณํด์, DB Mapping์ฉ์ด (0) | 2020.09.07 |
๋๊ธ