DB - SQL

KjjeddΒ·2026λ…„ 1μ›” 4일

DB

λͺ©λ‘ 보기
2/11
post-thumbnail

πŸ—„οΈ SQL 기초 β€” λ°μ΄ν„°λ² μ΄μŠ€μ™€ λŒ€ν™”ν•˜λŠ” μ–Έμ–΄

SQL은 처음 보면 λ‚―μ„€λ‹€.
μ˜μ–΄ 같기도 ν•˜κ³ , μ½”λ“œ 같기도 ν•˜κ³ , ν‘œλ₯Ό λ‹€λ£¨λŠ” 것 같기도 ν•˜λ‹€.

β€œμ—‘μ…€μ΄λž‘ 뭐가 λ‹€λ₯Έ κ±°μ§€?”
β€œμ™œ ꡳ이 이런 μ–Έμ–΄λ₯Ό λ°°μ›Œμ•Ό ν•˜μ§€?”

SQL이 μ™œ ν•„μš”ν•œκ°€, 그리고 μ‹€μ œλ‘œ μ–΄λ–»κ²Œ μ“°μ΄λŠ”κ°€


πŸ€” SQL은 μ™œ ν•„μš”ν• κΉŒ?

문제 상황: 데이터가 λ§Žμ•„μ§€λ©΄

이런 상황을 μƒμƒν•΄λ³΄μž.

  • 카페 μ£Όλ¬Έ μ‹œμŠ€ν…œμ„ λ§Œλ“€μ—ˆλ‹€
  • 고객 정보와 μ£Όλ¬Έ 내역을 μ €μž₯ν•΄μ•Ό ν•œλ‹€
  • ν”„λ‘œκ·Έλž¨μ„ 껐닀 켜면 데이터가 사라진닀
  • 고객이 10만 λͺ…이 되면 μ°ΎλŠ” 데 μ‹œκ°„μ΄ λ„ˆλ¬΄ 였래 κ±Έλ¦°λ‹€
  • 직원 μ—¬λŸ¬ λͺ…이 λ™μ‹œμ— μˆ˜μ •ν•˜λ©΄ 데이터가 꼬인닀

❌ 파일(txt, csv)λ‘œλŠ” ν•œκ³„κ°€ μ˜¨λ‹€

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ λ“±μž₯ν•œ 것이 λ°”λ‘œ λ°μ΄ν„°λ² μ΄μŠ€(Database)λ‹€.


🧠 λ°μ΄ν„°λ² μ΄μŠ€ ν•œ 쀄 μ •μ˜

βœ… λ°μ΄ν„°λ² μ΄μŠ€(Database)λž€
데이터λ₯Ό μ²΄κ³„μ μœΌλ‘œ μ €μž₯ν•˜κ³ , λΉ λ₯΄κ²Œ μ°Ύκ³ , μ•ˆμ „ν•˜κ²Œ κ΄€λ¦¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ΄λ‹€

파일 μ €μž₯ vs λ°μ΄ν„°λ² μ΄μŠ€

ꡬ뢄 파일 μ €μž₯ λ°μ΄ν„°λ² μ΄μŠ€
검색 μ²˜μŒλΆ€ν„° λκΉŒμ§€ 읽음 인덱슀둜 λ°”λ‘œ 찾음
λ™μ‹œ μž‘μ—… 거의 λΆˆκ°€λŠ₯ μ—¬λŸ¬ λͺ… λ™μ‹œ κ°€λŠ₯
데이터 μ–‘ 컀질수둝 느렀짐 수백만 건도 빠름
μ•ˆμ •μ„± 손상 μ‹œ 볡ꡬ 어렀움 백업·볡ꡬ κΈ°λŠ₯ λ‚΄μž₯

πŸ“’ 파일 μ €μž₯ = 개인 λ…ΈνŠΈ
πŸ“š λ°μ΄ν„°λ² μ΄μŠ€ = λ„μ„œκ΄€


πŸ“¦ λ°μ΄ν„°λ² μ΄μŠ€ κΈ°λ³Έ ꡬ쑰

  • Database β†’ μ—‘μ…€ 파일 전체
  • Table β†’ μ—‘μ…€ μ‹œνŠΈ ν•˜λ‚˜
  • Column β†’ μ„Έλ‘œ (데이터 μ’…λ₯˜)
  • Row β†’ κ°€λ‘œ (데이터 ν•œ 쀄)

이 ν‘œ κ΅¬μ‘°λŠ” SQL μ „μ²΄μ˜ μΆœλ°œμ μ΄λ‹€.


πŸ”‘ Primary Key (κΈ°λ³Έ ν‚€)

ν…Œμ΄λΈ”μ—μ„œ 각 행을 μœ μΌν•˜κ²Œ κ΅¬λΆ„ν•˜λŠ” κ°’

  • 쀑볡 λΆˆκ°€
  • NULL λΆˆκ°€
  • 보톡 id μ‚¬μš©

πŸ‘‰ μ£Όλ―Όλ“±λ‘λ²ˆν˜Έ 같은 μ—­ν• 


βš™οΈ SQLμ΄λž€?

SQL은 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λŒ€ν™”ν•˜λŠ” μ–Έμ–΄λ‹€.

  • β€œμ΄ 데이터 λ³΄μ—¬μ€˜β€ β†’ SELECT
  • β€œμ΄κ±° μΆ”κ°€ν•΄μ€˜β€ β†’ INSERT
  • β€œμ΄κ±° λ°”κΏ”μ€˜β€ β†’ UPDATE
  • β€œμ΄κ±° μ§€μ›Œμ€˜β€ β†’ DELETE

