1 ๋ถ„ ์†Œ์š”

๐Ÿ“– JOIN

์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ๋ณ‘ํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๋กœ ๋ฝ‘์•„๋‚ด๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

https://data-marketing-bk.tistory.com/entry/SQL-JOIN-ํ•œ-๋ฐฉ์—-์ •๋ฆฌ-๊ฐœ๋…๋ถ€ํ„ฐ-์ฝ”๋“œ๊นŒ์ง€-์ด๊ฒƒ๋งŒ-๋ณด์ž

์‹ค๋ฌด ์˜ˆ์‹œ๋Š” ์ด ๋ธ”๋กœ๊ทธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค.

์˜ˆ์‹œ ํ…Œ์ด๋ธ”

tableA.png

table.B.png

1) INNER JOIN

๊ต์ง‘ํ•ฉ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐœ๋…์ด๋‹ค.

innerjoin.png

  • ํ…Œ์ด๋ธ”์— ๋ณ„๋ช…์„ ์ค˜์„œ ์กฐ์ธ์„ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ, ๋ณ„๋ช…์„ ์ค€ ๊ฒฝ์šฐ์—๋Š” ๋ฐ˜๋“œ์‹œ ๊ทธ ๋ณ„๋ช… ๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์ œ์ผ ๊ธฐ๋ณธ์ด ๋˜๋Š” ์กฐ์ธ์œผ๋กœ ์–ด๋–ค ์กฐ์ธ์ธ์ง€ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  join ์ด๋ผ๊ณ ๋งŒ ์ ์œผ๋ฉด inner join์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.
  • ์‹ค๋ฌด ์˜ˆ์‹œ : ์‹ ๋ฐœ ์ œํ’ˆ๊ณผ ์˜๋ฅ˜ ์ œํ’ˆ์„ ๋ชจ๋‘ ๊ตฌ๋งคํ•œ ๊ณ ๊ฐ๋“ค์„ ๊ฒ€์ƒ‰

2) OUTER JOIN

INNER JOIN + ๊ณตํ†ต๋˜์ง€ ์•Š์€ ๋ ˆ์ฝ”๋“œ

LEFT OUTER JOIN

leftouterjoin.png

  • FROM TABLE์ด ๊ธฐ์ค€์ด๋‹ค.
  • ์‹ค๋ฌด ์˜ˆ์‹œ : ์‹ ๋ฐœ์„ ๊ตฌ๋งคํ•œ ์‚ฌ๋žŒ๋“ค ์ค‘ ํ‹ฐ์…”์ธ ๋ฅผ ์‚ฐ ์‚ฌ๋žŒ๊ณผ ์•„๋‹Œ ์‚ฌ๋žŒ์„ ๊ตฌ๋ถ„ํ•ด์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

RIGHT OUTER JOIN

rightouterjoin.png

  • OUTER JOIN TABLE์ด ๊ธฐ์ค€์ด๋‹ค.
  • ์‹ค๋ฌด ์˜ˆ์‹œ : ํ‹ฐ์…”์ธ ๋ฅผ ๊ตฌ๋งคํ•œ ์‚ฌ๋žŒ๋“ค ์ค‘ ์‹ ๋ฐœ์„ ์‚ฐ ์‚ฌ๋žŒ๊ณผ ์•„๋‹Œ ์‚ฌ๋žŒ์„ ๊ตฌ๋ถ„ํ•ด์„œ ๋ณด๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ

FULL OUTER JOIN

fullouterjoin.png

  • ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์กฐํšŒ๋ฅผ ์œ„ํ•œ ํ•ฉ์ง‘ํ•ฉ์˜ ๊ฐœ๋…์œผ๋กœ ์‚ฌ์‹ค์ƒ ์‹ค๋ฌด์—์„œ๋Š” ๊ฑฐ์˜ ํ™œ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค.

Oracle-Specific ๋ฌธ๋ฒ•

specificouter.png

  • ์ด๋Ÿฐ ์‹์œผ๋กœ ์˜ค๋ฅธ์ชฝ์— (+)๋ฅผ ๋ถ™์ด๋ฉด left, ์™ผ์ชฝ์— (+)๋ฅผ ๋ถ™์ด๋ฉด right outer join์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  • full outer join์€ ์ด ๋ฌธ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

