๐Ÿ’ป [SQL] 9. ์กฐ์ธ(JOIN)

thisk336ยท2023๋…„ 10์›” 11์ผ
0

SQL

๋ชฉ๋ก ๋ณด๊ธฐ
9/17
post-thumbnail

์กฐ์ธ (JOIN)

  • JOIN์€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”๋กœ๋ถ€ํ„ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•ด ํ•˜๋‚˜์˜ ํฌ๊ด„์ ์ธ ๊ตฌ์กฐ๋กœ ๊ฒฐํ•ฉ์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์„ ๋งํ•œ๋‹ค.
  • JOIN์€ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์„ธ๋ถ„ํ™”๋  ์ˆ˜ ์žˆ๋‹ค.
    • INNER JOIN (์ผ๋ฐ˜์ ์ธ JOIN): ๋‘ ํ…Œ์ด๋ธ”์— ํ•ด๋‹น ํ•„๋“œ๊ฐ’์ด ๋งค์นญ๋˜๋Š” (๋‘ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ํ•„๋“œ๋กœ ๊ตฌ์„ฑ๋œ) ๋ ˆ์ฝ”๋“œ๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค.
    • OUTER JOIN (์ฐธ๊ณ )
      LEFT OUTER JOIN: ์™ผ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์™€ ํ•จ๊ป˜, ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์— ์™ผ์ชฝ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์™€ ๋งค์นญ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
      RIGHT OUTER JOIN: ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์—์„œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ์™€ ํ•จ๊ป˜, ์™ผ์ชฝ ํ…Œ์ด๋ธ”์— ์™ผ์ชฝ ํ…Œ์ด๋ธ” ๋ ˆ์ฝ”๋“œ์™€ ๋งค์นญ๋˜๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ๋ถ™์—ฌ์„œ ๊ฐ€์ ธ์˜จ๋‹ค.
    • CROSS JOIN: ๋‘ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’์„ ๊ฐ๊ฐ ํ•ฉ์ณ์„œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.
    • SELF JOIN: ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๋ ˆ์ฝ”๋“œ๋ฅผ ํ•ฉ์ณ์„œ ๊ฐ€์ ธ์˜จ๋‹ค.

INNER JOIN

  • ์ผ๋ฐ˜์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” JOIN์œผ๋กœ ์กฐ์ธํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ON ์ ˆ์˜ ์กฐ๊ฑด์ด ์ผ์น˜ํ•˜๋Š” ๊ฒฐ๊ณผ๋งŒ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
SELECT [์ปฌ๋Ÿผ๋ช…], ... 
FROM [ํ…Œ์ด๋ธ”๋ช… 1] INNER JOIN [ํ…Œ์ด๋ธ”๋ช… 2] 
ON [ํ…Œ์ด๋ธ”๋ช… 1].[์ปฌ๋Ÿผ๋ช… 1] = [ํ…Œ์ด๋ธ”๋ช… 2].[์ปฌ๋Ÿผ๋ช… 2]
  • ์ผ๋ฐ˜์ ์œผ๋กœ Alias์™€ ๊ฐ™์ด ์‚ฌ์šฉ๋˜๋ฉฐ JOIN ๋‚ด์—์„œ๋Š” AS๋ฅผ ๋ถ™์ด์ง€ ์•Š๊ณ  ํ…Œ์ด๋ธ” ์ด๋ฆ„ ๋‹ค์Œ์— ํ•œ์นธ ๋„๊ณ  ์ƒˆ๋กœ์šด ์ด๋ฆ„์„ ์“ด๋‹ค.
SELECT * FROM country C
INNER JOIN countrylanguage CL
ON C.Code = CL.CountryCode
LIMIT 5;


(Code๊ฐ€ ABW์ธ ๋‚˜๋ผ๋Š” ์–ธ์–ด๋ฅผ 4๊ฐœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— JOINํ•œ ๊ฒฐ๊ณผ๋Š” 4๋ฒˆ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.)

OUTER JOIN

  • OUTER JOIN์€ ์กฐ์ธํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ON ์ ˆ์˜ ์กฐ๊ฑด ์ค‘ ํ•œ์ชฝ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๊ฐ€์ ธ์˜จ๋‹ค.
  • OUTER JOIN์€ LEFT OUTER JOIN, RIGHT OUTER JOIN ์ด ์žˆ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
SELECT [์ปฌ๋Ÿผ๋ช…], ... 
FROM [ํ…Œ์ด๋ธ”๋ช… 1]  LEFT OUTER JOIN/RIGHT OUTER JOIN [ํ…Œ์ด๋ธ”๋ช… 2] 
ON [ํ…Œ์ด๋ธ”๋ช… 1].[์ปฌ๋Ÿผ๋ช… 1] = [ํ…Œ์ด๋ธ”๋ช… 2].[์ปฌ๋Ÿผ๋ช… 2]

<LEFT OUTER JOIN>
LEFT OUTER JOIN
<RIGHT OUTER JOIN>
RIGHT OUTER JOIN

CROSS JOIN

  • CROSS JOIN์€ A ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฐ ๋ ˆ์ฝ”๋“œ๋“ค์— ๋Œ€ํ•ด B ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฐ ๋ ˆ์ฝ”๋“œ๋“ค์„ ๋ชจ๋‘ JOINํ•ด์„œ ๋ชจ๋“  ๋ ˆ์ฝ”๋“œ๋“ค์„ ๊ฐ€์ ธ์˜จ๋‹ค. (์ž˜ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค.)
  • ๊ธฐ๋ณธ์ ์ธ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
SELECT [์ปฌ๋Ÿผ๋ช…], ... 
FROM [ํ…Œ์ด๋ธ”๋ช… 1]  CROSS JOIN [ํ…Œ์ด๋ธ”๋ช… 2] 
-- ON ํ‚ค์›Œ๋“œ๊ฐ€ ์—†์–ด๋„ ๋œ๋‹ค.
SELECT * FROM
test_table T1 CROSS JOIN test_tb T2;

SELF JOIN

  • SELF JOIN์€ ๊ฐ™์€ ํ…Œ์ด๋ธ”๋ผ๋ฆฌ JOINํ•˜๊ณ ์ž ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‘๋ฒˆ ๊ฐ€์ ธ์˜จ๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ•์€ INNER JOIN์— ๊ฐ™์€ ํ…Œ์ด๋ธ”๋ผ๋ฆฌ JOINํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ Alias๋ฅผ ์“ธ ๋•Œ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด์—ฌ๋„ ๋‹ค๋ฅธ Alias๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
SELECT * 
FROM test_table t1 
INNER JOIN test_table t2
ON t1.test_id = t2.test_id;

0๊ฐœ์˜ ๋Œ“๊ธ€