header-img
Info :
๋ฐ€๋„
denseยน
์žฅ๋ž˜ํฌ๋ง : ๋‹จ์œ„ ๋ถ€ํ”ผ ๋‹น ์งˆ๋Ÿ‰์ด ๋ณด๋‹ค ๋นฝ๋นฝํ•œ ์‚ฌ๋žŒ ๋˜๊ธฐ

 

 

 

 

 

์™œ NULL์€ =์ด ์•„๋‹ˆ๋ผ is๋ฅผ ์“ธ๊นŒ

 

SQL ๋ฌธ๋ฒ•์„ ์ฒ˜์Œ ๋ฐฐ์šธ ๋•Œ, ๊ผญ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. 'NULL์„ ์ฐพ์„ ๋•Œ๋Š” = NULL์ด ์•„๋‹ˆ๋ผ IS NULL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค'. ์˜์•„ํ•˜๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ๋Š” (๋…ผ๋ฆฌ ์—ฐ์‚ฐ์—์„œ) NULL์„ 0๊ณผ ๊ฐ™์ด ์ทจ๊ธ‰ํ•˜์ง€ ์•Š๋Š”๊ฐ€. SQL์—๋Š” ์–ด๋–ค ์ฐจ์ด์ ์ด ์žˆ๊ธธ๋ž˜ ์ด์ฒ˜๋Ÿผ ํŠน๋ณ„ํ•˜๊ฒŒ NULL์„ ๋‹ค๋ฃฐ๊นŒ. ์ด๋ฒˆ ํฌ์ŠคํŠธ์—๋Š” SQL์‹ NULL์˜ ์ •์˜์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ฉด์„œ ์œ„ ์˜๋ฌธ์— ๋Œ€ํ•ด ํŒŒํ—ค์ณ ๋ณธ๋‹ค.

 

 

0๊ณผ NULL์€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฑธ๊นŒ.

 

 

 

๋ฐ์ดํ„ฐ๊ฐ€ '์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’' ๊ทธ๋ž˜์„œ '์•„์ง ๋ชจ๋ฅด๋Š” ๊ฐ’'

 

SQL์—์„œ์˜ NULL์€ ์œ„ํ‚ค๋ฐฑ๊ณผ ๊ธฐ์ค€์œผ๋กœ ์ด๋ ‡๊ฒŒ ์ •์˜๋œ๋‹ค. 'Null ๋˜๋Š” NULL์€ ๊ตฌ์กฐ์  ์งˆ์˜์–ธ์–ด(SQL)์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋‚ด์˜ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์ง€์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ํŠน๋ณ„ํ•œ ํ‘œ์‹œ์–ด(Special marker)'. 

 

์ด์ฒ˜๋Ÿผ NULL์€ '์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’'์ด๋‹ค. 0๋„ ์•„๋‹ˆ๊ณ  STRING๋„ ์•„๋‹ˆ๊ณ  ๋‹ค๋ฅธ ์–ด๋А ํƒ€์ž…๋„ ์•„๋‹Œ ๊ทธ๋ƒฅ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋”ฐ๋กœ ๋นผ ๋‘˜ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ๊ต‰์žฅํžˆ ์ค‘์š”ํ•œ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

NULL์€ '์กด์žฌํ•˜์ง€ ์•Š๋Š”' ๊ฐ’์ด๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, Primary Key๋ฅผ ์„ค์ •ํ•œ๋‹ค๊ณ  ํ•˜์ž. PK๋Š” NOTNULL, NULL ๊ฐ’์ด์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. SQL์—์„œ๋Š” PK์— NULL์ด ๋“ค์–ด์˜ค๋ฉด ์˜ค๋ฅ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ด๋กœ์จ ์˜๋ฏธ ์—†๋Š” ๋กœ์šฐ๋ฅผ ์‚ฌ์ „์— ๊ฑธ๋Ÿฌ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋ฅธ ์ปฌ๋Ÿผ์˜ ๊ฒฝ์šฐ์—๋„ NULL์˜ ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 'NULL'์ด๋ผ๋Š” '์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’'์ด ์ด๋ฏธ ์กด์žฌํ•˜๋‹ˆ '0'์ด๋‚˜ '9999' ์ฒ˜๋Ÿผ ์˜๋ฏธ ์—†๋Š” ์ˆ˜๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์žฌ์ •์˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ์ด์ฒ˜๋Ÿผ SQL์€ NULL์„ ์ฒดํฌํ•จ์œผ๋กœ์จ SQL๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž์ฒด์˜ ์ •ํ•ฉ์„ฑ์„ ํ™•๊ณ ํžˆ ํ•˜๊ณ  ์žˆ๋‹ค.

 

 

 

 

 

NULL์˜ ํŠน์„ฑ

 

