[DB] ORACLE - JOIN ์ •๋ฆฌ


ORACLE



1_jAt5tID0Kc9B-8AGbeBivw


JOIN


  • 2๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉ
  • FROM ์ ˆ์— ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ๋ช…์‹œํ•œ๋‹ค(View, Subquery๋„ ๊ฐ€๋Šฅ)
  • ๊ณตํ†ต๋œ ์ปฌ๋Ÿผ์ด ์—†๋‹ค๋ฉด, ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต์ปฌ๋Ÿผ์„ ๊ฐ€์ง„ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ JOINํ•œ ํ›„ ๋ชฉํ‘œ ํ…Œ์ด๋ธ”๊ณผ JOIN
  • ๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์กฐํ•ฉ ํ™•์ธ
SELECT * FROM TABLE1, TABLE2;
  • ๋งŒ์•ฝ ํ…Œ์ด๋ธ”1, ํ…Œ์ด๋ธ” 2์— ๊ฐ ๊ฐ 3๊ฐœ์˜ ์ •๋ณด๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํ•ฉํ•˜๋ฏ€๋กœ ์ด 9๊ฐœ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ด
  • ์กฐ๊ฑด์„ ๊ฑธ์–ด์„œ ๋ฐ์ดํ„ฐ์— ์•Œ๋งž์€ ๊ฐ’์„ ๋งค์นญ ์‹œ์ผœ์ค˜์•ผ ํ•จ


SELF JOIN

  • ์ž๊ธฐ ์ž์‹ ์˜ ํ…Œ์ด๋ธ”๊ณผ ํ•ฉ์น˜๋Š” ๊ฒƒ
  • ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ์ž์‹ ์˜ ํ…Œ์ด๋ธ”์— ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
SELECT a.์นผ๋Ÿผ๋ช…, b.์นผ๋Ÿผ๋ช… ...
FROM TABLE1 A JOIN TABLE1 B
ON A.์ปฌ๋Ÿผ = B.๋‹ค๋ฅธ์ปฌ๋Ÿผ 


INNER JOIN ์‚ฌ์šฉ๋ฒ•

  • ๋‘ ํ…Œ์ด๋ธ”์— ๊ต์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค
  • ๋‘ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต๋œ ๊ฐ’์„ ์ถœ๋ ฅํ•ด์ค€๋‹ค
SELECT * FROM TABLEA
INNER JOIN TABLEB
ON TABLEA.์ปฌ๋Ÿผ = TABLEB.์ปฌ๋Ÿผ


FULL OUTER JOIN

  • ๋‘ ํ…Œ์ด๋ธ”์— ํ•ฉ์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค
  • ๊ณตํ†ต๋œ ๊ฐ’๋“ค์€ ๊ณตํ†ต๋œ ๊ฐ’๋ผ๋ฆฌ ๋ฌถ์–ด์ ธ์„œ ๋‚˜์˜ค๊ณ , ๊ณตํ†ต๋˜์ง€ ์•Š์€ ๊ฐ’๋“ค๋„ ๋ชจ๋‘ ๋‹ค ์ถœ๋ ฅ๋จ
SELECT [TABLEA.]์†์„ฑ๋ช…,[TABLEB]์†์„ฑ๋ช… 
FROM TABLEA FULL OUTER JOIN TABLEB
ON TABLEA.์ปฌ๋Ÿผ = TABLEB.์ปฌ๋Ÿผ


LEFT OUTER JOIN

  • ๋‘ ํ…Œ์ด๋ธ” ์ค‘์—์„œ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์กฐ์ธ์‹œํ‚ฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•œ๋‹ค
  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”(TABLE A)์˜ ๊ฐ’์€ ๋ชจ๋‘ ๋‚˜์˜ค์ง€๋งŒ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” (TABLE B)์˜ ๊ฐ’์€ ๋งค์นญ๋˜๋Š”๊ฒŒ ์—†์œผ๋ฉด ์ถœ๋ ฅ๋˜์ง€์•Š์Œ
