SQL - IS NOT NULL:初學者指南

大家好,未來的SQL大師!今天,我們將要深入了解SQL中的一個非常有趣的部分,這部分我見過許多學生在過去的年間感到困惑。但是別擔心 - 到了這個教學的結尾,你將會像專家一樣處理NULL值!

SQL - IS NOT NULL

SQL IS NOT NULL 運算子

讓我們從基礎開始。在SQL中,NULL是一個特殊的值(或者更準確地說,是值的缺失),代表著遺失的或未知的信息。這就像當你填寫表格時留空一個字段一樣 - 在數據庫中,NULL就是那個未被填寫的字段。

現在,這裡有個棘手的地方:你不能對NULL使用像=或!=這樣的常規比較運算符。這就是我們今天的主角出場的時候了 - IS NOT NULL運算子!

基本語法

IS NOT NULL的基本語法是:

SELECT column_name(s)
FROM table_name
WHERE column_name IS NOT NULL;

讓我們用一個真實世界的例子來分解這個語法。假設我們有一個名為students的表,其中有student_idnameemail這些列。

SELECT name, email
FROM students
WHERE email IS NOT NULL;

這個查詢會返回所有學生的姓名和電子郵件地址,但僅限於數據庫中有電子郵件地址的學生。這就像是說,“嘿,數據庫,給我所有真正填寫了他們電子郵件字段的学生!”

Why Not Use '!=' 或 '<>'?

你可能會想,“我們為什麼不能只是使用email != NULL?”這個問題問得好!在SQL中,NULL代表一個未知的值。由於它是未知的,我們不能將它與任何東西比較 - 甚至不能與它自己比較!這就像試圖將蘋果與...嗯,什麼都沒有比較。

讓我們看一個例子:

-- 這個不會按預期工作
SELECT name, email
FROM students
WHERE email != NULL;

-- 這是正確的方法
SELECT name, email
FROM students
WHERE email IS NOT NULL;

第一個查詢實際上會返回沒有結果,無論你的表中數據如何。第二個查詢會正確地返回所有電子郵件有值的行。

IS NOT NULL 與 COUNT() 函數

現在,我們已經理解了基礎知識,讓我們看看IS NOT NULL如何與其他SQL函數一起使用,比如COUNT()。

計算非NULL值

COUNT()函數用於計算符合特定標準的行數。當與IS NOT NULL結合使用時,它可以告訴我們特定列中有值的行數。

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

在這個查詢中,COUNT(*)計算所有行,而COUNT(email)只計算電子郵件不是NULL的行。這是一種快速查看你的數據完整性的方法!

百分比計算

我們可以進一步計算提供了電子郵件的學生的百分比:

SELECT
COUNT(*) AS total_students,
COUNT(email) AS students_with_email,
(COUNT(email) * 100.0 / COUNT(*)) AS email_percentage
FROM students;

這個查詢不僅計算總學生數和有電子郵件的學生數,還計算了有多少學生提供了他們的電子郵件。這就像點名並找出誰完成了作業一樣!

IS NOT NULL 與 DELETE 語句

有時候,我們需要通過刪除遺失數據的行來清理我們的數據庫。這就是IS NOT NULL與DELETE語句一起使用的地方。

基本DELETE與IS NOT NULL

以下是如何刪除某列為NULL的所有行的示例:

DELETE FROM students
WHERE phone_number IS NULL;

這個查詢會刪除所有電話號碼未提供的學生記錄。這就像擦除你的地址冊中所有空白的行一樣。

結合條件

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

DELETE FROM students
WHERE graduation_year IS NULL
AND enrollment_date < '2020-01-01';

這個查詢會刪除沒有畢業年份並在2020年之前入學的學生的記錄。這是一種清理舊的、不完整記錄的方法。

IS NOT NULL 與 UPDATE 語句

最後,讓我們看看IS NOT NULL如何與UPDATE語句一起使用來修改現有數據。

更新非NULL值

假設我們想要將所有非NULL的電子郵件地址更新為小寫:

UPDATE students
SET email = LOWER(email)
WHERE email IS NOT NULL;

這個查詢會將所有現有的電子郵件地址更改为小寫,但僅限於它們不是NULL的情況。這就像通過你的聯繫人列表並確保所有電子郵件地址的格式一致。

條件更新

我們也可以在更複雜的UPDATE語句中使用IS NOT NULL:

UPDATE students
SET status = 'Active'
WHERE enrollment_date IS NOT NULL
AND graduation_date IS NULL;

這個查詢會將狀態更新為'Active',對於所有有入學日期但沒有畢業日期的學生。這是一種基於我們所擁有的信息自動更新學生狀態的方法。

結論

好了,各位!我們已經穿越了IS NOT NULL的領土,探索了它在SELECT、COUNT、DELETE和UPDATE語句中的使用。記住,正確處理NULL值在數據庫管理中至關重要。這是得到準確結果和...嗯,NULL結果之間的差異!

這裡是一個我們所涵蓋方法的快速參考表:

操作 示例
SELECT SELECT * FROM table WHERE column IS NOT NULL
COUNT SELECT COUNT(column) FROM table
DELETE DELETE FROM table WHERE column IS NULL
UPDATE UPDATE table SET column = value WHERE other_column IS NOT NULL

練習這些查詢,玩轉它們,很快你會發現處理NULL值是第二自然的事情。持續編程,持續學習,並記住 - 在數據庫的世界裡,有時候什麼都沒有(NULL)可以意味著一切!

Credits: Image by storyset