DB - SELECT + JOIN

Kjjeddยท2026๋…„ 1์›” 19์ผ

DB

๋ชฉ๋ก ๋ณด๊ธฐ
8/11
post-thumbnail

๐Ÿ”— JOIN์„ ์“ฐ๋Š” ์ด์œ 

JOIN์€ ๋‹จ์ˆœํžˆ ํ…Œ์ด๋ธ”์„ ๋ถ™์ด๋Š” SQL ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค.
JOIN์€ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚˜๋ˆ  ์ €์žฅํ•˜๋Š” ์ด์œ  ๊ทธ ์ž์ฒด๋‹ค.

JOIN์€ ๋ฐ˜๋“œ์‹œ ๊ตฌ์กฐ โ†’ ํ๋ฆ„ โ†’ ๊ฒฐ๊ณผ ์ˆœ์„œ๋กœ ์ดํ•ดํ•ด์•ผ ํ•œ๋‹ค.


๐Ÿง  JOIN์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ํ•ต์‹ฌ ์งˆ๋ฌธ

  • ์ด ๋ฐ์ดํ„ฐ๋Š” ์–ด๋””์„œ ์‹œ์ž‘ํ•˜๋Š”๊ฐ€?
  • ์–ด๋–ค ํ…Œ์ด๋ธ”์„ ๊ฑฐ์ณ ์ด๋™ํ•˜๋Š”๊ฐ€?
  • ์ด๋™ ๊ฒฝ๋กœ๋Š” ์™ธ๋ž˜ํ‚ค๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”๊ฐ€?

JOIN์€ ํ…Œ์ด๋ธ”์„ ํ•ฉ์น˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ
์™ธ๋ž˜ํ‚ค(FK)๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ๋ฅผ ์ •์˜ํ•˜๋Š” ํ–‰์œ„๋‹ค.


๐Ÿ“Œ JOIN ํ•œ ์ค„ ์ •์˜

JOIN = ๊ธฐ๋ณธํ‚ค(PK)์™€ ์™ธ๋ž˜ํ‚ค(FK)๋ฅผ ๋”ฐ๋ผ ํ…Œ์ด๋ธ” ์‚ฌ์ด๋ฅผ ์ด๋™ํ•˜๋Š” ์—ฐ์‚ฐ

PK (๋ถ€๋ชจ ํ…Œ์ด๋ธ”)
   โ–ฒ
   โ”‚
FK (์ž์‹ ํ…Œ์ด๋ธ”)
   โ”‚
๋‹ค๋ฅธ ํ…Œ์ด๋ธ”
  

์ด ๊ตฌ์กฐ๊ฐ€ ์—†์œผ๋ฉด JOIN์€ ์กด์žฌํ•  ์ˆ˜ ์—†๋‹ค.


๐Ÿงฑ ์˜ˆ์ œ ํ…Œ์ด๋ธ” ๊ตฌ์กฐ

customers
+------------------+
| customer_id (PK) |
| customer_name    |
+------------------+

orders
+------------------+
| order_id (PK)    |
| customer_id (FK) |
| order_date       |
+------------------+

order_products
+----------------------+
| order_item_id (PK)   |
| order_id (FK)        |
| product_id (FK)      |
| quantity             |
+----------------------+

products
+------------------+
| product_id (PK)  |
| product_name     |
| price            |
+------------------+
  

JOIN์€ ์œ„ ํ…Œ์ด๋ธ” ์‚ฌ์ด์˜ ์„ (line)์„ ๋”ฐ๋ผ ์›€์ง์ธ๋‹ค.


โžก๏ธ JOIN ์ด๋™ ๊ฒฝ๋กœ๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด

customers
   โ”‚ customer_id
   โ–ผ
orders
   โ”‚ order_id
   โ–ผ
order_products
   โ”‚ product_id
   โ–ผ
products
  

JOIN์€ SQL ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋”ฐ๋ผ ๋‚ด๋ ค๊ฐ€๊ฑฐ๋‚˜ ์˜ฌ๋ผ๊ฐ€๋Š” ํƒ์ƒ‰ ๊ณผ์ •์ด๋‹ค.


โŒ JOIN์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ํ•˜๋Š” ์‹ค์ˆ˜

  • ํ…Œ์ด๋ธ”๋ถ€ํ„ฐ JOINํ•˜๋ ค๊ณ  ํ•จ
  • ์™œ ์ด ์ปฌ๋Ÿผ์ด ํ•„์š”ํ•œ์ง€ ์„ค๋ช… ๋ชป ํ•จ
  • ๊ฒฐ๊ณผ๋งŒ ๋งž์œผ๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•จ

JOIN์ด ๋งŽ์•„์งˆ์ˆ˜๋ก ์ฟผ๋ฆฌ๋Š” ๋งž๋Š”๋ฐ ๊ตฌ์กฐ๊ฐ€ ํ‹€๋ฆฐ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.


๐Ÿงช JOIN ํ•ด๋ถ€ (์‚ฌ๊ณ  ํ๋ฆ„ ์ค‘์‹ฌ)

SELECT
    c.customer_name,
    o.order_id,
    o.order_date,
    p.product_name,
    op.quantity
FROM customers c
JOIN orders o
    ON c.customer_id = o.customer_id
JOIN order_products op
    ON o.order_id = op.order_id
JOIN products p
    ON op.product_id = p.product_id;

