掌握 SQL Server 中的 NULL 值





5.00/5 (2投票s)
本文解释了 SQL Server 中与 NULL 值相关的关键概念和最佳实践,有助于掌握 SQL Server 中的 NULL 值。文章《在 SQL Server 中掌握 NULL 值》首次发布于 Technology with Vivek Johari。

目录
- 引言
- 什么是 SQL NULL?
- 本文中使用的表
- 处理 SQL NULL 值的函数
- IsNull()
- Coalesce()
- 使用 NULL 值聚合数据
- 在报告中处理 NULL 值
- SQL NULL 值示例
- 处理 NULL 值的最佳实践
- 摘要
引言
SQL 中的 NULL 被认为是缺失或未知的值,它不等于 0 或空格('')。如果开发者对 NULL 概念没有很好的了解,处理 SQL NULL 会有点复杂。
本文将解释 SQL Server 中与 NULL 值相关的一些关键概念和最佳实践。本文还包含有助于掌握 SQL Server 中 NULL 值的示例。
什么是 SQL NULL?
在 SQL 中,NULL 被定义为未知值或待定义值。正确处理 NULL 值对于确保数据完整性并避免查询中出现意外结果非常重要。例如,如果一个用户参加了 5 门考试,他收到了 4 门考试的结果,但最后一门考试的结果仍在等待中。因此,我们不能在最后一门考试列中放置 0 值。在这种情况下,我们在最后一列中放置 NULL 值,稍后用实际分数替换它。
此外,由于 NULL 值被认为是未知的,我们不能将一个 NULL 值与另一个 NULL 值进行比较。
检查 NULL 值
使用 IS NULL 和 IS NOT NULL 运算符检查 NULL 值。此外,涉及 NULL 值的比较会产生 UNKNOWN 结果。
SELECT * FROM Employees WHERE ProjectID = NULL; -- Incorrect SELECT * FROM Employees WHERE ProjectID IS NULL; -- Correct
同样,
SELECT * FROM Employees WHERE ProjectID <> NULL; -- Incorrect SELECT * FROM Employees WHERE ProjectID IS NOT NULL; -- Correct
本文中使用的表:–
在本文中,我们将使用包含以下记录的表 tbl_nulldemo
col_id
5
5
5
5
5
NULL
处理 SQL NULL 的函数
我们可以使用 2 个函数来处理 SQL NULL 值
1) ISNull()
ISNULL() 函数在表达式返回 NULL 值时返回指定值,否则返回表达式值。
例如:-
Select ISNULL( col_id ,0) FROM tbl_nulldemo
上述 SQL 查询将给出以下输出。
col_id
5
5
5
5
5
0
它将用 0 值替换 NULL 值。
2) COALESCE()
COALESCE() 函数将返回列表中第一个非 NULL 表达式。
例如,
SELECT COALESCE(NULL, NULL, 5, NULL, 6)
将返回输出 5,因为它是第一个非空值。
使用 NULL 值聚合数据
COUNT、SUM、AVG、MAX 和 MIN 等聚合函数对 NULL 值的处理方式不同。
- COUNT (*) 包含 NULL 值,而 COUNT(column_name) 不包含。
- SUM、AVG、MAX 和 MIN 忽略 NULL 值。
在报告中处理 NULL 值。
假设我们正在创建一个列出员工及其项目的报告,但有些员工没有项目。您可以处理 NULL 值,以确保报告为这些员工显示“无项目”。
SELECT EmployeeID, COALESCE (ProjectName, 'No Project') AS ProjectName FROM Employees e
在此示例中,COALESCE 函数用于处理 NULL 值,当员工没有项目时显示“无项目”。这确保了报告清晰且用户友好。
SQL NULL 值示例
在第一部分,我解释了 SQL Server 中的 NULL 值。现在,在本节中,我将尝试通过示例进行解释。
在所有以下问题中,我将使用我在“使用的表”部分中提到的表 tbl_nulldemo。所有示例都将使用相同的表 tbl_nulldemo 数据。
示例 1:– 以下查询的结果是什么?
SELECT COUNT (1) FROM tbl_nulldemo
答案 - 6 解释 - 即使 NULL 被认为是未知值,Count() 函数也会考虑包含 NULL 值的任何行。因此,上述查询返回 6
示例 2:–
SELECT COUNT (*) FROM tbl_nulldemo
答案 – 6
解释 - 即使 NULL 被认为是未知值,Count() 函数也会考虑包含 NULL 值的任何行。因此,上述查询返回 6
示例 3:–
SELECT COUNT (col_id) FROM tbl_nulldemo
答案 – 5
解释 - 当我们在 Count 函数中传递列名时,它只考虑非 NULL 值。因此,在这种情况下,它将返回结果 5
示例 4: –
SELECT AVG (col_id) FROM tbl_nulldemo
答案 -5
解释 - AVG 函数在计算 AVG 值时将包含所有非 NULL 值。因此,在这种情况下,我们有 5 个非 NULL 值:5,5,5,5,5。因此,AVG 函数将返回 25/5=5。
示例 5:–
SELECT col_id, COUNT (col_id) as cnt FROM tbl_nulldemo GROUP BY col_id HAVING (COUNT(col_id)>1)
答案 - 此查询将给出以下结果
col_id cnt
————————-
5 5
解释 - 由于表格包含值 5(5 次),因此我们得到了上述结果。现在出现一个问题,如果我们再有一个 NULL 值会发生什么?即使那样,结果也保持不变,因为 NULL 是一个未知值,所以即使列中有多个 NULL 值,这些 NULL 值也无法进行比较。因此,每个 NULL 值都将单独处理。
示例 7:–
SELECT DISTINCT col_id FROM tbl_nulldemo
答案 -
col_id
———–
NULL
解释 - 由于表格包含值 5(5 次)和 1 个 NULL 值,因此 DISTINCT 命令将返回上述结果。
示例 8:–
SELECT MIN(col_id) as min, MAX(col_id) as max FROM tbl_nulldemo
答案 -
min max
———– ———–
5 5
解释 - 由于 Null 值是未知的,因此无法进行比较。因此,Min 和 Max 函数不考虑 Null 值。所以,由于除了 Null 值之外,表中只剩下 5 个值,Min 和 Max 函数返回 5 作为结果。
示例 9:–
SELECT SUM(col_id) as Total FROM tbl_nulldemo
答案 -
总计
———–
25
解释 - 与上述 SQL 查询解释类似,Sum 值不考虑 NULL 值,因此 SUM () 函数将返回 25 作为结果。
示例 10:–
SELECT 5+5+5+5+5+NULL as totalvalue
答案 -
totalvalue
———–
NULL
解释 - 这里我们尝试将 5 与 Null(一个未知值)相加。因此,结果将是 NULL,一个未知值。
示例 11:–
SELECT * FROM tbl_nulldemo WHERE col_id != NULL
答案 -
col_id
———–
解释 - 由于无法将列的值与 NULL(一个未知值)进行比较。因此,我们不能将比较运算符(如 =、< 或 <>)与 NULL 值一起使用。所以,如果你想获得不包含 NULL 值的输出,我们必须使用 is NOT NULL 命令,如下所示
SELECT * FROM tbl_nulldemo WHERE col_id is not NULL
col_id
———–
5
5
5
5
5
示例 12:–
SELECT * FROM tbl_nulldemo WHERE col_id = NULL
答案 -
col_id
———–
解释 - 类似于第 10 个示例的解释,由于无法将列的值与 NULL(一个未知值)进行比较。因此,我们不能将比较运算符(如 =、< 或 <>)与 NULL 值一起使用。所以,如果你想获得包含 NULL 值的输出,我们必须使用 is NULL 命令,如下所示
SELECT * FROM tbl_nulldemo WHERE col_id is NULL
col_id
———–
NULL
处理 NULL 值的最佳实践
- 明确处理 NULL 值: 始终考虑您的应用程序应如何处理 NULL 值,并在 SQL 查询中明确说明。
- 避免在关键列中使用 NULL: 避免在主键、外键和唯一约束中使用 NULL 值,因为它们可能导致数据完整性问题。
- 记录 NULL 处理: 记录数据库架构和应用程序逻辑中 NULL 值的处理方式,以确保一致性。
- 使用默认值: 在适当的情况下,使用默认值以避免数据库中出现 NULL 条目。
总结:–
本文解释了 SQL Server 中 NULL 值的关键概念。它还提到了用于 NULL 值的 SQL 函数以及如何进行比较。它还通过示例解释了聚合 SQL 函数如何处理 NULL 值。
NULL 值也会影响 SQL JOIN 查询的结果。有关详细信息,请参阅 这篇 SQL JOIN 文章
最后,它还提到了在 SQL Server 中处理 NULL 值的最佳实践。
文章 在 SQL Server 中掌握 NULL 值 最初发布于 Technology with Vivek Johari。