🌈 [Section2] 15. λ°μ΄ν„°λ² μ΄μŠ€ Advanced

ν˜„μ£ΌΒ·2022λ…„ 10μ›” 10일
0

bootcamp

λͺ©λ‘ 보기
34/71

πŸ“• 였늘 배운 λ‚΄μš©!

  • λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™”
  • SQL 문법 μ’…λ₯˜
  • SQL Advanced

✏️ λ°μ΄ν„°λ² μ΄μŠ€ μ •κ·œν™” (Database Normalization)

  • λ°μ΄ν„°μ˜ 쀑볡을 μ—†μ•  무결성을 μœ μ§€ν•˜λ©΄μ„œ, μ΄μƒν˜„μƒμ΄ μžˆλŠ” λ¦΄λ ˆμ΄μ…˜μ„ λΆ„ν•΄ν•˜μ—¬ μ΄μƒν˜„μƒμ„ μ—†μ• λŠ” κ³Όμ •
    ( μ •κ·œν˜•μ΄ λ†’μ•„μ§ˆ 수둝 μ΄μƒν˜„μƒμ€ 쀄어듦 )

    λ¦΄λ ˆμ΄μ…˜
    ν–‰κ³Ό μ—΄λ‘œ κ΅¬μ„±λœ ν…Œμ΄λΈ”
    [μ°Έκ³ ] https://terms.naver.com/entry.naver?docId=3431156&cid=58430&categoryId=58430

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ 섀계와 κ΄€λ ¨
    ( 섀계가 결둠적으둜 데이터가 μ–΄λ–»κ²Œ μ €μž₯될지에 λŒ€ν•œ ꡬ쑰λ₯Ό μ •ν•΄μ£ΌλŠ” 것이기 λ•Œλ¬Έ )

βœ” μ •κ·œν™”λ₯Ό μœ„ν•΄ μ€‘μš”ν•œ μš”μ†Œ

1. 데이터 쀑볡 (Data redundancy)

  • μ‹€μ œ λ°μ΄ν„°μ˜ λ™μΌν•œ λ³΅μ‚¬λ³Έμ΄λ‚˜ 뢀뢄적인 볡사본
    ➜ 데이터 볡ꡬ μ‹œ 더 μˆ˜μ›”ν•  수 있음 But, λ¬Έμ œμ λ„ 있음

    λ°œμƒ κ°€λŠ₯ν•œ 문제점

    1. μΌκ΄€λœ 자료 처리의 어렀움
    2. μ €μž₯ 곡간 λ‚­λΉ„
    3. 데이터 νš¨μœ¨μ„± κ°μ†Œ

2. 데이터 무결성 (Data integrity)

  • λ°μ΄ν„°μ˜ 수λͺ… μ£ΌκΈ° λ™μ•ˆ μ •ν™•μ„±κ³Ό 일관성을 μœ μ§€ν•˜λŠ” 것
    ➜ μž…λ ₯된 데이터가 μ˜€μ—Όλ˜μ§€ μ•Šκ³  μž…λ ₯된 κ·ΈλŒ€λ‘œ 데이터 μ‚¬μš© κ°€λŠ₯

3. 데이터 이상 ν˜„μƒ (Anomaly)

  • λ°μ΄ν„°μ—μ„œ κΈ°λŒ€ν•œ 것과 λ‹€λ₯Έ ν˜„μƒμ΄ λ‚˜νƒ€λ‚˜λŠ” 것
    1. κ°±μ‹  이상 (update anomaly)
      ➜ λ™μΌν•œ 데이터가 μ—¬λŸ¬ ν–‰(λ ˆμ½”λ“œ)에 κ±Έμ³μžˆμ„ λ•Œ μ–΄λŠ 데이터λ₯Ό κ°±μ‹ ν•΄μ•Όν•˜λŠ”μ§€μ— λŒ€ν•œ 논리적 일관성이 μ—†μ–΄ λ°œμƒ
      β €
    2. μ‚½μž… 이상 (insertion anomaly)
      ➜ 데이터λ₯Ό μΆ”κ°€ν•  λ•Œ ν•œ μ»¬λŸΌμ— λŒ€ν•œ 데이터가 아직 μ •ν•΄μ Έ μžˆμ§€ μ•Šμ„ 경우 μΆ”κ°€ν•˜μ§€ λͺ»ν•˜κ²Œ λ˜λŠ” 경우 λ°œμƒ
      β €
    3. μ‚­μ œ 이상 (deletion anomaly)
      ➜ λ°μ΄ν„°μ˜ νŠΉμ • 뢀뢄을 μ§€μšΈ λ•Œ, μ˜λ„μΉ˜μ•Šκ²Œ λ‹€λ₯Έ 뢀뢄듀도 같이 μ§€μ›Œμ§€λŠ” ν˜„μƒ