์œ„์ฒ˜๋Ÿผ SQL์˜ NULL์€ ํƒ€ ์–ธ์–ด์™€ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ์ •์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ๋„ ์กฐ๊ธˆ ๋‹ค๋ฅธ ๋ฐฉ์‹์œผ๋กœ ์ด๋ค„์ง„๋‹ค. ์•„๋ž˜์—์„œ ์ง์ ‘ ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋ณด๋ฉด์„œ NULL์˜ ํŠน์„ฑ์„ ์•Œ์•„๋ณด์ž.

 

 

A
NULL
1

 

 

 

1) ์‚ฌ์น™์—ฐ์‚ฐ

 

์œ„์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ฒซ ๋ฒˆ์งธ ๋กœ์šฐ๋Š” NULL์ด๊ณ  ๋‘ ๋ฒˆ์งธ ๋กœ์šฐ๋Š” ์ •์ˆ˜๋‹ค. ์ด ํ…Œ์ด๋ธ”์— ์‚ฌ์น™์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋ฉด: 

 

SELECT A + 5, A - 5, A * 5, A / 5 FROM nullcheck;

 

A + 5 A - 5 A * 5 A / 5
NULL NULL NULL NULL
6 -4 5 0.2

 

 

๋„ค ์—ฐ์‚ฐ ๋ชจ๋‘ ๋™์ผํ•˜๊ฒŒ NULL ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋ฅด๋Š” ๊ฐ’์— ์ˆซ์ž๋ฅผ ๋”ํ•˜๊ณ  ๋นผ ๋ด์•ผ ์—ฌ์ „ํžˆ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’์ธ ๊ฒƒ์ด๋‹ค. 

 

 

 

2) ๋น„๊ต์—ฐ์‚ฐ

 

์ด๋ฒˆ์—๋Š” ๋น„๊ต์—ฐ์‚ฐ์„ ์ง„ํ–‰ํ•ด ๋ณด์ž. ์•„๋ž˜์™€ ๊ฐ™์€ ํ…Œ์ด๋ธ”์— ๋น„๊ต์—ฐ์‚ฐ์„ ์ ์šฉํ•˜๋ฉด:

 

A B
1 2
1 NULL
NULL NULL

 

A = B, A > B, A < B๋ฅผ ๊ฐ๊ฐ ์ ์šฉํ–ˆ์„ ๋•Œ A < B์—์„œ ๋‘˜ ๋‹ค ์ •์ˆ˜์ธ ๋กœ์šฐ๊ฐ€ ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ ์™ธ์— ๋‚˜์˜ค๋Š” ๊ฒŒ ์—†๋‹ค. ๋ˆˆ์—ฌ๊ฒจ๋ณผ ์ ์€ 1๊ณผ NULL๋ฟ ์•„๋‹ˆ๋ผ  NULL๊ณผ NULL๋ผ๋ฆฌ๋„ ์•ˆ ๋๋‹ค๋Š” ์ ์ด๋‹ค. SQL์—์„œ NULL ๊ฐ’์€ '์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’' ์ด๋ฏ€๋กœ ์•Œ ์ˆ˜ ์—†๋Š” ๊ฐ’ ์‚ฌ์ด์˜ ๋น„๊ต๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค.

 

 

 

3) ์ง‘๊ณ„ํ•จ์ˆ˜

 

์ด๋ฒˆ์—” ์ง‘๊ณ„ํ•จ์ˆ˜๋‹ค. ์•„๋ž˜ ํ…Œ์ด๋ธ”์— ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์ ์šฉํ•ด ๋ณด๋ฉด:

 

์ฃผ๋ฌธ๋ฒˆํ˜ธ ๊ตฌ๋งค๊ธˆ์•ก
10001 10000
10002 7000
10003 NULL
10004 2000

 

SELECT COUNT(*), COUNT(๊ตฌ๋งค๊ธˆ์•ก), SUM(๊ตฌ๋งค๊ธˆ์•ก), AVG(๊ตฌ๋งค๊ธˆ์•ก), MAX(๊ตฌ๋งค๊ธˆ์•ก), MIN(๊ตฌ๋งค๊ธˆ์•ก)
FROM zipge;

 

COUNT(*) COUNT(๊ตฌ๋งค๊ธˆ์•ก) SUM(๊ตฌ๋งค๊ธˆ์•ก) AVG(๊ตฌ๋งค๊ธˆ์•ก) MAX(๊ตฌ๋งค๊ธˆ์•ก) MIN(๊ตฌ๋งค๊ธˆ์•ก)
4 3 19000 6333.3333 10000 2000

 

