Search

데이터 λͺ¨λΈκ³Ό SQL

데이터 λͺ¨λΈκ³Ό SQL

β€’
β€’

μ •κ·œν™”

이상 ν˜„μƒμ„ ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 데이터λ₯Ό λΆ„ν•΄ν•˜λŠ” κ³Όμ •
β€’
데이터 쀑볡 μ΅œμ†Œν™”
β€’
데이터 μœ μ—°μ„± μ΅œλŒ€ν™”
μ •κ·œν™” 각 μ ˆμ°¨μ—μ„œ μˆ˜ν–‰ν•˜λŠ” μž‘μ—… μ™Έμš°κΈ°
1μ •κ·œν™”
2μ •κ·œν™”
3μ •κ·œν™”
BCNF
4μ •κ·œν™”
5μ •κ·œν™”
도
λΆ€
이
κ²°
λ‹€
μ‘°

μ΄μƒν˜„μƒ

λ°μ΄ν„°μ˜ 쀑볡성과 μ’…μ†μ„±μœΌλ‘œ 인해 λ°œμƒν•˜λŠ” ν˜„μƒ
β€’
μ’…λ₯˜
이상 ν˜„μƒ
μ„€λͺ…
μ‚½μž… 이상 (Insertion Anomaly)
데이터λ₯Ό μΆ”κ°€ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 정보가 λΆ€μ‘±ν•˜μ—¬ λ°œμƒν•˜λŠ” ν˜„μƒ
κ°±μ‹  이상 (Update Anomaly)
데이터 일뢀λ₯Ό μ—…λ°μ΄νŠΈν•  λ•Œ 일관성이 μ—†λŠ” 데이터 변경이 λ°œμƒν•˜λŠ” ν˜„μƒ
μ‚­μ œ 이상 (Deletion Anomaly)
νŠΉμ • 행을 μ‚­μ œν•  λ•Œ μ›μΉ˜ μ•ŠλŠ” 데이터 손싀이 λ°œμƒν•˜λŠ” ν˜„μƒ

μ •κ·œν™” 절차

β€’
제1μ •κ·œν™”
β€’
제2μ •κ·œν™”
β€’
제3μ •κ·œν™”
β€’
BCNF (Boyce-Codd Normal Form)
β€’
제4μ •κ·œν™”
β€’
제5μ •κ·œν™”

제1μ •κ·œν™”

각 열이 μ›μžμ (Atomic)인 값을 가지도둝 ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •
각 μ—΄μ—λŠ” ν•˜λ‚˜μ˜ κ°’λ§Œ ν¬ν•¨λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. λ§Œμ•½ μ—¬λŸ¬ 값을 ν¬ν•¨ν•˜κ³  μžˆλ‹€λ©΄ 이λ₯Ό λ³„λ„μ˜ ν–‰μœΌλ‘œ λΆ„λ¦¬ν•©λ‹ˆλ‹€.

제2μ •κ·œν™”

λΆ€λΆ„ ν•¨μˆ˜ 쒅속이 μ—†λŠ” μƒνƒœλ‘œ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •

제3μ •κ·œν™”

이행 ν•¨μˆ˜ 쒅속이 μ—†λŠ” μƒνƒœλ‘œ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •

BCNF (Boyce-Codd Normal Form)

λͺ¨λ“  κ²°μ •μžκ°€ 후보 ν‚€(candidate key)인 μƒνƒœλ‘œ ν…Œμ΄λΈ”μ„ μž¬κ΅¬μ„±ν•˜λŠ” κ³Όμ •

제4μ •κ·œν™”

λ‹€μΉ˜ 쒅속성이 μ œκ±°ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •

제5μ •κ·œν™”

쑰인 쒅속성이 μ œκ±°ν•˜κΈ° μœ„ν•΄ ν…Œμ΄λΈ”μ„ λΆ„ν•΄ν•˜λŠ” κ³Όμ •

ν•¨μˆ˜μ  쒅속성

β€’
λΆ€λΆ„ ν•¨μˆ˜ 쒅속성
β€’
μ™„μ „ ν•¨μˆ˜ 쒅속성
β€’
이행(전이) ν•¨μˆ˜ 쒅속성
β€’
λ‹€μΉ˜ ν•¨μˆ˜ 쒅속성

λΆ€λΆ„ ν•¨μˆ˜ 쒅속성

