Database/SQL ๊ธฐ์ดˆ

SQL ๊ธฐ์ดˆ - NULL ๋‹ค๋ฃจ๊ธฐ

UNarD 2026. 3. 18. 18:19

๐Ÿšซ SQL์—์„œ NULL ๋‹ค๋ฃจ๊ธฐ

๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋‹ค ๋ณด๋ฉด ๊ฐ’์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊น๋‹ˆ๋‹ค.
SQL์—์„œ ์ด "๋น„์–ด์žˆ์Œ"์„ ์–ด๋–ป๊ฒŒ ๋‹ค๋ฃจ๋Š”์ง€ ์ •๋ฆฌํ•ด ๋ดค์Šต๋‹ˆ๋‹ค ๐Ÿ˜Š

๐Ÿ—’๏ธ ์˜ˆ์‹œ ํ…Œ์ด๋ธ” โ€” employees

id name salary bonus
1 kim 3000 500
2 lee 2500 NULL
3 park NULL NULL
4 choi 3500 200
5 jung 2800 300
6 han NULL 100
7 yoon 4000 NULL
8 kang 3200 400
CREATE DATABASE IF NOT EXISTS practice;
USE practice;

DROP TABLE IF EXISTS employees;

CREATE TABLE employees (
    id     INT,
    name   VARCHAR(10),
    salary INT,
    bonus  INT
);

INSERT INTO employees VALUES (1, 'kim',  3000, 500);
INSERT INTO employees VALUES (2, 'lee',  2500, NULL);
INSERT INTO employees VALUES (3, 'park', NULL, NULL);
INSERT INTO employees VALUES (4, 'choi', 3500, 200);
INSERT INTO employees VALUES (5, 'jung', 2800, 300);
INSERT INTO employees VALUES (6, 'han',  NULL, 100);
INSERT INTO employees VALUES (7, 'yoon', 4000, NULL);
INSERT INTO employees VALUES (8, 'kang', 3200, 400);

โ€ผ๏ธ ์œ„ ํ…Œ์ด๋ธ”์„ ๊ธฐ์ค€์œผ๋กœ ์•„๋ž˜ ๋ฌธ๋ฒ• ์‚ฌ์šฉ๋ฒ•์„ ์„ค๋ช…ํ• ๊ฒŒ์š”.


๐Ÿง  NULL์ด๋ž€?

NULL์€ ๊ฐ’์ด ์—†์Œ ๋˜๋Š” ์•Œ ์ˆ˜ ์—†์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
0์ด๋‚˜ ๋นˆ ๋ฌธ์ž์—ด('')๊ณผ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

๐Ÿค” ์‰ฝ๊ฒŒ ์ƒ๊ฐํ•ด๋ณผ๊ฒŒ์š”

์„ค๋ฌธ์ง€์—์„œ ์‘๋‹ตํ•˜์ง€ ์•Š์€ ํ•ญ๋ชฉ์„ ์ƒ๊ฐํ•ด๋ณผ๊ฒŒ์š”.
0์ ์„ ์ค€ ๊ฒƒ๋„ ์•„๋‹ˆ๊ณ , ๊ณต๋ฐฑ์„ ์ž…๋ ฅํ•œ ๊ฒƒ๋„ ์•„๋‹™๋‹ˆ๋‹ค.
๊ทธ๋ƒฅ ๋‹ต์„ ํ•˜์ง€ ์•Š์€ ์ƒํƒœ, ๊ทธ๊ฒŒ ๋ฐ”๋กœ NULL์ด์—์š”.

โš ๏ธ NULL์€ ๋น„๊ต ์—ฐ์‚ฐ์ด ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

NULL์€ =, != ๊ฐ™์€ ๋น„๊ต ์—ฐ์‚ฐ์ž๋กœ ๋น„๊ตํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. NULL = NULL๋„ TRUE๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค.


๐Ÿ“‹ NULL ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

