PostgreSQL - NULL Values

您好,有志於數據庫的愛好者們!今天,我們將深入PostgreSQL中的一個非常有趣的概念:NULL值。作為您鄰居的親切計算機科學老師,我很興奮能夠一步一步地指導您了解這個主題。別擔心您對編程是新手——我們會從基礎開始,然後逐步進行。所以,來一杯咖啡(或者茶,如果您喜歡的話),讓我們一起踏上這次NULL的冒險吧!

PostgreSQL - NULL Values

NULL是什麼?

在我們深入了解語法和示例之前,讓我們先了解在數據庫的背景下NULL到底意味著什麼。

NULL的定義

NULL是數據庫中的一個特殊值,它表示數據的缺失。它不是零,不是空字符串,也不是假。它簡單地就是...什麼都不是。把它當作一個占位符,表示“嘿,這裡應該有東西,但我們還不知道是什麼!”

Why is NULL important? (為什麼NULL很重要?)

NULL在數據庫中至關重要,因為它讓我們能夠區分:

  1. 我們知道的值(如0或空字符串)
  2. 我們不知道的值,或者不適用的值

例如,如果您有一個員工和他們電話號碼的數據庫,電話號碼字段中的NULL可能意味著“我們還沒有這位員工的電話號碼”,這與空字符串表示的“這位員工明确表示他們沒有電話”是不同的。

處理NULL值的語法

現在我們了解了NULL是什麼,讓我們看看如何在PostgreSQL中與它交互。這裡是與NULL值交互的主要方法:

運算 語法 描述
檢查值是否為NULL IS NULL 如果值是NULL,則返回true
檢查值是否不是NULL IS NOT NULL 如果值不是NULL,則返回true
為NULL設置默認值 COALESCE() 返回列表中第一個非NULL的值
Nullif NULLIF(value1, value2) 如果value1等於value2,則返回NULL,否則返回value1

讓我們用一些示例來深入了解這些!

處理NULL值的示例

創建包含NULL值的表

首先,讓我們創建一個簡單的表來操作:

CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(100),
phone VARCHAR(20)
);

INSERT INTO students (name, email, phone) VALUES
('Alice', '[email protected]', '123-456-7890'),
('Bob', '[email protected]', NULL),
('Charlie', NULL, '987-654-3210'),
('David', NULL, NULL);

在這個表中,我們允許email和phone字段為NULL。讓我們分解一下我們做了什麼:

  1. Alice有她的所有信息。
  2. Bob沒有電話號碼(它是NULL)。
  3. Charlie沒有電子郵件(它是NULL)。
  4. David很神秘,既沒有電子郵件也沒有電話號碼。

檢查NULL值

現在,讓我們看看如何找到有缺失信息的学生:

SELECT name
FROM students
WHERE email IS NULL;

這個查詢將返回:

Charlie
David

這裡發生了什麼:IS NULL條件檢查email列中的NULL值。這就像在問,“嘿,PostgreSQL,你能找到所有還沒有給我們他們電子郵件地址的學生嗎?”

讓我們試試相反的:

SELECT name
FROM students
WHERE phone IS NOT NULL;

這將給我們:

Alice
Charlie

這次,我們正在尋找提供了電話號碼的學生。

使用COALESCE處理NULL值

COALESCE就像一個瑞士軍刀,用於處理NULL值。它返回列表中的第一個非NULL值。讓我們看看它是如何工作的:

SELECT name, COALESCE(email, 'No email provided') AS contact_info
FROM students;

這個查詢將返回:

Alice    | [email protected]
Bob      | [email protected]
Charlie  | No email provided
David    | No email provided

這裡發生了什麼?COALESCE正在檢查email列。如果它找到NULL,它會替換為'No email provided'。這就像有一個友好的助手為您填寫空白!

使用NULLIF

NULLIF就像一個魔術師——它可以在特定條件下讓值消失(變成NULL)。讓我們看一個例子:

SELECT name, NULLIF(phone, '123-456-7890') AS special_phone
FROM students;

這個查詢將返回:

Alice    | NULL
Bob      | NULL
Charlie  | 987-654-3210
David    | NULL

這裡的魔術是什麼?NULLIF正在比較每個電話號碼與'123-456-7890'。如果它們匹配,它會將結果變成NULL。這就像在說,“如果這是我們的標準辦公室號碼,我們不要顯示它。”

結論

親愛的學生們,以上就是關於PostgreSQL中NULL值的旅程。我們看到了NULL如何表示未知或缺失的數據,如何檢查它,以及如何使用像COALESCE和NULLIF這樣巧妙的功能來處理它。

記住,在數據庫的世界裡,了解NULL與了解實際值一樣重要。這是“我不知道”和“我知道它是零”之間的區別——在數據中,這個區別可能非常大!

當您繼續您的PostgreSQL冒險時,請留心這些NULL值。它們就像故事中的沉默角色——不總是看得見,但往往對情節至關重要。

持續練習,保持好奇,並不怕提問題。畢竟,在學習的世界裡,沒有NULL值——只有成長的機會!

Credits: Image by storyset