SQLite - NULL 值:理解缺失數據的概念

Hello, 有志於數據庫的愛好者們!今天,我們將深入探討 SQLite 的一个迷人方面:NULL 值。作為你們親切的人工智能數據庫老師,我很興奮能夠引導你們了解這個概念,這可能一開始看起來有點棘手,但對於有效地使用數據庫來說是必不可少的。

SQLite - NULL Values

NULL 值是什麼?

在我們跳入語法和示例之前,讓我們先了解在數據庫語境中 NULL 實際上意味著什麼。想象你正在填寫一個表格,裡面有一個字段要求你提供你的中間名。但如果你沒有中間名呢?你不能只留空,因為這可能會被解釋為你忘記填寫了。這就是數據庫中 NULL 派上用場的地方。

在 SQLite(和其他數據庫)中,NULL 表示缺失或未知的值。它不是零,也不是空字符串,它是值的缺失。把它看作是一个說明 "我們現在沒有這個信息" 的占位符。

處理 NULL 值的語法

現在我們了解了 NULL 是什麼,讓我們看看如何在 SQLite 中使用它。這裡是一個表格,列出了處理 NULL 值的常用方法:

方法 描述
IS NULL 檢查一個值是否為 NULL
IS NOT NULL 檢查一個值是否不是 NULL
IFNULL() 如果表達式為 NULL,則返回指定值
COALESCE() 返回列表中的第一個非 NULL 值

讓我們通過一些示例來分解這些方法!

IS NULL 和 IS NOT NULL

這些是最直接的方法來在您的查詢中檢查 NULL 值。

SELECT * FROM students WHERE middle_name IS NULL;

這個查詢將返回所有沒有中間名(或者中間名未知)的學生。

SELECT * FROM students WHERE phone_number IS NOT NULL;

這個查詢將返回所有在數據庫中記錄了電話號碼的學生。

IFNULL() 函數

IFNULL() 函數在您想要為 NULL 替換一個默認值時非常有用。

SELECT name, IFNULL(age, '年齡未提供') AS age FROM users;

在這個示例中,如果年齡是 NULL,它將顯示 '年齡未提供' 而不是 NULL。這讓您的輸出對用戶更友好!

COALESCE() 函數

COALESCE() 總是像瑞士軍刀一樣,用於處理 NULL 值。它返回列表中的第一個非 NULL 值。

SELECT name, COALESCE(phone, email, '無聯繫信息') AS contact FROM customers;

這個查詢將返回電話號碼,如果電話號碼不是 NULL,然後是電子郵件,如果電話是 NULL,最後如果電話和電子郵件都是 NULL,則返回 '無聯繫信息'。

實際示例

讓我們通過一些真實世界的場景來將我們的知識投入實踐!

示例 1:學生數據庫

想象我們正在管理一個學校的學生數據庫。有些學生可能還沒有提供他們的所有信息。

CREATE TABLE students (
id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
middle_name TEXT,
birth_date DATE,
enrollment_date DATE NOT NULL
);

INSERT INTO students VALUES (1, 'John', 'Doe', NULL, '2000-05-15', '2022-09-01');
INSERT INTO students VALUES (2, 'Jane', 'Smith', 'Marie', NULL, '2022-09-01');
INSERT INTO students VALUES (3, 'Bob', 'Johnson', NULL, NULL, '2022-09-01');

SELECT
first_name,
last_name,
IFNULL(middle_name, 'N/A') AS middle_name,
COALESCE(birth_date, '未提供') AS birth_date
FROM students;

在這個示例中,我們創建了一個學生表並插入了一些數據。注意我們如何在 SELECT 語句中處理 NULL 值。我們使用 IFNULL() 來處理中間名,並使用 COALESCE() 來處理出生日期。這讓我們的輸出更易於閱讀和了解。

示例 2:產品庫存

讓我們說我們正在管理一家小商店的庫存系統。

CREATE TABLE products (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
price REAL NOT NULL,
stock_quantity INTEGER
);

INSERT INTO products VALUES (1, '小工具', '一個出色的工具', 9.99, 100);
INSERT INTO products VALUES (2, '小玩意', NULL, 19.99, NULL);
INSERT INTO products VALUES (3, '小配件', '它會...做事情', 29.99, 0);

SELECT
name,
IFNULL(description, '無描述可用') AS description,
price,
COALESCE(stock_quantity, '庫存不足') AS stock_status
FROM products;

在這個庫存系統中,我們使用 IFNULL() 為沒有描述的產品提供默認描述。我們還使用 COALESCE() 來對庫存數量為 NULL 或零的產品顯示 '庫存不足'。

結論

理解 NULL 值在數據庫工作中至關重要。它們讓我們能夠準確地表示缺失或未知信息。記住,NULL 不是零或空字符串 - 它是值的缺失。

當你繼續你在數據庫管理的旅程時,你會發現正確處理 NULL 值可以使你的查詢更健壯,你的數據更有意義。這就像學會在數據庫中閱讀字裡行間!

我希望這個教程能夠幫助你解開 NULL 值的神秘。繼續在不同的場景中練習,很快你就能像專家一樣處理 NULL 值。快樂編程,並記住 - 在數據庫的世界裡,有時候 '無'(NULL)可以意味著一切!

Credits: Image by storyset