Skip to content

Latest commit

ย 

History

History
147 lines (100 loc) ยท 3.67 KB

SQL - Join.md

File metadata and controls

147 lines (100 loc) ยท 3.67 KB

SQL Join

์กฐ์ธ์ด๋ž€

  • ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์ด๋‚˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.
  • ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด, ์ ์–ด๋„ ํ•˜๋‚˜์˜ ์นผ๋Ÿผ์„ ์„œ๋กœ ๊ณต์œ ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์— ํ™œ์šฉํ•œ๋‹ค.

Join ์ข…๋ฅ˜

  • INNER JOIN
  • LEFT OUTER JOIN
  • RIGHT OUTER JOIN
  • FULL OUTER JOIN
  • CROSS JOIN
  • SELF JOIN
๋ฌธ๋ฒ•
SELECT
ํ…Œ์ด๋ธ”๋ณ„์นญ.์กฐํšŒํ• ์ปฌ๋Ÿผ,
ํ…Œ์ด๋ธ”๋ณ„์นญ.์กฐํšŒํ• ์ปฌ๋Ÿผ
FROM ๊ธฐ์ค€ํ…Œ์ด๋ธ” ๋ณ„์นญ
INNER JOIN ์กฐ์ธํ…Œ์ด๋ธ” ๋ณ„์นญ ON ๊ธฐ์ค€ํ…Œ์ด๋ธ”๋ณ„์นญ.๊ธฐ์ค€ํ‚ค = ์กฐ์ธํ…Œ์ด๋ธ”๋ณ„์นญ.๊ธฐ์ค€ํ‚ค ...

1) INNER JOIN

  • ์‰ฝ๊ฒŒ ๋งํ•ด ๊ต์ง‘ํ•ฉ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ธฐ์ค€ ํ…Œ์ด๋ธ”๊ณผ Joinํ•œ ํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต๋œ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์€ A์˜ ํ…Œ์ด๋ธ”๊ณผ B ํ…Œ์ด๋ธ”์ด ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ๊ฒ€์ƒ‰๋œ๋‹ค.
Ex)
SELECT
A.NAME, 
B.AGE
FROM EX_TABLE A
INNER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

2) LEFT OUTER JOIN

  • ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์˜ ๊ฐ’ + ํ…Œ์ด๋ธ”๊ณผ ๊ธฐ์ค€ํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต๋œ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.
  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ Join์„ ํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์€ A ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๊ฐ’๊ณผ A ํ…Œ์ด๋ธ”๊ณผ B ํ…Œ์ด๋ธ”์˜ ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ๊ฒ€์ƒ‰๋œ๋‹ค.
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A
LEFT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

3) RIGHT OUTER JOIN

  • LEFT OUTER JOIN์˜ ๋ฐ˜๋Œ€์ด๋‹ค.
  • ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ Join์„ ํ•˜๊ฒ ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์€ B ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ์™€ A ํ…Œ์ด๋ธ”๊ณผ B ํ…Œ์ด๋ธ”์—์„œ ์ค‘๋ณต๋˜๋Š” ๊ฐ’์ด ๊ฒ€์ƒ‰๋œ๋‹ค.
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A
RIGHT OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

4) FULL OUTER JOIN

  • ์‰ฝ๊ฒŒ ๋งํ•ด ํ•ฉ์ง‘ํ•ฉ์„ ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • A ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ, B ํ…Œ์ด๋ธ”์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋‘ ๊ฒ€์ƒ‰๋œ๋‹ค.
  • ์‚ฌ์‹ค์ƒ, ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์˜ ์˜๋ฏธ๊ฐ€ ์—†๋‹ค.
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A
FULL OUTER JOIN JOIN_TABLE B ON A.NO_EMP = B.NO_EMP

5) CROSS JOIN

  • ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ „๋ถ€ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๊ธฐ์ค€ ํ…Œ์ด๋ธ”์ด A์ผ ๊ฒฝ์šฐ, A์˜ ๋ฐ์ดํ„ฐ ํ•œ ROW๋ฅผ B ํ…Œ์ด๋ธ” ์ „์ฒด์™€ JOINํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๊ฒฐ๊ณผ๊ฐ’์€ N*M์ด๋‹ค.
  • ์œ„์˜ ๊ฒฝ์šฐ A ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ 3๊ฐœ, B ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ๊ฐ€ 4๊ฐœ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ด 12๊ฐœ๊ฐ€ ๊ฒ€์ƒ‰๋œ๋‹ค.
--์ฒซ ๋ฒˆ์งธ ๋ฐฉ์‹--
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A
CROSS JOIN JOIN_TABLE B

--๋‘ ๋ฒˆ์งธ ๋ฐฉ์‹--
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A, JOIN_TABLE B
  1. SELF JOIN

  • ์ž๊ธฐ ์ž์‹ ๊ณผ ์ž๊ธฐ ์ž์‹ ์„ ์กฐ์ธํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.
  • ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์„ ์—ฌ๋Ÿฌ๋ฒˆ ๋ณต์‚ฌํ•ด์„œ ์กฐ์ธํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • ์ž์‹ ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์นผ๋Ÿผ์„ ๋‹ค์–‘ํ•˜๊ฒŒ ๋ณ€ํ˜•์‹œ์ผœ ํ™œ์šฉํ•  ๊ฒฝ์šฐ์— ์ž์ฃผ ์‚ฌ์šฉํ•œ๋‹ค.
SELECT
A.NAME,
B.AGE
FROM EX_TABLE A, EX_TABLE B

์ฐธ๊ณ 

JOIN์˜ ์ข…๋ฅ˜์„ค๋ช… ๋ฐ ์‚ฌ์šฉ๋ฒ• & ์˜ˆ์ œ