๐Ÿ”น IS NULL โ€” NULL์ธ ํ–‰ ์ฐพ๊ธฐ

SELECT * FROM employees
WHERE salary IS NULL;
๐Ÿ“ฅ ๊ฒฐ๊ณผ
id name salary bonus
3 park NULL NULL
6 han NULL 100

๐Ÿ”น IS NOT NULL โ€” NULL์ด ์•„๋‹Œ ํ–‰ ์ฐพ๊ธฐ

SELECT * FROM employees
WHERE salary IS NOT NULL;
๐Ÿ“ฅ ๊ฒฐ๊ณผ
id name salary bonus
1 kim 3000 500
2 lee 2500 NULL
4 choi 3500 200
5 jung 2800 300
7 yoon 4000 NULL
8 kang 3200 400
โš ๏ธ WHERE salary = NULL ์€ ๋™์ž‘ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค

NULL์€ ๋ฐ˜๋“œ์‹œ IS NULL ๋˜๋Š” IS NOT NULL๋กœ ๋น„๊ตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
= NULL๋กœ ๋น„๊ตํ•˜๋ฉด ์•„๋ฌด ๊ฒฐ๊ณผ๋„ ๋ฐ˜ํ™˜๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


๐Ÿ“Š NULL ์ฒ˜๋ฆฌ ํ•จ์ˆ˜

๐Ÿ”ธ COALESCE() โ€” NULL์ด๋ฉด ๋Œ€์ฒด๊ฐ’ ๋ฐ˜ํ™˜

COALESCE(๊ฐ’1, ๊ฐ’2, ๊ฐ’3, ...)

์—ฌ๋Ÿฌ ๊ฐ’ ์ค‘ ์ฒซ ๋ฒˆ์งธ๋กœ NULL์ด ์•„๋‹Œ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น bonus๊ฐ€ NULL์ด๋ฉด 0์œผ๋กœ ์ถœ๋ ฅ

SELECT name, COALESCE(bonus, 0) AS bonus
FROM employees;
๐Ÿ“ฅ ๊ฒฐ๊ณผ
name bonus
kim 500
lee 0
park 0
choi 200
jung 300
han 100
yoon 0
kang 400

๐Ÿ”น ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์— ์ˆœ์„œ๋Œ€๋กœ ์ ์šฉํ•˜๊ธฐ

SELECT name, COALESCE(bonus, salary, 0) AS ์ง€๊ธ‰์•ก
FROM employees;

bonus๊ฐ€ NULL์ด๋ฉด salary๋ฅผ ํ™•์ธํ•˜๊ณ , ๊ทธ๊ฒƒ๋„ NULL์ด๋ฉด 0์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

โ„น๏ธ IFNULL()๊ณผ์˜ ์ฐจ์ด

IFNULL(๊ฐ’, ๋Œ€์ฒด๊ฐ’)์€ MySQL/MariaDB ์ „์šฉ ํ•จ์ˆ˜๋กœ ์ธ์ž๋ฅผ 2๊ฐœ๋งŒ ๋ฐ›์Šต๋‹ˆ๋‹ค.
COALESCE()๋Š” ANSI SQL ํ‘œ์ค€์œผ๋กœ ๋ชจ๋“  DB์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๊ณ  ์ธ์ž๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด์š”.
ํŠน๋ณ„ํ•œ ์ด์œ ๊ฐ€ ์—†๋‹ค๋ฉด COALESCE()๋ฅผ ์“ฐ๋Š” ๊ฒŒ ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

๐Ÿ”น IFNULL() ์‚ฌ์šฉ ์˜ˆ์‹œ

SELECT name, IFNULL(bonus, 0) AS bonus
FROM employees;