3) EQUI JOIN

  • ์‚ฌ์‹ค์ƒ inner join๊ณผ ๋™์ž‘์ด ๊ฐ™์œผ๋ฉฐ equi join์€ from ์ ˆ์— ํ…Œ์ด๋ธ” ๋‘ ๊ฐœ๋ฅผ ๋ช…์‹œํ•˜๊ณ  where ์ ˆ์—์„œ ์กฐ์ธ ์กฐ๊ฑด์„ ๋ช…์‹œํ•œ๋‹ค.
  • inner join์€ ์กฐ์ธ ์กฐ๊ฑด์„ on ์ ˆ์—์„œ ๋ช…์‹œํ•œ๋‹ค๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.
  • natural join์€ ๊ฐ™์€ ์†์„ฑ์„ ์ œ๊ฑฐํ•˜์—ฌ ํ•œ ๋ฒˆ๋งŒ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค(equi join์€ ์™€์ผ๋“œ ์นด๋“œ(*)๋กœ ์กฐํšŒ๋ฅผ ํ–ˆ์„ ๋•Œ, ๋‘ ๋ฒˆ์”ฉ ๋‚˜ํƒ€๋‚จ).

4) NON EQUI JOIN

์ปฌ๋Ÿผ ๊ฐ’์ด ์ผ์น˜ํ•˜์ง€ ์•Š์„ ๋Œ€ ์‚ฌ์šฉํ•˜๋ฉฐ, โ€˜=โ€™์ด์™ธ์˜ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. inner join, equi join๊ณผ ์‚ฌ์šฉ๋ฐฉ์‹์ด ๋™์ผํ•˜์ง€๋งŒ ์—ฐ์‚ฐ์ž๋งŒ ๋ฐ”๋€ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ™œ์šฉ ์˜ˆ์‹œ

์ง์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ๊ธ‰์—ฌ, ๊ธ‰์—ฌ ๋“ฑ๊ธ‰์„ ์กฐํšŒํ•˜์‹œ์˜ค.

#inner join ๊ตฌ๋ฌธ ๋ฐฉ์‹์œผ๋กœ non equi join ์ž‘์„ฑ
select empno, ename, sal, grade from emp
inner join salgrade
on sal >= losal and sal <= hisal;
#equi join ๊ตฌ๋ฌธ ๋ฐฉ์‹์œผ๋กœ non equi join ์ž‘์„ฑ
select empno, ename, sal, grade 
from emp, salgrade
where sal between losal and hisal;

noninnerjoin.png

5) SELF JOIN

๋™์ผํ•œ ํ…Œ์ด๋ธ”์—์„œ 2๊ฐœ์˜ ์†์„ฑ์„ ์—ฐ๊ฒฐํ•˜์—ฌ equi join์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ด ๋˜ํ•œ equi join ๋˜๋Š” inner join ๋‘ ๊ตฌ๋ฌธ ๋‹ค ํ™œ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ™œ์šฉ ์˜ˆ์‹œ

์ง์›์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„, ์ง์†์ƒ์‚ฌ์˜ ์‚ฌ๋ฒˆ, ์ด๋ฆ„์„ ์กฐํšŒํ•˜์‹œ์˜ค.

select e1.empno, e1.ename, e1.mgr, e2.ename from emp e1
inner join emp e2
on e1.mgr = e2.empno;

selfjoin.png

SET ์—ฐ์‚ฐ์ž

join์€ ๋‘ ํ…Œ์ด๋ธ”์„ ํ•ฉ์ณ์„œ ๊ฒฐ๊ณผ๋ฅผ ๋„์ถœํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๋ฉด, set์€ ๊ฐ๊ฐ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋จผ์ € ๋ฝ‘๊ณ , ํ•ฉ์นœ๋‹ค.

#๊ตฌ๋ฌธ
SELECT * FROM TBL1
[SET ์—ฐ์‚ฐ์ž]
SELECT * FROM TBL2;

1) UNION

2) UNION ALL

union์˜ ๊ฒฐ๊ณผ์—์„œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ๊ฒฐ๊ณผ

3) INTERSECT

4) MINUS

ํƒœ๊ทธ: ,

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ:

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