ν•œ 속성이 λ‹€λ₯Έ μ†μ„±μ˜ 일뢀에 λŒ€ν•΄λ§Œ ν•¨μˆ˜μ μœΌλ‘œ 쒅속 : (A,B) C + B D

μ™„μ „ ν•¨μˆ˜ 쒅속성

ν•œ 속성이 λ‹€λ₯Έ μ†μ„±μ˜ λͺ¨λ“  뢀뢄에 λŒ€ν•΄ ν•¨μˆ˜μ μœΌλ‘œ 쒅속 : (A,B) C

이행(전이) ν•¨μˆ˜ 쒅속성

ν•œ 속성이 λ‹€λ₯Έ 속성을 톡해 κ°„μ ‘μ μœΌλ‘œ ν•¨μˆ˜μ μœΌλ‘œ 쒅속 : ABC

λ‹€μΉ˜ ν•¨μˆ˜ 쒅속성

ν•œ 속성이 2개 μ΄μƒμ˜ 속성을 ν•¨μˆ˜μ μœΌλ‘œ 쒅속

μ •κ·œν™”μ˜ ν•œκ³„(문제점)

μ—”ν„°ν‹°λ₯Ό λ„ˆλ¬΄ 많이 λΆ„ν•΄ν•˜λ©΄, 쑰회 μ‹œ μž¦μ€ 쑰인을 μœ λ°œν•œλ‹€. 쑰회 μ„±λŠ₯ μ €ν•˜ 유발(속도 느렀짐)
μ •κ·œν™”μ˜ ν•œκ³„λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄μ„œ λ°˜μ •κ·œν™”λ₯Ό ν•  수 μžˆλ‹€.

λ°˜μ •κ·œν™”

μ •κ·œν™”λœ μ—”ν„°ν‹°λ₯Ό ν•©μΉ˜κ±°λ‚˜ 쀑볡 데이터λ₯Ό ν—ˆμš©ν•˜λŠ” κ³Όμ •
쑰인 μ΅œμ†Œν™” 쑰회 μ„±λŠ₯(속도) ν–₯상
데이터 λͺ¨λΈμ˜ μœ μ—°μ„± μ €ν•˜

λ°˜μ •κ·œν™”κ°€ ν•„μš”ν•œ 경우

β€’
μš”μ•½/집계 정보가 μš”κ΅¬λ˜λŠ” 경우
β€’
νŠΉμ • λ²”μœ„μ˜ λ°μ΄ν„°λ§Œ 자주 μ‘°νšŒν•˜λŠ” 경우
β€’
λ‹€λŸ‰μ˜ λ²”μœ„λ₯Ό 자주 μ²˜λ¦¬ν•˜λŠ” 경우
β€’
μ •κ·œν™”λ‘œ 인해 μˆ˜ν–‰ 속도가 λŠλ €μ§€λŠ” 경우

λ°˜μ •κ·œν™” 기법

1.
κ³„μ‚°λœ 컬럼 μΆ”κ°€
2.
ν…Œμ΄λΈ” 수직 λΆ„ν• 
3.
ν…Œμ΄λΈ” μˆ˜ν‰ λΆ„ν• 
4.
ν…Œμ΄λΈ” 병합
λ°˜μ •κ·œν™” 기법
μ„€λͺ…
κ³„μ‚°λœ 컬럼 μΆ”κ°€
β€œν•©κ³„, 평균 λ“± 자주 μ‚¬μš©λ˜λŠ” κ³„μ‚°λœ 데이터λ₯Ό 맀번 쑰인 및 ν•¨μˆ˜ μ‚¬μš©μ„ ν•˜μ§€ μ•Šκ³  배치λ₯Ό 돌렀 미리 κ³„μ‚°ν•œ 값을 μ»¬λŸΌμ— μΆ”κ°€ν•΄λ‘λŠ” 기법” 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€κ³ , λ³΅μž‘ν•œ 연산을 μ€„μ—¬μ€Œ.
ν…Œμ΄λΈ” 수직 λΆ„ν• 
β€œμ»¬λŸΌμ„ κΈ°μ€€μœΌλ‘œ 뢄할”. ν•œ ν…Œμ΄λΈ”μ˜ μ»¬λŸΌμ„ 두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ„λŠ” 기법. 자주 μ‚¬μš©ν•˜λŠ” 컬럼과 κ·Έλ ‡μ§€ μ•Šμ€ μ»¬λŸΌμ„ λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚΄.
ν…Œμ΄λΈ” μˆ˜ν‰ λΆ„ν• 
β€œκ°’μ„ κΈ°μ€€μœΌλ‘œ 뢄할”. ν•œ ν…Œμ΄λΈ”μ˜ 둜우λ₯Ό 두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”λ‘œ λ‚˜λˆ„λŠ” 기법. 자주 μ‚¬μš©λ˜λŠ” λ‘œμš°μ™€ κ·Έλ ‡μ§€ μ•Šμ€ 둜우λ₯Ό λ³„λ„μ˜ ν…Œμ΄λΈ”λ‘œ λΆ„λ¦¬ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚΄.
ν…Œμ΄λΈ” 병합
두 개 μ΄μƒμ˜ ν…Œμ΄λΈ”μ„ ν•˜λ‚˜μ˜ ν…Œμ΄λΈ”λ‘œ ν•©μΉ˜λŠ” 기법. μ—¬λŸ¬ ν…Œμ΄λΈ” κ°„μ˜ 쑰인을 μ€„μ—¬μ„œ 쑰회 μ„±λŠ₯을 ν–₯μƒμ‹œν‚΄. 단, 데이터 쀑볡이 λ°œμƒν•  수 있음.

