SQL - Null 函數
你好,有志於學習 SQL 的朋友們!今天,我們將要深入探索 SQL Null 函數的迷人世界。作為你們友善的鄰居計算機老師,我非常興奮能夠帶領你們走過這段旅程。別擔心如果你是編程新手——我們會一步步來,很快你們就會像專家一樣處理 NULL 值!
SQL NULL 函數
在我們進入具體函數之前,讓我們先來討論一下 NULL 在 SQL 中究竟意味著什麼。想像你正在填寫一個表格,裡面有一個“中間名”的欄位。如果你沒有中間名,也許你會留它空白。在 SQL 中,這個空白就是由 NULL 來表示的。它不是零,也不是空字符串——它是值的缺失。
現在,處理 NULL 值可能會有些棘手。這就是我們的 NULL 函數派上用場的地方。它們幫助我們在數據庫中管理這些缺失的值。讓我們一一探討這些函數。
The ISNULL() 函數
The ISNULL() 函數就像你可靠的朋友,總是有一個備用計劃。它檢查一個值是否為 NULL,如果是,它會用你選擇的另一個值來替換。
讓我們看一個例子:
SELECT ISNULL(middle_name, 'No Middle Name') AS middle_name
FROM students;
在這個例子中,我們正在查看學生的表格。如果一個學生沒有中間名(NULL),我們的查詢將會顯示 'No Middle Name' 而不是空白。這就像有一個臨時演員頂替了缺席的主角!
The COALESCE() 函數
COALESCE 就像一場與 NULL 值玩的“熱山芋遊戲”。它檢查一串值,並返回找到的第一個非 NULL 值。如果所有的值都是 NULL,它返回 NULL。
這是它是如何工作的:
SELECT COALESCE(phone, email, 'No Contact Info') AS contact
FROM customers;
這個查詢首先檢查電話號碼。如果它不是 NULL,太好了!如果是,它會轉向電子郵件。如果兩者都是 NULL,它會選擇 'No Contact Info'。這就像試不同的鑰匙直到有一個能開鎖!
The NULLIF() 函數
NULLIF是我們 NULL 函數家族中的“平等檢查器”。它比較兩個表達式,如果它們相等,則返回 NULL。如果它們不相等,則返回第一個表達式。
讓我們看看它在行動:
SELECT NULLIF(quantity, 0) AS adjusted_quantity
FROM inventory;
這個查詢在當我們想要避免除以零錯誤時非常有用。如果數量是 0,NULLIF 將返回 NULL 而不是 0。這就像為你的計算提供了一個安全網!
The IFNULL() 函數
IFNULL 是 COALESCE 的更簡單的表親。它接受兩個表達式,如果第一個不是 NULL,則返回第一個。如果第一個是 NULL,則返回第二個。
這裡有一個例子:
SELECT IFNULL(comment, 'No comment provided') AS feedback
FROM reviews;
這個查詢檢查是否有評論。如果没有(NULL),它會提供一個默認消息。這就像有一個禮貌的主持人,總是有話說,即使客人們沉默寡言!
現在,讓我們將所有這些函數總結在一個方便的表格中:
函數 | 描述 | 示例 |
---|---|---|
ISNULL() | 將 NULL 替換為指定值 | ISNULL(middle_name, 'No Middle Name') |
COALESCE() | 返回列表中的第一個非 NULL 值 | COALESCE(phone, email, 'No Contact Info') |
NULLIF() | 如果兩個表達式相等,則返回 NULL | NULLIF(quantity, 0) |
IFNULL() | 如果第一個表達式不是 NULL,則返回第一個,否則返回第二個 | IFNULL(comment, 'No comment provided') |
記住,在數據庫管理中處理 NULL 值是至關重要的。這就像當一名偵探——你需要知道何時東西丟失了,以及如何處理它。這些函數就是你們在這次調查中的可靠工具!
在我們結束之前,我想分享一個來自我教學經驗的小故事。我曾經有一個學生非常害怕 NULL 值。他會不惜一切代價避免它們,將每個字段填充為零或空字符串。在學習了這些 NULL 函數後,他驚呼:“NULL 不再可怕了——它只是另一個要处理的值!”這正是我希望你們在這堂課後能夠有的態度。
在你的查詢中練習使用這些函數。對它們進行嘗試,看看它們在不同數據上的行為。記住,在 SQL 和生活中,有時候會有缺失的值——重要的是你如何處理它們!
快樂查詢,願你們的 NULL 值處理總是順暢無誤!
Credits: Image by storyset