MySQL - NULL 값

안녕하세요, 데이터베이스 열정가 여러분! 오늘 우리는 MySQL의 NULL 값 세계로 창을 열어보겠습니다. 여러분의 친절한 이웃 컴퓨터 교사로서, 이 여정을 안내해드리게 되어 기쁩니다. 마음에 드는 음료를 한 잔 챙겨서, 시작해보겠습니다!

MySQL - NULL Values

MySQL의 NULL 값

NULL 값이란?

먼저, NULL이 정확히 무엇인지 이해해보겠습니다. MySQL에서 NULL은 누락된 또는 알 수 없는 값을 나타냅니다. 친구에게 아침 식사를 무엇을 먹었는지 물어보고, 그가 "기억이 안 나요."라고 대답할 때, 그것이 바로 실제生活中的 NULL 값입니다!

NULL은 0, 빈 문자열, 또는 거짓이 아닙니다. 어떤 값도 없는 상태입니다. 그것을 "여기에는 무엇인가 있어야 하지만, 무엇인지는 아직 모르겠다."는 플레이스홀더로 생각해보세요!

NULL 값이 중요한 이유

NULL 값은 데이터베이스 관리에서 매우 중요한 역할을 합니다. 그들은 다음과 같은 목적으로 사용됩니다:

  1. 누락된 정보를 나타냄
  2. 0과 알 수 없는 값을 구분
  3. 특정 연산 및 비교 수행

간단한 예제를 보겠습니다:

CREATE TABLE students (
id INT PRIMARY KEY,
name VARCHAR(50),
age INT,
grade FLOAT
);

INSERT INTO students (id, name, age, grade) VALUES
(1, 'Alice', 20, 85.5),
(2, 'Bob', 21, NULL),
(3, 'Charlie', NULL, 92.0);

이 예제에서, Bob의 학점이나 Charlie의 나이를 알 수 없습니다. 그런데 추측하거나 잘못된 정보를 넣는 대신, 우리는 NULL을 사용합니다.

NULL 값이 없는 테이블 생성

그런데 만약 특정 열이 항상 값을 가지고 싶다면 어떻게 할까요? 여기서 NOT NULL 제약 조건이 유용하게 쓰입니다. 학생들에게 "과제를 내지 않는 이유는 없다!"라고 말하는 것과 같은 이치입니다.

모든 필드에 값이 있는 테이블을 생성해보겠습니다:

CREATE TABLE employees (
id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL,
hire_date DATE NOT NULL
);

이 테이블에서, 모든 열이 NOT NULL 제약 조건을 가지고 있습니다. 만약 모든 값을 제공하지 않고 행을 추가하려고 시도하면, MySQL은 우리의 요청을 차가운 시선으로 거부하고 오류를 발생시킵니다.

-- 이 작업은 성공합니다
INSERT INTO employees VALUES (1, 'John', 'Doe', '[email protected]', '2023-01-15');

-- 이 작업은 실패합니다
INSERT INTO employees (id, first_name, last_name) VALUES (2, 'Jane', 'Smith');

두 번째 삽입은 emailhire_date에 값이 제공되지 않았기 때문에 실패합니다.

테이블에서 NULL 값을 업데이트

때로는 테이블에서 NULL 값을 업데이트하고 싶을 수 있습니다. 예를 들어, 이전 예제에서 Charlie의 나이를 마침내 알게 되었다고 가정해봅시다. 다음과 같이 업데이트할 수 있습니다:

UPDATE students SET age = 22 WHERE name = 'Charlie';

그런데 만약 값을 NULL로 설정하고 싶다면 어떻게 할까요? 열이 NULL 값을 허용하는 경우에만 가능합니다:

UPDATE students SET grade = NULL WHERE name = 'Alice';

NOT NULL 열을 NULL로 설정하는 것은 불가능합니다. 영구 마컬러를 지우려고 하는 것과 같아, 그냥 안 됩니다!

NULL 값을 가진 레코드 삭제

때로는 특정 열에 NULL 값이 있는 레코드를 제거하고 싶을 수 있습니다. 다음과 같이 할 수 있습니다:

DELETE FROM students WHERE grade IS NULL;

IS NULL을 사용하는 이유는 NULL이 값이 아니기 때문에, 등호 연산자를 사용할 수 없기 때문입니다. NULL과 관련된 하나의 독특한 특성입니다!

클라이언트 프로그램에서 NULL 값을 사용

클라이언트 프로그램(예: PHP 스크립트)에서 NULL 값을 다루는 것은 올바르게 처리하는 것이 중요합니다. 간단한 PHP 예제를 보겠습니다:

<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 연결 생성
$conn = new mysqli($servername, $username, $password, $dbname);

// 연결 확인
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM students";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
echo "Name: " . $row["name"]. " - Age: " .
($row["age"] === NULL ? "Unknown" : $row["age"]) .
" - Grade: " . ($row["grade"] === NULL ? "Not graded" : $row["grade"]) . "<br>";
}
} else {
echo "0 results";
}
$conn->close();
?>

이 스크립트에서, 우리는 ternary 연산자를 사용하여 나이나 학점이 NULL인지 확인하고, 그렇다면 "Unknown"이나 "Not graded"를 표시합니다.

결론

그렇습니다, 여러분! 우리는 MySQL의 NULL 값 세계를 여행했습니다. NULL은 아무것도 아닌 것이 아닙니다 - 알 수 없는 알고 있는 것, 데이터베이스의 물음표, 퍼즐의 누락된 조각입니다. NULL을 받아들이고, 이해하고, 데이터베이스 모험에서 지혜롭게 사용하십시오!

우리가 이야기한 방법들을 요약한 유용한 표를 아래에 남겨드리겠습니다:

방법 설명 예제
NOT NULL 열 생성 열이 항상 값을 가지도록 보장 CREATE TABLE employees (id INT PRIMARY KEY, name VARCHAR(50) NOT NULL);
NULL 값 삽입 허용되는 경우 행에 NULL 값을 추가 INSERT INTO students (id, name, age) VALUES (1, 'Alice', NULL);
NULL 값으로 업데이트 허용되는 경우 값을 NULL로 설정 UPDATE students SET grade = NULL WHERE name = 'Bob';
NULL 값에서 업데이트 NULL을 값으로 대체 UPDATE students SET age = 22 WHERE name = 'Charlie';
NULL 값을 가진 레코드 삭제 특정 열에 NULL이 있는 레코드 제거 DELETE FROM students WHERE grade IS NULL;
NULL 확인 쿼리에서 IS NULL 또는 IS NOT NULL 사용 SELECT * FROM students WHERE age IS NOT NULL;

coding을 즐기시고, 여러분의 데이터베이스가 항상 NULL을 인식하도록 하세요!

Credits: Image by storyset