SELECT * FROM TABLEA
LEFT OUTER JOIN TABLEB
ON TABLEA.์นผ๋Ÿผ = TABLEB.์นผ๋Ÿผ


RIGHT OUTER JOIN

  • ๋‘ ํ…Œ์ด๋ธ” ์ค‘์—์„œ ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์กฐ์ธ์‹œํ‚ฌ ์ปฌ๋Ÿผ์˜ ๊ฐ’์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์‚ฌ์šฉํ•˜๊ฒŒ ๋œ๋‹ค
  • ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ” (TABLE B)์˜ ๊ฐ’์€ ๋ชจ๋‘ ๋‹ค ๋‚˜์˜ค์ง€๋งŒ ์™ผ์ชฝ ํ…Œ์ด๋ธ” (TABLE A)์˜ ๊ฐ’์€ ๋งค์นญ๋˜๋Š”๊ฒŒ ์—†์œผ๋ฉด ์ถœ๋ ฅ๋˜์ง€ ์•Š์Œ
SELECT * FROM TABLEB
RIGHT OUTER JOIN TABLEA
ON TABLEB.์นผ๋Ÿผ = TABLEA.์นผ๋Ÿผ


SUB QUERY

  • ํ•˜๋‚˜์˜ SQL๋ฌธ ์•ˆ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋˜ ๋‹ค๋ฅธ SQL๋ฌธ์„ ๋งํ•จ
  • ์˜ˆ๋ฅผ๋“ค์–ด โ€˜ํ‰๊ท  ์—ฐ๋ด‰๋ณด๋‹ค ๋งŽ์€ ์‚ฌ๋žŒ๋งŒ ์ถœ๋ ฅํ•˜์‹œ์˜คโ€™๋ž€ ์˜ˆ์ œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋จผ์ € ํ‰๊ท ์—ฐ๋ด‰์„ ๊ตฌํ•ด์•ผํ•œ๋‹ค
  • ์ด ๋•Œ ํ‰๊ท ์—ฐ๋ด‰์„ ๊ตฌํ•œ ํ›„ ๊ฒฐ๊ณผ๋ฅผ ๋ณต์‚ฌํ•ด์„œ ๋น„๊ตํ•˜๋ฉด 2๋ฒˆ ์‹คํ–‰ํ•ด์•ผํ•˜๋ฏ€๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค
  • SUB QUERY๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฒฐ๊ณผ๊ฐ’์„ ๊ตฌํ•œ ํ›„ ๋ฉ”์ธ์ฟผ๋ฆฌ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์„œ๋ธŒ์ฟผ๋ฆฌ๋ฅผ ๋จผ์ € ์ž‘์„ฑ ํ›„ ๋ฉ”์ธ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค
  • ์„œ๋ธŒ์ฟผ๋ฆฌ ์ž‘์„ฑ์‹œ ์ฃผ์˜์‚ฌํ•ญ
    • ์„œ๋ธŒ์ฟผ๋ฆฌ ๋ถ€๋ถ„์€ WHERE์ ˆ์— ์—ฐ์‚ฐ์ž ์˜ค๋ฅธ์ชฝ์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค.
    • ๋ฐ˜๋“œ์‹œ ๊ด„ํ˜ธ๋กœ ๋ฌถ์–ด์•ผ ํ•œ๋‹ค.
    • ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” ์„œ๋ธŒ์ฟผ๋ฆฌ์ ˆ์— order by ์ ˆ์ด ์˜ฌ ์ˆ˜ ์—†๋‹ค.
    • ๋‹จ์ผํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ์™€ ๋‹ค์ค‘ํ–‰ ์„œ๋ธŒ์ฟผ๋ฆฌ์— ๋”ฐ๋ผ ์—ฐ์‚ฐ์ž๋ฅผ ์ž˜ ์„ ํƒํ•ด์•ผํ•œ๋‹ค.
SELECT TABLE1 ์นผ๋Ÿผ
FROM TABLE1
WHERE ์—ฐ๋ด‰ > (SELECT AVG(์—ฐ๋ด‰) FROM TABLE1)