songining
article thumbnail

FROM ์ ˆ์˜ JOIN ํ˜•ํƒœ

(์ถ”๊ฐ€๋œ ์„ ํƒ ๊ธฐ๋Šฅ์œผ๋กœ ํ…Œ์ด๋ธ” ๊ฐ„์˜ JOIN ์กฐ๊ฑด์„ FROM์ ˆ์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.)

-INNER JOIN

-NATURAL JOIN

-USIN ์กฐ๊ฑด์ ˆ

-ON ์กฐ๊ฑด์ ˆ

-CROSS JOIN

-OUTER JOIN 

 

โ€ปSQL server์˜ ๊ฒฝ์šฐ ON ์กฐ๊ฑด์ ˆ๋งŒ ์ง€์›ํ•˜๊ณ  NATURAL JOIN๊ณผ USING ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

1)INNER JOIN 

- ๋‚ด๋ถ€ JOIN์ด๋ผ๊ณ  ํ•˜๋ฉฐ JOIN ์กฐ๊ฑด์—์„œ ๋™์ผํ•œ ๊ฐ’์ด ์žˆ๋Š” ํ–‰๋งŒ ๋ฐ˜ํ™˜ํ•œ๋‹ค. 

- INNER JOIN ํ‘œ์‹œ๋Š” ๊ทธ๋™์•ˆ WHERE ์ ˆ์—์„œ ์‚ฌ์šฉํ•˜๋˜ JOIN ์กฐ๊ฑด์„ FROM์ ˆ์—์„œ ์ •์˜ํ•˜๊ฒ ๋‹ค๋Š” ํ‘œ์‹œ์ด๋ฏ€๋กœ

  ๋’ค์— ON, USING ๊ผญ ์จ์ฃผ์–ด์•ผ ํ•จ 

- ์˜ˆ์‹œ)

SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME

FROM EMP INNER JOIN DEPT 

ON EMP.DEPTNO = DEPT.DEPTNO; 

(INNER ํ‚ค์›Œ๋“œ๋Š” ์ƒ๋žต ๊ฐ€๋Šฅ) 

 

2)NATURAL JOIN 

๋‘ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ๋™์ผํ•œ ์ด๋ฆ„์„ ๊ฐ–๋Š” ๋ชจ๋“  ์ปฌ๋Ÿผ๋“ค์— ๋Œ€ํ•ด EQUI JOIN์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. 

- NATURAL JOIN์ด ๋ช…์‹œ๋˜์—ˆ์œผ๋ฉด, ์ถ”๊ฐ€๋กœ USING ์กฐ๊ฑด์ ˆ, ON ์กฐ๊ฑด์ ˆ, WHERE ์ ˆ์—์„œ JOIN ์กฐ๊ฑด์„ ์ •์˜ํ•  ์ˆ˜ ์—†๋‹ค. 

JOIN์— ์‚ฌ์šฉ๋œ ์นผ๋Ÿผ๋“ค์€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด์–ด์•ผ ํ•˜๋ฉฐ, ALIAS๋‚˜ ํ…Œ์ด๋ธ” ๋ช…๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๋‹ค. 

- ์˜ˆ์‹œ)

SELECT DEPTNO, EMPNO, ENAME, DNAME

FROM EMP NATURAL JOIN DEPT; 

 

3)USING ์กฐ๊ฑด์ ˆ 

FROM์ ˆ์˜ USING ์กฐ๊ฑด์ ˆ์„ ์ด์šฉํ•˜๋ฉด ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ์นผ๋Ÿผ๋“ค ์ค‘์—์„œ ์›ํ•˜๋Š” ์นผ๋Ÿผ์— ๋Œ€ํ•ด์„œ๋งŒ ์„ ํƒ์ ์œผ๋กœ EQUI JOINํ•  ์ˆ˜ ์žˆ๋‹ค. 

- NATURAL JOIN๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ JOIN์— ์‚ฌ์šฉ๋œ ์ปฌ๋Ÿผ๋“ค์€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด์–ด์•ผ ํ•˜๋ฉฐ, ALIAS๋‚˜ ํ…Œ์ด๋ธ” ๋ช…๊ณผ ๊ฐ™์€ ์ ‘๋‘์‚ฌ๋ฅผ ๋ถ™์ผ ์ˆ˜ ์—†๋‹ค. 

- ์˜ˆ์‹œ) 

SELECT DEPTNO, DNAME, DEPT.LOC

FROM DEPT JOIN DEPT_TEMP

USING (DEPTNO, DNAME); 

 

4)ON ์กฐ๊ฑด์ ˆ 

