SQL - IS NULL: 掌握處理 Null 值的藝術

Hello,有志於數據庫的愛好者們!歡迎來到我們探索 SQL 神秘世界的旅程,我們將探討 NULL 值的神秘領域。我是您的導師,Query 教授,今天我們將揭開 IS NULL 運算符的祕密。所以,拿起你的虛擬筆記本,讓我們一起深入!

SQL - IS NULL

SQL IS NULL 運算符:你的 Null 值偵測超級英雄

想像你在一個派對上,試著找出誰沒有帶禮物。在數據庫的世界中,IS NULL 就像你的超能力禮物偵測器,幫助你發現那些空手而來的客人(或者在我們的例子中,空的數據庫字段)。

IS NULL 運算符用於測試數據庫中的空值(NULL 值)。但是等等,到底什麼是 NULL?

NULL 不是零。它不是一個空字符串。它是任何值的缺失。把它當作數據庫中的無奈表情符號 ?‍♂️。

這裡有一份我們的 NULL 相關運算符快速攻略:

運算符 描述
IS NULL 檢查一個值是否為 NULL
IS NOT NULL 檢查一個值是否不是 NULL

現在,讓我們看看如何在不同的 SQL 環境中使用這位超級英雄!

在 SELECT 語句中使用 IS NULL:找到無形之物

基本使用

我們先從一個簡單的例子開始。假設我們有一個名為 students 的表,其中有 student_idnameemail 的列。有些學生還沒有提供他們的電子郵件地址。

SELECT * FROM students
WHERE email IS NULL;

這個查詢會返回所有電子郵件字段為 NULL 的行。這就像在問,“展示所有忘記寫下電子郵件地址的學生!”

結合其他條件

我們也可以將 IS NULL 與其他條件結合使用。例如:

SELECT name, student_id
FROM students
WHERE email IS NULL AND student_id > 1000;

這個查詢說,“給我所有沒有電子郵件地址且學生編號大於 1000 的學生的名字和 ID。” 這就像一個偵探,縮小你的搜索範圍!

在 COUNT() 函數中使用 IS NULL:計算虛無

COUNT() 函數可以是 IS NULL 的好夥伴。讓我們看看它們如何一起工作:

SELECT COUNT(*) AS total_students,
COUNT(email) AS students_with_email,
COUNT(*) - COUNT(email) AS students_without_email
FROM students;

這個查詢給我們提供了三個信息:

  1. 學生的總數
  2. 有電子郵件地址的學生數量
  3. 沒有電子郵件地址的學生數量

記住,COUNT(*) 計算所有行,而 COUNT(email) 只計算非 NULL 的電子郵件值。這就像計算所有派對嘉賓,然後計算那些有禮物的嘉賓,通過減法找出來空手而來的人!

在 UPDATE 語句中使用 IS NULL:填補空白

有時候,我們想將 NULL 值更新為更有意義的東西。這是我們如何做到這一點的方法:

UPDATE students
SET email = '[email protected]'
WHERE email IS NULL;

這個查詢將所有 NULL 的電子郵件值替換為 '[email protected]'。這就像給所有空手而來的派對嘉賓一個默認禮物!

一個更複雜的例子

假設我們想將 NULL 的電子郵件地址更新為學生名字和默認域的組合:

UPDATE students
SET email = LOWER(REPLACE(name, ' ', '_')) || '@student.example.com'
WHERE email IS NULL;

對於 NULL 電子郵件的學生,這個查詢會執行以下操作:

  1. 取他們的名字
  2. 將空格替換為下劃線
  3. 轉換為小寫
  4. 在末尾添加 '@student.example.com'

所以,“John Doe”會變成“[email protected]”。這就像為那些忘記名字標籤的人創造個性化的名字標籤!

在 DELETE 語句中使用 IS NULL:移除空白

有時候,我們可能想刪除含有 NULL 值的行。這是我們如何做到這一點的方法:

DELETE FROM students
WHERE email IS NULL;

這個查詢會刪除所有電子郵件為 NULL 的行。請謹慎使用這個操作!這就像將所有空手而來的派對嘉賓踢出去——這有點過分,不是嗎?

一個更安全的做法

我們可能想將這些行移動到另一個表,而不是刪除它們:

INSERT INTO incomplete_records
SELECT * FROM students
WHERE email IS NULL;

DELETE FROM students
WHERE email IS NULL;

這種方法首先將 NULL 電子郵件的記錄移動到 'incomplete_records' 表,然後從主表中刪除它們。這就像將空手而來的嘉賓移動到另一個房間,而不是完全將他們踢出去!

結論:擁抱 Null

親愛的學生們,這就是你所學的!我們已經探討了 IS NULL 運算符及其在 SQL 中的各種用途。記住,NULL 值不是你的敵人——它們只是等待被正確處理的误解信息。

在你繼續你的 SQL 旅程時,你會發現掌握 NULL 值的處理對於維護乾淨和準確的數據庫至關重要。這就像一個技術嫻熟的派對主辦者,確保每一個人都被計數,即使是那些空手而來的人!

繼續練習,保持好奇心,並記住:在數據庫的世界裡,有時候 '無'(NULL)可以意味著一切!

Credits: Image by storyset