βœ” 무엇을 μ›ν•˜λŠ”μ§€λ§Œ λ§ν•˜λ©΄ λœλ‹€
βœ” μ–΄λ–»κ²Œ μ²˜λ¦¬ν• μ§€λŠ” DBκ°€ μ•Œμ•„μ„œ ν•œλ‹€


🧱 1️⃣ ν…Œμ΄λΈ” 생성 (CREATE TABLE)

CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100) NOT NULL,
  email VARCHAR(255) UNIQUE,
  age INT DEFAULT 0,
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

자주 μ“°λŠ” 데이터 νƒ€μž…

  • INT / BIGINT β†’ 숫자
  • VARCHAR(N) β†’ 짧은 λ¬Έμžμ—΄
  • TEXT β†’ κΈ΄ λ¬Έμžμ—΄
  • DATE β†’ λ‚ μ§œ
  • DATETIME β†’ λ‚ μ§œ + μ‹œκ°„
  • DECIMAL(M,D) β†’ μ •ν™•ν•œ μ†Œμˆ˜ (가격)

μ œμ•½ 쑰건

  • PRIMARY KEY
  • AUTO_INCREMENT
  • NOT NULL
  • UNIQUE

⚠️ DROP TABLE은 ν…Œμ΄λΈ” + 데이터 λͺ¨λ‘ μ‚­μ œ (볡ꡬ λΆˆκ°€)


βž• 2️⃣ 데이터 μ‚½μž… (INSERT)

INSERT INTO users (name, email, age)
VALUES ('홍길동', 'hong@example.com', 25);

AUTO_INCREMENT, DEFAULTκ°€ μžˆλŠ” μ»¬λŸΌμ€ μƒλž΅ κ°€λŠ₯ν•˜λ‹€.


πŸ” 3️⃣ 데이터 쑰회 (SELECT)

SELECT * FROM users;
SELECT name, email FROM users;

WHERE 쑰건

SELECT * FROM users WHERE age >= 25;
SELECT * FROM users WHERE name = '홍길동';

LIKE νŒ¨ν„΄ 검색

  • % β†’ μ—¬λŸ¬ κΈ€μž
  • _ β†’ ν•œ κΈ€μž
SELECT * FROM users WHERE name LIKE 'κΉ€%';

μ •λ ¬ / μ œν•œ

SELECT * FROM users ORDER BY age DESC;
SELECT * FROM users LIMIT 5;

❗ NULL은 = 둜 비ꡐ λΆˆκ°€
λ°˜λ“œμ‹œ IS NULL / IS NOT NULL μ‚¬μš©


✏️ 4️⃣ μˆ˜μ • / μ‚­μ œ

UPDATE users SET age = 26 WHERE id = 1;
DELETE FROM users WHERE id = 1;

🚨 WHERE μ—†μœΌλ©΄ μ „λΆ€ μˆ˜μ • / μ „λΆ€ μ‚­μ œλ¨


πŸ“Š 5️⃣ 집계 ν•¨μˆ˜

  • COUNT
  • SUM
  • AVG
  • MAX / MIN
SELECT age, COUNT(*) FROM users GROUP BY age;

WHERE vs HAVING

  • WHERE β†’ κ·Έλ£Ή μ „ ν•„ν„°
  • HAVING β†’ κ·Έλ£Ή ν›„ ν•„ν„°

πŸ”— 6️⃣ JOIN β€” ν…Œμ΄λΈ” μ—°κ²°

μ‹€μ œ μ„œλΉ„μŠ€λŠ” ν…Œμ΄λΈ” ν•˜λ‚˜λ‘œ λλ‚˜μ§€ μ•ŠλŠ”λ‹€.

  • users (μ‚¬μš©μž)
  • orders (μ£Όλ¬Έ)

β€œν™κΈΈλ™μ΄ μ£Όλ¬Έν•œ μƒν’ˆμ€?”

SELECT u.name, o.product
FROM users u
INNER JOIN orders o
ON u.id = o.user_id;

JOIN μ’…λ₯˜

  • INNER JOIN β†’ μ–‘μͺ½ λ‹€ μžˆλŠ” 데이터
  • LEFT JOIN β†’ μ™Όμͺ½ μ „λΆ€ + 였λ₯Έμͺ½ λ§€μΉ­

🧠 SQL μ‹€ν–‰ μˆœμ„œ

FROM β†’ WHERE β†’ GROUP BY β†’ HAVING β†’ SELECT β†’ ORDER BY β†’ LIMIT


✨ 핡심 μš”μ•½

  • SQL은 λ°μ΄ν„°λ² μ΄μŠ€μ™€ λŒ€ν™”ν•˜λŠ” μ–Έμ–΄
  • λͺ¨λ“  μž‘μ—…μ€ CRUD둜 κ·€κ²°
  • WHERE μ—†λŠ” UPDATE / DELETEλŠ” μž¬μ•™
  • JOIN이 μ‹€λ¬΄μ˜ 핡심

πŸ—„οΈ β€œSQL은 데이터λ₯Ό λ‹€λ£¨λŠ” 사고방식이닀”

profile
Gongbuhaja

0개의 λŒ“κΈ€