- ์ž„์˜์˜ JOIN ์กฐ๊ฑด์„ ์ง€์ •ํ•˜๊ฑฐ๋‚˜, ์ด๋ฆ„์ด ๋‹ค๋ฅธ ์นผ๋Ÿผ๋ช…์„ JOIN ์กฐ๊ฑด์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, JOIN ์นผ๋Ÿผ์„ ๋ช…์‹œํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š”

ON ์กฐ๊ฑด์ ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค.

- ON ์กฐ๊ฑด์ ˆ๊ณผ WHERE ๊ฒ€์ƒ‰์กฐ๊ฑด์„ ์ถฉ๋Œ ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

- WHERE ์ ˆ์˜ JOIN ์กฐ๊ฑด๊ณผ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋ฉด์„œ๋„, ๋ช…์‹œ์ ์œผ๋กœ JOIN์˜ ์กฐ๊ฑด์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค. 

- ์˜ˆ์‹œ)

SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME

FROM EMP E JOIN DEPT D

ON (E.DEPTNO = D.DEPTNO); 

 

SELECT E.ENAME, E.DEPTNO, D.DEPTNO, D.DNAME

FROM EMP E JOIN DEPT D

ON (E.DEPTNO = D.DEPTNO)

WHERE E.DEPTNO = 30;

(๊ด„ํ˜ธ๋Š” ์ƒ๋žต๊ฐ€๋Šฅ)

 

+) ON ์กฐ๊ฑด์ ˆ - ๋‹ค์ค‘ ์กฐ์ธ 

ํ™•์‹คํžˆ ํ…Œ์ด๋ธ”์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋ณต์žกํ•ด๋ณด์ธ๋‹ค๋Š” ๋‹จ์ ์ด ์กด์žฌ.

 

5) CROSS JOIN

 - JOIN ์กฐ๊ฑด์ด ์—†๋Š” ๊ฒฝ์šฐ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ์˜ ์กฐํ•ฉ 

 - ์–‘์ชฝ ์ง‘ํ•ฉ์˜ M*N ๊ฑด์˜ ๋ฐ์ดํ„ฐ ์กฐํ•ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. 

 

6) OUTER JOIN 

(+) ํ‘œ์‹œ์˜ ๋ฐ˜๋Œ€ํŽธ์— ์žˆ๋Š” ํ…Œ์ด๋ธ”์ด OUTER JOIN์˜ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์ด ๋œ๋‹ค. 

์กฐ์ธ์— ์‹คํŒจํ•œ ํ–‰๋“ค์˜ ๊ฒฝ์šฐ ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์€ ์นผ๋Ÿผ๋“ค์˜ ๊ฐ’์ด ํ‘œ์‹œ๋˜๊ณ , ๊ทธ ์™ธ ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์นผ๋Ÿผ๋“ค์€ NULL๋กœ ํ‘œ์‹œ๊ดธ๋‹ค.  

 

- LEFT OUTER JOIN 

์ขŒ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ฝ์€ ํ›„ ์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์šฐ์ธก ํ…Œ์ด๋ธ”์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์นผ๋Ÿผ๋“ค์€ ์กฐ์ธ ์กฐ๊ฑด ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ NULL ๊ฐ’์œผ๋กœ ์ฑ„์šด๋‹ค. 

LEFT JOIN์œผ๋กœ OUTER ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

- RIGHT OUTER JOIN 

์šฐ์ธก ํ…Œ์ด๋ธ”์— ํ•ด๋‹นํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ์ฝ์€ ํ›„ ์ขŒ์ธก ํ…Œ์ด๋ธ”์—์„œ JOIN ๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์•„๊นŒ์™€ ๋ฐ˜๋Œ€๋กœ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. 

RIGHT JOIN์œผ๋กœ OUTER ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

- FULL OUTER JOIN 

์กฐ์ธ ์ˆ˜ํ–‰์‹œ ์ขŒ์ธก, ์šฐ์ธก ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด ์กฐ์ธํ•œ๋‹ค. 

์ฆ‰ ํ…Œ์ด๋ธ” A,B๊ฐ€ ์žˆ์„ ๋–„ A์™€ B๊ฐ€ ๋ชจ๋‘ ๊ธฐ์ค€์ด ๋œ๋‹ค. 

UNION ALL ์ด ์•„๋‹Œ UNION ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์œผ๋ฏ€๋กœ ์ค‘๋ณต๋˜๋Š” ๋ฐ์ดํ„ฐ๋Š” ์‚ญ์ œํ•œ๋‹ค. 

FULL JOIN์œผ๋กœ OUTER ํ‚ค์›Œ๋“œ๋ฅผ ์ƒ๋žตํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.