์ด ์ฟผ๋ฆฌ๋Š” ์ด๋ ‡๊ฒŒ ์ฝ์–ด์•ผ ํ•œ๋‹ค.

1๏ธโƒฃ customers ์—์„œ ์‹œ์ž‘
2๏ธโƒฃ ๊ณ ๊ฐ์ด ๋งŒ๋“  ์ฃผ๋ฌธ์„ ์ฐพ๋Š”๋‹ค
3๏ธโƒฃ ์ฃผ๋ฌธ์— ํฌํ•จ๋œ ์ƒํ’ˆ์„ ์ฐพ๋Š”๋‹ค
4๏ธโƒฃ ์ƒํ’ˆ์˜ ์ƒ์„ธ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค


๐Ÿ” INNER JOIN vs LEFT JOIN (๊ตฌ์กฐ ๊ธฐ์ค€)

INNER JOIN

customers โ”€โ”€โ”
            โ”œโ”€ INNER JOIN โ†’ ๊ฒฐ๊ณผ
orders    โ”€โ”€โ”˜
  

์—ฐ๊ฒฐ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ์—†์œผ๋ฉด ๊ฒฐ๊ณผ์—์„œ ์‚ฌ๋ผ์ง„๋‹ค.
์ฆ‰, ๊ต์ง‘ํ•ฉ๋งŒ ๋‚จ๋Š”๋‹ค.


LEFT JOIN

customers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ถ ๊ฒฐ๊ณผ (ํ•ญ์ƒ ์œ ์ง€)
     โ”‚
     โ–ผ
orders (์—†์œผ๋ฉด NULL)
  

LEFT JOIN์€
์ถœ๋ฐœ ํ…Œ์ด๋ธ”์„ ๋ฌด์กฐ๊ฑด ๊ธฐ์ค€์œผ๋กœ ์œ ์ง€ํ•œ๋‹ค.


โš ๏ธ RIGHT JOIN์ด ๊ฑฐ์˜ ์•ˆ ์“ฐ์ด๋Š” ์ด์œ 

  • ์ถœ๋ฐœ ํ…Œ์ด๋ธ”์ด ์ง๊ด€์ ์œผ๋กœ ์•ˆ ๋ณด์ž„
  • ์ฟผ๋ฆฌ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง
  • LEFT JOIN์œผ๋กœ 100% ๋Œ€์ฒด ๊ฐ€๋Šฅ

๐Ÿ‘‰ RIGHT JOIN ์“ฐ๊ณ  ์‹ถ์–ด์ง€๋ฉด ํ…Œ์ด๋ธ” ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”๋ผ


๐Ÿ’ฃ CROSS JOIN์€ ์–ธ์ œ ์“ฐ๋‚˜?

A ํ…Œ์ด๋ธ”: 3๊ฑด
B ํ…Œ์ด๋ธ”: 4๊ฑด

๊ฒฐ๊ณผ: 12๊ฑด (๋ชจ๋“  ์กฐํ•ฉ)
  

CROSS JOIN์€
์˜๋„์ ์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋งŒ๋“ค ๋•Œ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.

  • ํ…Œ์ŠคํŠธ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
  • ๋‚ ์งœ ร— ์ƒํ’ˆ ์กฐํ•ฉ
  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜์šฉ ๋ฐ์ดํ„ฐ

์‹ค์ˆ˜๋กœ ์“ฐ๋ฉด ์„œ๋ฒ„๊ฐ€ ํ„ฐ์ง..


๐Ÿš€ JOIN ์„ฑ๋Šฅ ํ•ต์‹ฌ ํฌ์ธํŠธ

  • JOIN ๊ธฐ์ค€ ์ปฌ๋Ÿผ์—๋Š” ๋ฐ˜๋“œ์‹œ ์ธ๋ฑ์Šค
  • ๋ถˆํ•„์š”ํ•œ ์ปฌ๋Ÿผ SELECT ๊ธˆ์ง€
  • JOIN ์กฐ๊ฑด = FK โ†’ PK

JOIN์ด ๋А๋ฆฌ๋ฉด ๋Œ€๋ถ€๋ถ„ ์ธ๋ฑ์Šค ๋ฌธ์ œ


โœ… JOIN ์ž‘์„ฑ ์ „ ์ฒดํฌ๋ฆฌ์ŠคํŠธ

  • ์ถœ๋ฐœ ํ…Œ์ด๋ธ”์ด ๋ช…ํ™•ํ•œ๊ฐ€?
  • ์™ธ๋ž˜ํ‚ค ํ๋ฆ„์ด ๋ณด์ด๋Š”๊ฐ€?
  • LEFT / INNER ์„ ํƒ ์ด์œ ๊ฐ€ ์žˆ๋Š”๊ฐ€?
  • ์ด JOIN์„ ๋ง๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

๐Ÿ”ฅ ์ตœ์ข… ์š”์•ฝ

  • JOIN์€ ๋ฌธ๋ฒ•์ด ์•„๋‹ˆ๋‹ค
  • JOIN์€ ๊ด€๊ณ„๋ฅผ ๋”ฐ๋ผ ์ด๋™ํ•˜๋Š” ๊ฒฝ๋กœ๋‹ค
  • ์ข‹์€ JOIN์€ ์„ค๋ช…์ด ์‰ฝ๋‹ค
profile
Gongbuhaja

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