Null

[Database] SQL์—์„œ NULL์˜ ์˜๋ฏธ์™€ NULL์— ๋Œ€ํ•œ ์—ฐ์‚ฐ

NULL์˜ ์˜๋ฏธ

์•„๋ž˜ ์„ธ๊ฐ€์ง€์˜ ์˜๋ฏธ๊ฐ€ ์žˆ๋Š”๋ฐ, ์ด ์„ธ๊ฐ€์ง€ ์˜๋ฏธ ๋ชจ๋‘๋ฅผ NULL ํ•˜๋‚˜๋กœ ํ‘œํ˜„ํ•ด์คŒ

  1. unknown

    • ์•„์ง ์•Œ๋ ค์ง€์ง€ ์•Š์Œ

    • ์˜ˆ) ์ƒ์ผ์ด ์žˆ์„ ๊ฑด๋ฐ, ์ƒ์ผ์ด ์–ธ์ œ์ธ์ง€ ๋ชจ๋ฆ„

  2. unabailable or withheld

    • ์ •๋ณด๋Š” ์žˆ์ง€๋งŒ ์ด์šฉํ•  ์ˆ˜ ์—†์Œ

  3. not applicable

    • ํ•ด๋‹น์‚ฌํ•ญ์ด ์•„๋‹˜, ์ ์šฉ์‚ฌํ•ญ์ด ์—†์Œ

ํŠน์ง•

  • ์„œ๋กœ ๋‹ค๋ฅธ ํŠœํ”Œ์ด ๊ฐ™์€ attribute์— ๋Œ€ํ•ด NULL์„ ๊ฐ–๊ณ  ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ, ๋‘˜์˜ ์ƒํƒœ(๊ฐ’)๊ฐ€ ๊ฐ™๋‹ค๊ณ  ํ•  ์ˆ˜ ์—†์Œ

์—ฐ์‚ฐ

  1. =

    • ๊ฐ’์˜ ๋™์ผ์„ฑ์„ ํ™•์ธํ•˜๋Š” ์—ฐ์‚ฐ์ž์ธ๋ฐ, NULL์€ ๊ฐ’์ด ์•„๋‹ˆ๋ผ์„œ ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์Œ

    • WHERE birth_date = NULL ์œผ๋กœ SELECT ํ•ด๋„, birth_date์— NULL์ด ๋“ค์–ด๊ฐ€์žˆ๋Š” ํŠœํ”Œ์„ ๋ถˆ๋Ÿฌ์˜ค์ง„ ๋ชปํ•จ

    • WHERE birth_date IS NULL์„ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

three-valued logic

NULL๊ณผ ๋น„๊ต์—ฐ์‚ฐ ํ–ˆ์„ ๋•Œ, ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ

UNKNOWN์œผ๋กœ ์ฒ˜๋ฆฌ

๋…ผ๋ฆฌ ์—ฐ์‚ฐ

๋…ผ๋ฆฌ ์—ฐ์‚ฐ์—์„œ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”์ง€ ์ƒ๊ฐํ•ด๋ณด๊ธฐ NULL์€ ์–ด๋–ค ๊ฐ’์ผ์ง€ ์•„์ง ๋ชจ๋ฅด๋‹ˆ๊นŒ ์ด ๊ฐ’์ผ ์ˆ˜๋„ ์žˆ๊ณ  ์ € ๊ฐ’์ผ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋จ

7_1_null_logical.png

WHERE ์ ˆ ์—์„œ์˜ NULL ๋น„๊ต/๋…ผ๋ฆฌ์—ฐ์‚ฐ

  • where์ ˆ์—์„œ๋Š” condition(s)์˜ ๊ฒฐ๊ณผ๊ฐ€ TRUE์ธ tuple(s)๋งŒ ์„ ํƒ๋จ

  • ๊ฒฐ๊ณผ๊ฐ€ FALSE ์ด๊ฑฐ๋‚˜ UNKNOWN ์ด๋ฉด ํ•ด๋‹น tuple์€ ์„ ํƒ๋˜์ง€ ์•Š์Œ

NOT IN ์‚ฌ์šฉ์‹œ ์ฃผ์˜ ์‚ฌํ•ญ

  • v NOT IN (v1, v2, v3) ์ผ ๋•Œ, v != v1 AND v != v2 AND v != v3 ์™€ ๊ฐ™์€ ์˜๋ฏธ

  • ๋งŒ์•ฝ v1 ์ค‘์— ํ•˜๋‚˜๊ฐ€ NULL์ด๋ผ๋ฉด? -> FALSE or UNKNOWN ์ด ๋‚˜์˜ฌ ๊ฑฐ์•ผ. TRUE๋Š” ์ ˆ๋Œ€ ๋‚˜์˜ฌ ์ˆ˜ ์—†์Œ

  • v ๊ฐ€ NULL ์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๋Š” UNKNOWN

  • WHERE ์ ˆ์€ TRUE์ธ ๊ฒƒ๋งŒ ๋ฐ˜ํ™˜ํ•จ

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  • NOT NULL constraint ๋กœ ์„ค์ •

  • NOT EXISTS๋กœ ๋ฐ”๊ฟ”์„œ ์จ์ฃผ๊ธฐ

  • NOT IN์˜ ์กฐ๊ฑด(์„œ๋ธŒ์ฟผ๋ฆฌ ๋“ฑ)์— NULL ์ด ํฌํ•จ๋˜์ง€ ์•Š๊ฒŒ AND __ IS NOT NULL ์„ ๋„ฃ์–ด์คŒ

์ฐธ๊ณ 

Last updated