์‚ฌ์น™์—ฐ์‚ฐ์—์„œ์ฒ˜๋Ÿผ ์ถœ๋ ฅ์ด ์•„์˜ˆ ์•ˆ ๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋ผ NULL๊ฐ’์„ ์ž๋™์œผ๋กœ ๋นผ๊ณ  ์ด์™ธ์˜ ๊ฐ’์„ ์—ฐ์‚ฐํ•ด ์ค€๋‹ค. ๋‹ค๋งŒ, COUNT์™€ AVG๋Š” ์ฃผ์˜ํ•  ํ•„์š”๊ฐ€ ์žˆ์–ด ๋ณด์ธ๋‹ค. ์ƒ๊ธฐ ์ฟผ๋ฆฌ์—์„œ COUNT(*)์™€ COUNT(๊ตฌ๋งค๊ธˆ์•ก)์€ ์„œ๋กœ ๋‹ค๋ฅธ ๊ฐ’์„ ๋ฆฌํ„ดํ–ˆ๋‹ค. ์ฃผ๋ฌธ๋ฒˆํ˜ธ 10003์€ ์ฃผ๋ฌธ๊ธˆ์•ก์ด NULL์ด์ง€๋งŒ ์ฃผ๋ฌธ๋ฒˆํ˜ธ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ COUNT(*)์—์„œ๋Š” ๊ฐ’์œผ๋กœ ์ง‘๊ณ„๋œ ๊ฒƒ์ด๋‹ค. AVG์˜ ๊ฒฝ์šฐ์—๋Š” ์ „์ฒด ๊ตฌ๋งค์•ก์ธ 19000์„ ํ•ด๋‹น ์ปฌ๋Ÿผ์—์„œ NULL์ด ์•„๋‹Œ ๋กœ์šฐ์ธ 3์œผ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ์ถœ๋ ฅ๋๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ SUM(๊ตฌ๋งค๊ธˆ์•ก) / COUNT(*)์™€๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ๋‹ต์„ ์ถœ๋ ฅํ•˜๊ฒŒ ๋๋‹ค.

 

 

 

 

NULL์„ TRUE ์•„๋‹ˆ๋ฉด FALSE๋กœ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์ผํ•œ ๋ฐฉ๋ฒ•

 

์ด์ฒ˜๋Ÿผ SQL์€ NULL์„ ๊ฑธ๋Ÿฌ๋‚ด๊ธฐ ์œ„ํ•ด ๊ธฐ์กด ์–ธ์–ด์—์„œ ์‚ฌ์šฉ๋˜๋˜ TRUE, FALSE๋กœ ์ด๋ฃจ์–ด์ง„ 2๊ฐ’ ๋…ผ๋ฆฌ์— NULL์„ ์ถ”๊ฐ€ํ•œ 3๊ฐ€ ๋…ผ๋ฆฌ(Three-valued logic)๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

 

์ด์ œ ์šฐ๋ฆฌ๋Š” ์ฒ˜์Œ์˜ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๋‹ค. "์™œ NULL์€ =์ด ์•„๋‹ˆ๋ผ is๋ฅผ ์จ์•ผ ํ• ๊นŒ."

 

๋‹ต๋ณ€์€ ์ด์ฏค ๋˜๊ฒ ๋‹ค. NULL์€ TRUE๋‚˜ FALSE๋กœ ์„ค๋ช…๋  ์ˆ˜ ์—†๋Š” ์ œ 3์˜ ๊ฐ’์ด๋‹ค. ๊ทธ๋ž˜์„œ NULL์€ ๋น„๊ต์—ฐ์‚ฐ๋  ์ˆ˜ ์—†๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๋ชจ๋ฅด๋Š” ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ SQL์€ 'NULL์„ TRUE๋‚˜ FALSE ๋‘ ๊ฐ€์ง€๋กœ ๋น„๊ต์—ฐ์‚ฐํ•  ์ˆ˜ ์žˆ๋Š”' ๋ฌธ๋ฒ•์„ ๋งŒ๋“ค์—ˆ๊ณ  ์ด๊ฒŒ IS NULL๊ณผ IS NOT NULL์ด์—ˆ์„ ๊ฒƒ์ด๋‹ค.

 

NULL๋„ ๋น„๊ต์—ฐ์‚ฐ ํ•  ์ˆ˜ ์žˆ๋‹ค. SQL์—์„œ๋Š”.

 

 

 

 

์ฐธ๊ณ 

 

1) https://khdscor.tistory.com/53

2) https://yoongaemii.github.io/null_in_sql/

3) https://velog.io/@minnim1010/SQL-NULL-%EC%9D%B4-%EC%95%84%EB%8B%8C-IS-NULL%EC%9D%B8-%EC%9D%B4%EC%9C%A0-9irf8u7o

 

 

 

 

 

๋”๋ณด๊ธฐ
TOOLS/SQL