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;

这个查询将返回所有学生姓名和电子邮件,但仅限于数据库中有电子邮件地址的学生。这就像说:“嘿,数据库,给我所有实际填写了电子邮件字段的学生!”

为什么不使用 '!=' 或 '<>'?

你可能会有疑问:“为什么我们不能只使用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