‡๐Ÿ‘ฉ‍๐Ÿ’ป ‡/ºDatabase

[Database] ์กฐ์ธ(Join)์ด๋ž€?

Trudy | ์†ก์—ฐ 2024. 8. 9. 04:44
์กฐ์ธ(Join)์ด๋ž€?


๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋‹ค ๋ณด๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ ํŠน์ • ํ‚ค๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์กฐ์ธ(Join)์ด๋ผ๊ณ  ํ•œ๋‹ค. 

 

์กฐ์ธ ์ˆ˜ํ–‰์‹œ ์–‘์ชฝ ํ…Œ์ด๋ธ” ๊ฐ„์˜ ์—ฐ๊ฒฐ ์กฐ๊ฑด์„ ์ •ํ™•ํžˆ ํ•˜์ง€ ์•Š์œผ๋ฉด M*N ์—ฐ์‚ฐ์ด ๋ฐœ์ƒํ•˜์—ฌ ๋งค์šฐ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋œ๋‹ค. 

 

์กฐ์ธ์˜ ์ข…๋ฅ˜ 

 

๋™๋“ฑ ์กฐ์ธ (๋‚ด๋ถ€ ์กฐ์ธ)

์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๊ณต๋™ ์ปฌ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐ™์€ ํ–‰๋“ค์„ ์—ฐ๊ฒฐ

 

์ž์—ฐ์กฐ์ธ (๋‚ด๋ถ€ ์กฐ์ธ)

์–‘์ชฝ ํ…Œ์ด๋ธ”์—์„œ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ฐ ์ปฌ๋Ÿผ๋ช…์— ๊ฐ™์€ ๊ฐ’์ด ์กด์žฌํ•  ๋•Œ ์ž๋™์œผ๋กœ ๋™๋“ฑ ์กฐ์ธ์„ ์ˆ˜ํ–‰

 

๋น„๋™๋“ฑ ์กฐ์ธ

์–‘์ชฝ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต ์นผ๋Ÿผ์„ ๊ธฐ์ค€์œผ๋กœ ๋™๋“ฑ์ด ์•„๋‹Œ ์กฐ๊ฑด์œผ๋กœ ์—ฐ๊ฒฐ

 

์…€ํ”„ ์กฐ์ธ 

ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๊ณตํ†ต๋œ ์นผ๋Ÿผ์ด ๋‘ ๊ฐœ ์ด์ƒ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ๋™๋“ฑ ์กฐ์ธ

 

์™ธ๋ถ€ ์กฐ์ธ

๋™๋“ฑ ์กฐ์ธ์—์„œ ๋ˆ„๋ฝ๋œ ์–‘์ชฝ ํ…Œ์ด๋ธ” ์ •๋ณด๋ฅผ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•œ ์กฐ์ธ

์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ, ์™„์ „ ์™ธ๋ถ€์กฐ์ธ์ด ์žˆ๋‹ค

 

USING ์ ˆ

๋‘ ๊ฐœ ์ด์ƒ์˜ ๊ณตํ†ต ์นผ๋Ÿผ์ด ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜๋‚˜์˜ ์ปฌ๋Ÿผ๋งŒ ๋™๋“ฑ์กฐ์ธํ•˜๋„๋ก ์ง€์ •ํ•ด์ฃผ๋Š” ์ ˆ

 

 

๋‚ด๋ถ€์กฐ์ธ (INNER JOIN)  VS ์™ธ๋ถ€ ์กฐ์ธ (OUTER JOIN)

 

https://parkmuhyeun.github.io/etc/database/2022-06-27-Join/

 

๐Ÿ”ท ๋‚ด๋ถ€ ์กฐ์ธ (INNER JOIN)

๊ต์ง‘ํ•ฉ ์—ฐ์‚ฐ๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

ํ•˜๋‚˜๋กœ ํ•ฉ์น  ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต ์†์„ฑ๋“ค๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค. 

// ๋ช…์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ ๋ฐฉ๋ฒ•
SELECT *
FROM employee INNER JOIN department
ON employee.DepartmentID = department.DepartmentID;

// ์•”์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ ๋ฐฉ๋ฒ•
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID;

 ๐Ÿ”น1. ์ž์—ฐ ์กฐ์ธ (NATURAL JOIN)

 

INNER JOINํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณตํ†ต๋œ ์†์„ฑ์„ SELECT ํ•œ ํ…Œ์ด๋ธ”์˜ ์†์„ฑ์œผ๋กœ ํ•œ๋ฒˆ๋งŒ ๋ฐ˜ํ™˜

๋”ฐ๋ผ์„œ ์•”์‹œ์  ๋‚ด๋ถ€ ์กฐ์ธ ๋ฐฉ๋ฒ•์€ ์—†์Œ

SELECT * FROM employee NATURAL JOIN department

 

 ๐Ÿ”น 2. ๊ต์ฐจ ์กฐ์ธ (CROSS JOIN)

 

 INNER JOINํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ”์˜ ๊ณฑ์ง‘ํ•ฉ์„ ๋ฐ˜ํ™˜

// ๋ช…์‹œ์ 
SELECT * FROM employee CROSS JOIN department;

// ์•”์‹œ์ 
SELECT * FROM employee, department;

 

๐Ÿ”ท ์™ธ๋ถ€ ์กฐ์ธ(OUTER JOIN)

์กฐ์ธํ•˜๋Š” ๋‘ ํ…Œ์ด๋ธ” ์ค‘์—์„œ ํŠน์ • ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ์†์„ฑ๋“ค์„ ๊ฐ€์ง€๊ณ  ์˜จ๋‹ค.

 

 ๐Ÿ”น 1. ์™ผ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ (LEFT OUTER JOIN)

  • ์™ผ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ
SELECT *
FROM employee LEFT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

 

 ๐Ÿ”น 2. ์˜ค๋ฅธ์ชฝ ์™ธ๋ถ€ ์กฐ์ธ (RIGHT OUTER JOIN)

  • ์˜ค๋ฅธ์ชฝ ํ…Œ์ด๋ธ”์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ƒ์„ฑ
SELECT *
FROM employee RIGHT OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

 

 ๐Ÿ”น 3. ์™„์ „ ์™ธ๋ถ€ ์กฐ์ธ (FULL OUTER JOIN)

  • ์–‘์ชฝ ํ…Œ์ด๋ธ” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ ์ƒ์„ฑ
SELECT *
FROM employee FULL OUTER JOIN department
ON employee.DepartmentID = department.DepartmentID;

Reference

https://parkmuhyeun.github.io/etc/database/2022-06-27-Join/

 

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ์กฐ์ธ(Join)

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค - ์กฐ์ธ(Join) 27 Jun 2022 in etc / Database on Database, Join Join์˜ ์ข…๋ฅ˜ Join์ด๋ž€? ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ์—ฌ๋Ÿฌ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ์กฐํ•ฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ์—ด๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š”

parkmuhyeun.github.io