νŒŒν‹°μ…˜(Partition) 기법

λŒ€μš©λŸ‰μ˜ 데이터λ₯Ό 더 μž‘μ€ 논리적 λ‹¨μœ„λ‘œ λΆ„ν• ν•˜μ—¬ 데이터 μ„±λŠ₯을 ν–₯μƒμ‹œν‚€λŠ” 기법
νŒŒν‹°μ…˜ 기법
μ„€λͺ…
Range Partition
μ—°μ†λœ λ²”μœ„λ₯Ό 기반으둜 데이터λ₯Ό λΆ„ν• ν•˜μ—¬ νŒŒν‹°μ…˜μ„ 생성함.
List Partition
λͺ©λ‘μ— 따라 데이터λ₯Ό λΆ„ν• ν•˜μ—¬ νŒŒν‹°μ…˜μ„ 생성함.
Hash Partition
ν•΄μ‹œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό λΆ„ν• ν•˜μ—¬ νŒŒν‹°μ…˜μ„ 생성함.
Composite Partition
두 개 μ΄μƒμ˜ νŒŒν‹°μ…˜ ν‚€λ₯Ό μ‘°ν•©ν•˜μ—¬ 데이터λ₯Ό 뢄할함.

Super Type & Sub Type

λΆ€λͺ¨μ™€ μžμ‹ κ°„μ˜ κ΄€κ³„λ‘œ, μƒμœ„ 엔터티와 ν•˜μœ„ μ—”ν„°ν‹°λ₯Ό λ‚˜νƒ€λ‚΄λŠ” κ°œλ…
ex) 고객 μ—”ν„°ν‹°
β€’
Super Type : 고객 μ—”ν„°ν‹°
β—¦
Sub Type : 개인 고객 μ—”ν„°ν‹°
β—¦
Sub Type : 법인 고객 μ—”ν„°ν‹°

Super Type & Sub Type λ³€ν™˜ 방법

λ³€ν™˜ 방법
μ„€λͺ…
OneToOne Type
- ν•˜μœ„ μœ ν˜•λ“€μ΄ μƒμœ„ μœ ν˜•κ³Ό μΌλŒ€μΌ 관계λ₯Ό 가짐. - ν…Œμ΄λΈ” 수 : κ°œλ³„ ν…Œμ΄λΈ” [ 슈퍼(1), μ„œλΈŒ(1) ] - 쑰인 μ„±λŠ₯ : λ‚˜μ¨ 쑰인 많이 λ°œμƒ
Plus Type
- ν•˜μœ„ μœ ν˜•λ“€μ΄ μ„œλ‘œ μ€‘λ³΅λ˜μ§€ μ•Šκ³ , μƒμœ„ μœ ν˜•κ³Ό μΌλŒ€λ‹€ 관계λ₯Ό 가짐. - ν…Œμ΄λΈ” 수 : κ°œλ³„ ν…Œμ΄λΈ” [ 슈퍼(1), μ„œλΈŒ(1) ] - 쑰인 μ„±λŠ₯ : λ‚˜μ¨ 쑰인 많이 λ°œμƒ
Single Type
- ν•˜μœ„ μœ ν˜•λ“€μ΄ μ„œλ‘œ 쀑볡될 수 있고, μƒμœ„ μœ ν˜•κ³Ό λ‹€λŒ€λ‹€ 관계λ₯Ό 가짐. - ν…Œμ΄λΈ” 수 : 단일 ν…Œμ΄λΈ” [ 슈퍼+μ„œλΈŒ(1) ] - 쑰인 μ„±λŠ₯ : μ’‹μŒ * μž…μΆœλ ₯ μ„±λŠ₯ λ‚˜μ¨

