SQL - NULL Values: Understanding the Unknown

Halo那里,未来的数据库巫师们!今天,我们将深入探讨SQL中一个常让新手们抓耳挠腮的迷人方面 - NULL值。如果你之前从未写过一行代码,不用担心;我会一步一步地引导你了解这个概念,就像我过去几年里教过无数学生一样。那么,拿起你最喜欢的饮料,让我们一起踏上这个SQL冒险之旅吧!

SQL - NULL Values

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”的表。让我们分解一下发生了什么:

  1. StudentIDFirstNameLastNameAge 都被声明为 NOT NULL。这意味着这些字段必须有值;它们不能被留空。
  2. 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;

这个查询做了以下事情:

  1. 它查看 Students 表。
  2. 对于任何 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