βœ” μž₯점

  • 데이터 λ³€κ²½μ‹œ, 이상 ν˜„μƒ 제거 κ°€λŠ₯

  • μƒˆλ‘œμš΄ 데이터 ν˜•μ˜ μΆ”κ°€λ‘œ ꡬ쑰λ₯Ό ν™•μž₯ν•  λ•Œ, κ·Έ ꡬ쑰λ₯Ό λ³€κ²½ν•˜μ§€ μ•Šμ•„λ„ λ˜κ±°λ‚˜ μΌλΆ€λ§Œ 변경해도 됨

  • λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°λ™λœ μ‘μš© ν”„λ‘œκ·Έλž¨μ— μ΅œμ†Œν•œμ˜ 영ν–₯λ§Œμ„ 미쳐 μ‘μš© ν”„λ‘œκ·Έλž¨μ˜ 생λͺ… μ—°μž₯μ‹œν‚΄

  • ν•œ ν…Œμ΄λΈ”μ˜ 데이터 μš©λŸ‰μ΄ μ΅œμ†Œν™”λ¨
    ( 데이터 쀑볡 μ œκ±°ν•˜μ—¬ λ™μΌν•œ 의미의 일반 속성이 ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”λ‘œ μ§‘μ•½λ˜κΈ° λ•Œλ¬Έ )

βœ” 단점

  • λ¦΄λ ˆμ΄μ…˜μ˜ λΆ„ν•΄λ‘œ μΈν•œ λ¦΄λ ˆμ΄μ…˜ κ°„μ˜ JOIN 연산이 λ§Žμ•„μ§

  • 쿼리문 μ§ˆμ˜μ— λŒ€ν•œ 응닡 μ‹œκ°„μ΄ 느렀질 μˆ˜λ„ 있고
    ( But, ν•œ ν…Œμ΄λΈ” λ‚΄μ—μ„œλŠ” μ‘λ‹΅μ‹œκ°„μ΄ λΉ λ₯Ό μˆ˜λ„ 있음 )

  • λ§Œμ•½ 쑰인이 많이 λ°œμƒν•˜μ—¬ μ„±λŠ₯ μ €ν•˜κ°€ λ‚˜νƒ€λ‚˜λ©΄ λ°˜μ •κ·œν™”(De-normalization)λ₯Ό μ μš©ν•  μˆ˜λ„ 있음

[μ°Έκ³ ] https://www.w3schools.in/dbms/database-normalization


✏️ SQL 문법 μ’…λ₯˜

1. Data Definition Language (DDL)

  • 데이터λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄

  • λ°μ΄ν„°λ² μ΄μŠ€μ˜ ν…Œμ΄λΈ”κ³Ό 같은 였브젝트λ₯Ό μ •μ˜ν•  λ•Œ μ‚¬μš©
    Ex. CREATE, DROP λ“±

2. Data Manipulation Language (DML)

  • λ°μ΄ν„°λ² μ΄μŠ€μ— 데이터λ₯Ό μ €μž₯ν•  λ•Œ μ‚¬μš©ν•˜λŠ” μ–Έμ–΄
    Ex. INSERT, DELETE, UPDATE λ“±

3. Data Control Language (DCL)

  • λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œκ³Ό κ΄€λ ¨λœ 문법

  • μ–΄λŠ μœ μ €κ°€ λ°μ΄ν„°λ² μ΄μŠ€μ— μ ‘κ·Όν•  수 μžˆλŠ”μ§€ κΆŒν•œ μ„€μ •
    Ex. GRANT, REVOKE λ“±