관계와 쑰인

관계(Relationship)

κ΄€κ³„ν˜• λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œλŠ” μ—”ν„°ν‹°κ°„μ˜ 연결을 κ΄€κ³„λ‘œ μ •μ˜ν•œλ‹€.
μ—”ν„°ν‹°κ°„μ˜ κ΄€κ³„λŠ” μ•„λž˜μ˜ κΈ°μ€€μœΌλ‘œ λ³€ν™˜ν•œλ‹€.
β€’
M:N (λ‹€λŒ€λ‹€)의 κ΄€κ³„λŠ” μ—”ν„°ν‹°λ‘œ λ³€ν™˜ν•œλ‹€.
β€’
1:N (μΌλŒ€λ‹€)의 κ΄€κ³„λŠ” μ™Έλž˜ν‚€λ‘œ λ³€ν™˜ν•œλ‹€.
β€’
1:1 (μΌλŒ€μΌ)의 κ΄€κ³„λŠ” μ™Έλž˜ν‚€λ‘œ λ³€ν™˜ν•œλ‹€.
ex) β€œνšŒμ›μ΄ μƒν’ˆμ„ μ£Όλ¬Έν•  수 μžˆλ‹€.”
β€œμ£Όλ¬Έβ€ 이 관계가 되고, β€œμ£Όλ¬Έβ€ μ—”ν„°ν‹°λ‘œ μƒμ„±ν•œλ‹€.

쑰인

2개 μ΄μƒμ˜ ν…Œμ΄λΈ”λ“€μ„ κ²°ν•©ν•˜μ—¬ ν•˜λ‚˜μ˜ κ²°κ³Ό μ§‘ν•©μœΌλ‘œ κ°€μ Έμ˜€λŠ” μ—°μ‚°

μ •κ·œν™”&λ°˜μ •κ·œν™”μ™€ 쑰인

μ •κ·œν™”λ₯Ό ν•˜λ©΄ ν…Œμ΄λΈ”λ“€μ΄ μ—¬λŸ¬ 개둜 μͺΌκ°œμ§€κΈ° λ•Œλ¬Έμ—, κ²°ν•¨λœ 의미λ₯Ό κ°–λŠ” 데이터λ₯Ό μ‘°νšŒν•˜κΈ° μœ„ν•΄μ„œ μ—¬λŸ¬ ν…Œμ΄λΈ”μ„ μ‘°μΈν•΄μ•Όν•˜κΈ° λ•Œλ¬Έμ—, 쑰인에 λ”°λ₯Έ 쑰회 μ„±λŠ₯이 μ €ν•˜λ  수 μžˆλ‹€. 이λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄, μ μ ˆν•˜κ²Œ λ°˜μ •κ·œν™”λ₯Ό ν•˜μ—¬ ν…Œμ΄λΈ”μ„ λ³‘ν•©ν•˜κ²Œ 되면 쑰인없이도 μ‘°νšŒκ°€ κ°€λŠ₯ν•˜μ—¬ 쑰회 μ„±λŠ₯을 ν–₯상 μ‹œν‚¬ 수 μžˆλ‹€.
β€’
μ •κ·œν™”
β—¦
λ°μ΄ν„°μ˜ 무결성과 일관성
β—¦
쑰회 μ„±λŠ₯
β€’
λ°˜μ •κ·œν™”
β—¦
λ°μ΄ν„°μ˜ 무결성과 일관성
β—¦
쑰회 μ„±λŠ₯
β—¦

νŠΈλžœμž­μ…˜

λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ μˆ˜ν–‰λ˜λŠ” μž‘μ—…μ˜ 논리적 λ‹¨μœ„
β€’
ν•˜λ‚˜ μ΄μƒμ˜ SQL λͺ…령문을 포함
β€’
ACID 속성을 μ€€μˆ˜ν•˜μ—¬ μ‹€ν–‰λ˜μ–΄μ•Όν•¨.

νŠΈλžœμž­μ…˜ νŠΉμ§•

