SQL - 空值函式



SQL NULL 函式用於對儲存在資料庫表中的 NULL 值執行操作。

NULL 值在資料缺失或所需資訊不可用時充當資料庫中的佔位符。它是一個靈活的值,不與任何特定資料型別相關聯,並且可以在各種資料型別的列中使用,包括字串、int、varchar 等。

以下是 NULL 值的各種特徵:

  • NULL 值與零值或包含空格的欄位不同。具有 NULL 值的記錄是在記錄建立期間留空或未指定的記錄。

  • NULL 值幫助我們消除資料中的歧義。從而,在列中保持統一的資料型別。

SQL NULL 函式

為了處理資料庫表中的這些 NULL 值,SQL 提供了各種 NULL 函式。它們列出如下:

  • ISNULL()
  • COALESCE()
  • NULLIF()
  • IFNULL()

ISNULL() 函式

SQL ISNULL() 函式根據表示式是否為空返回 0 和 1。如果表示式為空,則此函式返回 1;否則,它返回 0。

語法

以下是 ISNULL() 函式的語法:

ISNULL(column_name)

示例

首先,讓我們使用以下查詢建立一個名為 CUSTOMERS 的表,其中包含客戶的個人詳細資訊,包括他們的姓名、年齡、地址和工資等:

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),       
   PRIMARY KEY (ID)
);

現在,使用 INSERT INTO 語句將記錄插入此表,如下所示:

INSERT INTO CUSTOMERS VALUES 
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', NULL ),
(4, 'Chaitali', 25, 'Mumbai', 6500.00 ),
(5, 'Hardik', 27, 'Bhopal', 8500.00 ),
(6, 'Komal', 22, 'Hyderabad', NULL ),
(7, 'Indore', 24, 'Indore', 10000.00 );

該表將建立為:

ID 姓名 年齡 地址 工資
1 Ramesh 32 Ahmedabad 2000.00
2 Khilan 25 Delhi 1500.00
3 Kaushik 23 Kota NULL
4 Chaitali 25 Mumbai 6500.00
5 Hardik 27 Bhopal 8500.00
6 Komal 22 Hyderabad NULL
7 Indore 24 Indore 10000.00

以下是檢查 SALARY 是否為 NULL 的查詢:

SELECT SALARY, ISNULL(SALARY) AS Null_value FROM CUSTOMERS;

輸出

執行上述查詢後,我們將獲得“SALARY”列和 Null_value。如果 SALARY 為 NULL,則其空值為 1;否則為 0。

工資 Null_value
2000.00 0
1500.00 0
NULL 1
6500.00 0
8500.00 0
NULL 1
10000.00 0

COALESCE() 函式

SQL COALESCE() 函式在其引數中返回第一個出現的非 NULL 表示式。如果所有表示式都為 NULL,則 COALESCE() 函式將返回 NULL。

在 COALESCE() 函式中,首先評估整數,並且整數後跟字元表示式始終產生整數作為輸出。

語法

以下是 COALESCE() 函式的語法:

COALESCE(expression_1, expression_2, expression_n);

示例

在以下查詢中,我們返回第一個出現的非 NULL 值:

SELECT COALESCE (NULL, 'welcome', 'tutorialspoint') AS Result;

輸出

執行上述查詢後,我們將得到“welcome”作為結果,因為它是非 NULL 的第一個值。

結果
welcome

示例

在以下查詢中,我們對 CUSTOMERS 表的 SALARY 和 AGE 列使用 COALESCE() 函式。從這兩個列中評估的第一個非 NULL 值顯示在另一個名為“Result”的列中。

SELECT NAME, SALARY, AGE, COALESCE(SALARY, AGE) AS Result FROM CUSTOMERS;

輸出

執行上述查詢後,我們將得到以下表作為結果:

姓名 工資 年齡 結果
Ramesh 2000.00 32 2000.00
Khilan 1500.00 25 1500.00
Kaushik NULL 23 23.00
Chaitali 6500.00 25 6500.00
Hardik 8500.00 27 8500.00
Komal NULL 22 22.00
Indore 10000.00 24 10000.00

NULLIF() 函式

SQL NULLIF() 函式比較兩個表示式。如果兩個表示式都相同,則返回 NULL。否則,它返回第一個表示式。此函式可以直接與 SELECT、WHERE 和 GROUP BY 等子句一起使用。

語法

以下是 NULLIF() 函式的語法:

NULLIF(expression_1, expression_2);

示例

以下 SQL 查詢使用 NULLIF() 函式比較 CUSTOMERS 表的 NAME 和 ADDRESS 列中的值。如果 NAME 值與 ADDRESS 值匹配,則結果為 NULL;否則,它返回 NAME 值。結果值儲存在另一個名為“Result”的列中。

SELECT NAME, ADDRESS, NULLIF(NAME, ADDRESS) AS Result FROM CUSTOMERS;

輸出

執行上述查詢後,我們將得到以下表作為結果:

姓名 地址 結果
Ramesh Ahmedabad Ramesh
Khilan Delhi Khilan
Kaushik Kota Kaushik
Chaitali Mumbai Chaitali
Hardik Bhopal Hardik
Komal Hyderabad Komal
Indore Indore NULL

IFNULL() 函式

IFNULL() 函式將資料庫表中的 NULL 值替換為特定值。此函式接受兩個引數。如果第一個引數為 NULL 值,則將其替換為第二個引數。否則,第一個引數按原樣返回。

此函式在 SQL Server 資料庫中不起作用。

如果兩個引數都為 NULL,則此函式的結果也為 NULL。

語法

以下是 IFNULL() 函式的語法:

IFNULL(column_name, value_to_replace);

示例

以下查詢評估 CUSTOMERS 表的 SALARY 列中的值。使用 IFNULL() 函式,我們用值 5500 替換此列中的 NULL 值(如果有)。

SELECT NAME, SALARY, IFNULL(SALARY, 5500) AS Result FROM CUSTOMERS;

輸出

以下是上述查詢的輸出:

姓名 工資 結果
Ramesh 2000.00 2000.00
Khilan 1500.00 1500.00
Kaushik NULL 5500.00
Chaitali 6500.00 6500.00
Hardik 8500.00 8500.00
Komal NULL 5500.00
Indore 10000.00 10000.00
廣告