bonus๊ฐ€ NULL์ด๋ฉด 0์œผ๋กœ ๋Œ€์ฒด๋ฉ๋‹ˆ๋‹ค.
COALESCE(bonus, 0)๊ณผ ๊ฒฐ๊ณผ๋Š” ๊ฐ™์ง€๋งŒ MySQL/MariaDB์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”ธ NULLIF() โ€” ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด NULL ๋ฐ˜ํ™˜

NULLIF(๊ฐ’1, ๊ฐ’2)

๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด NULL์„, ๋‹ค๋ฅด๋ฉด ์ฒซ ๋ฒˆ์งธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ”น bonus๊ฐ€ 0์ด๋ฉด NULL๋กœ ์ถœ๋ ฅ

SELECT name, NULLIF(bonus, 0) AS bonus
FROM employees;

bonus๊ฐ€ 0์ด๋ฉด NULL๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
์ฃผ๋กœ 0์œผ๋กœ ๋‚˜๋ˆ„๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐฉ์ง€ํ•  ๋•Œ ๋งŽ์ด ์”๋‹ˆ๋‹ค.

โš ๏ธ 0์œผ๋กœ ๋‚˜๋ˆ„๊ธฐ ์˜ค๋ฅ˜ ๋ฐฉ์ง€

-- salary๋ฅผ bonus๋กœ ๋‚˜๋ˆŒ ๋•Œ, bonus๊ฐ€ 0์ด๋ฉด ๋‚˜๋ˆ„๊ธฐ ์˜ค๋ฅ˜ ๋ฐฉ์ง€
SELECT name, salary / NULLIF(bonus, 0) AS ratio
FROM employees;

๐Ÿ“Š ํ•จ์ˆ˜ ๋น„๊ต

ํ•จ์ˆ˜ ์„ค๋ช… ์ง€์› DB
IS NULL NULL ์—ฌ๋ถ€ ํ™•์ธ ๋ชจ๋“  DB
IS NOT NULL NULL์ด ์•„๋‹Œ ์—ฌ๋ถ€ ํ™•์ธ ๋ชจ๋“  DB
COALESCE() NULL์ด๋ฉด ๋‹ค์Œ ๊ฐ’ ํ™•์ธ, ์ฒซ NULL ์•„๋‹Œ ๊ฐ’ ๋ฐ˜ํ™˜ ๋ชจ๋“  DB (ํ‘œ์ค€)
IFNULL() NULL์ด๋ฉด ๋Œ€์ฒด๊ฐ’ ๋ฐ˜ํ™˜ (์ธ์ž 2๊ฐœ) MySQL/MariaDB ์ „์šฉ
NULLIF() ๋‘ ๊ฐ’์ด ๊ฐ™์œผ๋ฉด NULL ๋ฐ˜ํ™˜ ๋ชจ๋“  DB

โ˜• ๋งˆ๋ฌด๋ฆฌ

์ƒํ™ฉ ์‚ฌ์šฉ ๋ฌธ๋ฒ•
NULL์ธ ํ–‰ ์ฐพ๊ธฐ IS NULL
NULL์ด ์•„๋‹Œ ํ–‰ ์ฐพ๊ธฐ IS NOT NULL
NULL์ด๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด COALESCE()
ํŠน์ • ๊ฐ’์ด๋ฉด NULL๋กœ ๋ฐ”๊พธ๊ธฐ NULLIF()

๐Ÿ“š ์ฐธ๊ณ ์ž๋ฃŒ

'Database > SQL ๊ธฐ์ดˆ' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

SQL ๊ธฐ์ดˆ - WHERE  (0) 2026.03.20
SQL ๊ธฐ์ดˆ - ์ง‘๊ณ„ ํ•จ์ˆ˜(COUNT, AVG, SUM, MAX, MIN)  (0) 2026.03.20
SQL ๊ธฐ์ดˆ - GROUP BY - HAVING  (0) 2026.03.19
SQL ๊ธฐ์ดˆ - ORDER BY  (0) 2026.03.19
SQL๊ธฐ์ดˆ - SELECT  (0) 2026.03.17