νŠΉμ§•
μ„€λͺ…
μ›μžμ„± (Atomicity)
νŠΈλžœμž­μ…˜μ€ λͺ¨λ“  μž‘μ—…μ΄ μ™„λ£Œλ˜κ±°λ‚˜ μ „ν˜€ μˆ˜ν–‰λ˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€. 즉, νŠΈλžœμž­μ…˜ λ‚΄μ˜ λͺ¨λ“  μž‘μ—…μ€ μ›μžμ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
일관성 (Consistency)
νŠΈλžœμž­μ…˜μ˜ μˆ˜ν–‰ μ „κ³Ό 후에 λ°μ΄ν„°λ² μ΄μŠ€λŠ” μΌκ΄€λœ μƒνƒœλ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€. 즉, νŠΈλžœμž­μ…˜μ΄ μ‹€ν–‰λ˜λŠ” λ™μ•ˆ λ°μ΄ν„°λ² μ΄μŠ€μ˜ 일관성이 μœ μ§€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.
격리성 (Isolation)
λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” μ—¬λŸ¬ νŠΈλžœμž­μ…˜μ€ μ„œλ‘œ 영ν–₯을 λ―ΈμΉ˜μ§€ μ•Šκ³  λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉, ν•œ νŠΈλžœμž­μ…˜μ˜ κ²°κ³Όκ°€ λ‹€λ₯Έ νŠΈλžœμž­μ…˜μ— 영ν–₯을 μ£Όμ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.
지속성 (Durability)
νŠΈλžœμž­μ…˜μ΄ μ„±κ³΅μ μœΌλ‘œ μ™„λ£Œλœ 경우, ν•΄λ‹Ή κ²°κ³ΌλŠ” 영ꡬ적으둜 μœ μ§€λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€. 즉, νŠΈλžœμž­μ…˜μ΄ μ»€λ°‹λœ ν›„μ—λŠ” κ·Έ κ²°κ³Όκ°€ μ§€μ†λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

식별관계 vs 비식별관계

식별 관계 : μ‹€μ„ μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€.
비식별 관계 : μ μ„ μœΌλ‘œ λ‚˜νƒ€λ‚Έλ‹€.

μ‹λ³„μž 관계

λΆ€λͺ¨ μ—”ν„°ν‹°μ˜ κΈ°λ³Έ ν‚€κ°€ μžμ‹ μ—”ν„°ν‹°μ˜ κ³ μœ ν‚€(μ£Ό μ‹λ³„μž)둜 μ‚¬μš©λ˜λŠ” 관계

λΉ„μ‹λ³„μž 관계

λΆ€λͺ¨ μ—”ν„°ν‹°μ˜ κΈ°λ³Έ ν‚€κ°€ μžμ‹ μ—”ν„°ν‹°μ˜ κ³ μœ ν‚€(μ£Ό μ‹λ³„μž)둜 μ‚¬μš©λ˜μ§€ μ•ŠλŠ” 관계

κ°•ν•œ 개체 VS μ•½ν•œ 개체

νŠΉμ§•
κ°•ν•œ 개체 (Strong Entity)
μ•½ν•œ 개체 (Weak Entity)
μ‹λ³„μž
자체적인 μ‹λ³„μžκ°€ 있음
λΆ€λͺ¨ 엔터티에 의쑴적이며, 자체적인 μ‹λ³„μžκ°€ μ—†μŒ
독립성
λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•  수 있음
λΆ€λͺ¨ 엔터티와 관련이 있으며, λΆ€λͺ¨ μ—”ν„°ν‹° 없이 μ‘΄μž¬ν•  수 μ—†μŒ
생성 κ·œμΉ™
μžμ‹ μ˜ μ‹λ³„μžλ₯Ό 생성할 수 있음
λΆ€λͺ¨ μ—”ν„°ν‹°μ˜ μ‹λ³„μžμ™€ μ—°κ²°λœλ‹€. μ‹λ³„μž 생성 κ·œμΉ™μ΄ ν•„μš”ν•¨
생λͺ… μ£ΌκΈ°
독립적인 생λͺ… μ£ΌκΈ°λ₯Ό κ°€μ§ˆ 수 있음
λΆ€λͺ¨ 엔터티와 μ—°κ΄€λœ 생λͺ… μ£ΌκΈ°λ₯Ό 가짐
μ˜ˆμ‹œ
μžλ™μ°¨ (μ°¨λŸ‰λ²ˆν˜Έ, λͺ¨λΈ, μ œμ‘°μ‚¬)
μ£Όλ¬Έ 상세 (주문번호, μƒν’ˆλ²ˆν˜Έ, μˆ˜λŸ‰)
학생 (ν•™λ²ˆ, 이름, 전곡)
μ˜ν™” 평점 (μ˜ν™”ID, μ‚¬μš©μžID, 평점)
μ£Όλ¬Έ (주문번호, λ‚ μ§œ, 가격)
κ²Œμ‹œκΈ€ λŒ“κΈ€ (κ²Œμ‹œκΈ€ID, μ‚¬μš©μžID, λ‚΄μš©)