4. Data Query Language (DQL)

  • 정해진 μŠ€ν‚€λ§ˆ λ‚΄μ—μ„œ 쿼리할 수 μžˆλŠ” μ–Έμ–΄
    ( But, DQL을 DML의 μΌλΆ€λΆ„μœΌλ‘œ μ·¨κΈ‰ν•˜κΈ°λ„ 함 )
    Ex. SELECT

5. Transaction Control Language (TCL)

  • DML을 거친 λ°μ΄ν„°μ˜ 변경사항을 μˆ˜μ • κ°€λŠ₯
    Ex. COMMIT, ROLLBACK

✏️ SQL Advanced

βœ” CASE μ‚¬μš©

  • SQL 쿼리문에도 ifλ¬Έκ³Ό 같은 κΈ°λŠ₯ μ‚¬μš© κ°€λŠ₯

    Ex.

    SELECT CASE
    			WHEN CustomerId <= 25 THEN 'GROUP 1'
    			WHEN CustomerId <= 50 THEN 'GROUP 2'
    			ELSE 'GROUP 3'
    		END
    	FROM customers

    ➜ CustomerId ν•„λ“œκ°’μ— 따라 3개의 κ·Έλ£Ή( GROUP 1, GROUP 2, GROUP 3 )으둜 λ‚˜λˆ”
    ( CustomerId ν•„λ“œκ°’μ΄ 25 μ΄ν•˜μΈ κ²½μš°μ—λŠ” GROUP 1, 26 ~ 50인 κ²½μš°μ—λŠ” GROUP 2, 51 이상은 GROUP 3 으둜 λΆ„λ₯˜ )

βœ” SUBQUERY(μ„œλΈŒμΏΌλ¦¬)

  • 쿼리문을 μž‘μ„±ν•  λ•Œ μ†Œκ΄„ν˜Έλ‘œ 감싸 λ‹€λ₯Έ 쿼리문을 ν¬ν•¨ν•˜λŠ” 것
    ( 이 λ•Œ, ν¬ν•¨λ˜λŠ” 쿼리문이 μ„œλΈŒμΏΌλ¦¬ )

  • IN , NOT IN / EXISTS , NOT EXISTS / FROM 등에 μ‚¬μš© κ°€λŠ₯

    EXISTS
    μ‘°νšŒν•˜λ €λŠ” λ ˆμ½”λ“œκ°€ μ‘΄μž¬ν•œλ‹€λ©΄ μ°Έ(TRUE)을, 그렇지 μ•Šμ€ κ²½μš°μ—λŠ” 거짓(FALSE)을 리턴

Ex.

SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)

➜ CustomerIdκ°€ 10 μ΄ν•˜μΈ λ°μ΄ν„°μ—μ„œ 전체 μ…€λ ‰
( 쑰회된 λ°μ΄ν„°μ˜ CustomerId도 10 μ΄ν•˜ )


SELECT EmployeeId
FROM employees e
WHERE EXISTS (
	SELECT 1
	FROM customers c
	WHERE c.SupportRepId = e.EmployeeId
	)
ORDER BY EmployeeId

➜ μ„œλΈŒμΏΌλ¦¬λ‘œ customers ν…Œμ΄λΈ”μ˜ SupportRepId ν•„λ“œκ°’κ³Ό employees ν…Œμ΄λΈ”μ˜ EmployeeId ν•„λ“œκ°’μ„ 비ꡐ해 μΌμΉ˜ν•˜λŠ” λ ˆμ½”λ“œλ“€μ„ κ°€μ Έμ™€μ„œ 쑰회


SELECT *
FROM (
	SELECT CustomerId
	FROM customers
	WHERE CustomerId < 10
	)

➜ CustomerIdκ°€ 10 μ΄ν•˜μΈ λ°μ΄ν„°μ—μ„œ 전체 μ…€λ ‰
( 쑰회된 λ°μ΄ν„°μ˜ CustomerId도 10 μ΄ν•˜ )


🌈 λŠλ‚€μ 

사싀 아직 μ–΄λ ΅κΈ΄ ν•˜μ§€λ§Œ κ·Έλž˜λ„ 처음 μ ‘ν–ˆμ„ λ•Œλ³΄λ‹€λŠ” 많이 μ•Œκ²Œλœ 것 κ°™λ‹€ !

화이띡

0개의 λŒ“κΈ€