SQL - NULL Values: Understanding the Unknown
Halo那里,未来的数据库巫师们!今天,我们将深入探讨SQL中一个常让新手们抓耳挠腮的迷人方面 - NULL值。如果你之前从未写过一行代码,不用担心;我会一步一步地引导你了解这个概念,就像我过去几年里教过无数学生一样。那么,拿起你最喜欢的饮料,让我们一起踏上这个SQL冒险之旅吧!
What is a NULL Value?
在我们深入研究细节之前,让我们先了解NULL在SQL中究竟是什么意思。想象你正在填写一份表格,上面有一个要求填写你中间名的字段。但你没有中间名怎么办?你不能写“没有中间名”,因为这不准确 - 你并不是说你的中间名是“没有中间名”。你只是留空。这个空白,我的朋友们,本质上就是SQL中的NULL。
在SQL中,NULL是一个特殊的标记,用来表示数据库中不存在某个数据值。它不是零,也不是空字符串,而是没有任何值的存在。把它看作是SQL在说,“我不知道”或者“这个信息不可用。”
Creating a Table without NULL Values
既然我们理解了NULL是什么,让我们看看如何创建一个不允许NULL值的表。当你有每个记录都必须有的数据时,这特别有用。
Example 1: Creating a Student Table
CREATE TABLE Students (
StudentID INT NOT NULL,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
Age INT NOT NULL,
Email VARCHAR(100)
);
在这个例子中,我们正在创建一个名为“Students”的表。让我们分解一下发生了什么:
-
StudentID
、FirstName
、LastName
和Age
都被声明为NOT NULL
。这意味着这些字段必须有值;它们不能被留空。 -
Email
字段没有NOT NULL
,这意味着如果一个学生没有提供电子邮件地址,那也可以。
通过使用 NOT NULL
,我们在告诉我们的数据库,“嘿,我们绝对需要每个学生的这些信息。没有任何借口!”
Updating NULL Values in a Table
有时,你可能会发现你的表中有NULL值,你想更新它们。让我们看看如何做到这一点。
Example 2: Updating NULL Email Addresses
想象我们意识到我们需要所有学生的电子邮件地址,并且我们想更新当前为NULL的电子邮件地址。
UPDATE Students
SET Email = '[email protected]'
WHERE Email IS NULL;
这个查询做了以下事情:
- 它查看
Students
表。 - 对于任何
Email IS NULL
的记录(记住,我们不能使用= NULL
!),它将电子邮件设置为 '[email protected]'。
这就像说,“对于任何没有给我们电子邮件的学生,让我们暂时使用这个占位符电子邮件地址。”
Deleting Records with NULL Values
有时,你可能想要删除某些字段中具有NULL值的记录。让我们看看如何做到这一点。
Example 3: Deleting Students without Age Information
DELETE FROM Students
WHERE Age IS NULL;
这个查询将删除 Age
字段为NULL的任何学生记录。这就像说,“如果我们不知道一个学生的年龄,让我们从我们的数据库中删除他们的记录。”
小心这样的操作!在运行这样的查询之前,总是确保你真的想要删除这些记录。
Working with NULL in WHERE Clauses
NULL值的一个棘手问题是,你不能用正常的比较运算符与它们一起使用。让我们看看如何在WHERE子句中正确检查NULL值。
Example 4: Finding Students with Missing Email Addresses
SELECT FirstName, LastName
FROM Students
WHERE Email IS NULL;
这个查询将给我们提供所有没有提供电子邮件地址的学生的列表。注意我们使用 IS NULL
而不是 = NULL
。这是一个即使是经验丰富的程序员有时也会犯的常见错误!
NULL and Aggregate Functions
NULL值也会影响聚合函数的工作方式。让我们看一个例子。
Example 5: Calculating Average Age
SELECT AVG(Age) AS AverageAge
FROM Students;
这个查询计算所有学生的平均年龄。这里有意思的部分是:NULL值在这个计算中完全被忽略。所以如果你有10个学生,但只有8个填写了他们的年龄,平均年龄将基于那8个值来计算。
Conclusion
就这样,朋友们!我们已经穿越了SQL中的NULL值领域。我们看到了如何创建不允许NULL值的表,如何更新和删除具有NULL值的记录,以及如何在我们的查询中处理NULL值。
记住,NULL不是零,不是空字符串,它是值的缺失。它是SQL耸肩说,“我不知道”的方式。而现在,你知道如何像专业人士一样处理这些“我不知道”的情况!
继续练习这些概念,在你意识到之前,你将自信地导航数据库的世界。快乐的查询!
Credits: Image by storyset