NULL

값이 μ‘΄μž¬ν•˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚΄λŠ” 것.

NULL κ΄€λ ¨ 사항

β€’
NULL 과의 μ—°μ‚°
β€’
NULL 처리 ν•¨μˆ˜
β€’
COUNT() ν•¨μˆ˜μ™€ NULL 관계

NULL 과의 μ—°μ‚°

NULL + ? = NULL
NULL κ³Ό λ‹€λ₯Έ 값을 μ–΄λ–€ 연산을 ν•˜μ—¬λ„ κ²°κ³ΌλŠ” NULL 이닀.
μ‹€μ œλ‘œλŠ” NULL κ³Ό 연산이 λ°œμƒν•˜μ§€ μ•Šλ„λ‘ NULL 처리 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것을 ꢌμž₯ν•œλ‹€.

NULL 처리 ν•¨μˆ˜

값이 NULL 일 λ•Œ, λ‹€λ₯Έ κ°’μœΌλ‘œ λŒ€μ²΄ν•˜λŠ” ν•¨μˆ˜
DBMS
ν•¨μˆ˜
μ„€λͺ…
Oracle
NVL(expr1, expr2)
expr1이 NULL이면 expr2λ₯Ό λ°˜ν™˜ν•˜κ³ , κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ expr1을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
NVL2(expr1, expr2, expr3)
expr1이 NULL이 μ•„λ‹ˆλ©΄ expr2λ₯Ό, κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ expr3λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
COALESCE(expr1, expr2, ...)
NULL이 μ•„λ‹Œ 첫 번째 인수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
MySQL
IFNULL(expr1, expr2)
expr1이 NULL이면 expr2λ₯Ό λ°˜ν™˜ν•˜κ³ , κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ expr1을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
COALESCE(expr1, expr2, ...)
NULL이 μ•„λ‹Œ 첫 번째 인수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
MS SQL Server
ISNULL(expr1, expr2)
expr1이 NULL이면 expr2λ₯Ό λ°˜ν™˜ν•˜κ³ , κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ expr1을 λ°˜ν™˜ν•©λ‹ˆλ‹€.
COALESCE(expr1, expr2, ...)
NULL이 μ•„λ‹Œ 첫 번째 인수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•˜μ—¬ 각 λ°μ΄ν„°λ² μ΄μŠ€ μ‹œμŠ€ν…œμ—μ„œ NULL 값을 μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

COUNT() ν•¨μˆ˜μ™€ NULL 관계

β€’
COUNT() ν•¨μˆ˜
ν…Œμ΄λΈ”μ˜ ν–‰μ˜ 수(개수)λ₯Ό λ°˜ν™˜ν•˜λŠ” ν•¨μˆ˜
ν•¨μˆ˜
μ„€λͺ…
COUNT(*)
ν…Œμ΄λΈ”μ— μžˆλŠ” λͺ¨λ“  λ ˆμ½”λ“œμ˜ 수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
COUNT(column)
μ§€μ •λœ μ—΄μ˜ 값이 NULL이 μ•„λ‹Œ λ ˆμ½”λ“œμ˜ 수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
COUNT(DISTINCT column)
μ§€μ •λœ μ—΄μ˜ μ€‘λ³΅λ˜μ§€ μ•ŠλŠ” κ°’λ“€μ˜ 수λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
μ΄λŸ¬ν•œ ν•¨μˆ˜λ“€μ„ μ‚¬μš©ν•˜μ—¬ νŠΉμ • μ—΄μ΄λ‚˜ λ ˆμ½”λ“œμ˜ 수λ₯Ό κ³„μ‚°ν•˜κ³ , 쀑볡을 μ œκ±°ν•œ 값을 μ„ΈλŠ” λ“± λ‹€μ–‘ν•œ 집계 μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.