๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
DB

JOIN(INNER/OUTER/SELF) , 1999JOIN(CROSS,NATURAL,INNER,OUTER)

by ๐Ÿ’œautumn 2020. 9. 8.

* 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 ์กฐ์ธ์กฐ๊ฑด;

๋Œ“๊ธ€