提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
翻译|使用教程|编辑:吉伟伟|2024-12-20 10:32:55.383|阅读 1 次
概述:本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
相关链接:
在使用数据库时,我们经常会遇到缺少数据的行。这些缺失数据可能是由于未知或不适用的值、数据导入或输入过程中的错误或涉及不存在值的特定计算造成的。在这种情况下,有两种表示缺失数据的方法:NULL 和空值(或空白值)。
虽然乍一看它们似乎相同,但它们是不同的,并且以不同的方式影响基本数据库操作。本文探讨 SQL Server 中 NULL 和空值之间的区别,并讨论如何有效地处理它们。
dbForge Studio for SQL Server官方正版下载
SQL Server 中的 NULL 和空值
NULL 表示数据库列中缺失或未知的数据。这可能发生在两种情况下:数据不存在或数据存在但当前未知。NULL 可以分配给任何数据类型的字段,包括字符串、整数和日期。重要的是,该字段没有分配内存,因为 NULL 表示未知值。
相反,数据库中的空白或空白区域是指空字符或空白字符。虽然其含义可能看起来与 NULL 相似,但它的存储和检索方式与文本字段中的任何其他字符一样。空字符串特定于字符串列,不能应用于不同的数据类型。
例如,考虑一个包含产品信息的表,其中有一列存储保修详细信息。此列中的 NULL 值表示未指定保修期。相反,空值表示产品没有保修。
在数据库中,NULL 值和空白字符串在定义、语法和长度上有所不同,并且在查询和数据操作中对它们的处理也不同。因此,分别检测 NULL 和空值通常是必不可少的。大多数数据库管理系统(包括 SQL Server)都提供了有效处理这种区别的工具和功能。
查找 NULL 或空值的标准方法
根据具体情况,如果 NULL 和空值代表相似的概念,则可将它们一起处理;如果它们在数据模型中具有不同的含义或条件,则可将它们分开处理。这种区别会显著影响查询性能和结果的准确性。
最常见的情况是,需要通过删除 NULL 和空值或将 NULL 替换为其他值(如空)来避免 NULL 值错误。为了有效地管理这种情况,用户需要可靠的方法来识别 NULL 和空列值。本指南探讨了 SQL Server 中可用的内置工具,包括专用查询和函数。
使用 IS NULL 运算符
SQL Server 中的 IS NULL 运算符检查列或表达式是否包含 NULL 值。基本查询语法如下:
SELECT column_names FROM table_name WHERE column_name IS NULL;
让我们看一个简单的例子。在此示例和后续示例中,我们将使用流行的 SQL Server AdventureWorks2022 测试数据库和SQL Server dbForge Studio来演示测试用例。
假设我们需要检索产品列表,包括其名称和重量,其中重量小于 10 磅或颜色未知(即 NULL)。以下是实现此目的的查询:
SELECT pt.ProductID ,Name ,Weight ,Color FROM [Product.Test] pt WHERE Color IS NULL
搜索空字符串
正如我们前面提到的,空值是长度为零的字符串,这会导致问题,因为空字符串不等于 NULL 值。SQL Server 对它们进行不同的处理,在具有 WHERE 条件的查询中使用 IS NULL 运算符不会返回空字符串。搜索空值的条件语法是:
WHERE column_name = ''
因此,基本查询语法是:
SELECT column_names FROM table_name WHERE column_name = ''
假设我们要检索Style列包含空值的产品列表。 在这种情况下,我们需要搜索空值:
SELECT pt.Name ,pt.ProductNumber ,pt.Style FROM [Product.Test] pt WHERE pt.Style = ''
用户经常需要同时获取 NULL 和空值。然后,我们可以使用 OR 运算符将 IS NULL 运算符与空值搜索结合起来,如下所示:
SELECT column_names FROM table_name WHERE column_name = '' OR column_name IS NULL
我们要检查表中是否所有产品都分配了ListPrice值。为此,我们要检查是否有产品的ListPrice为 NULL 且ListPrice为空:
SELECT ProductID ,Name ,ProductNumber ,ListPrice FROM dbo.[Product.Test] WHERE ListPrice = '' OR ListPrice IS NULL
输出包含空字符串和 NULL 值,从而给出更广泛的结果。
使用 TRIM 函数来获取仅包含空格的值
某些列可能包含完全由空格组成的值,这在从各种来源导入数据时很常见。这些值通常被视为空,因为它们缺乏有意义的字符。要识别此类行,您可以使用 TRIM 函数。
默认情况下,TRIM 会删除前导和尾随空格,但也可以删除字符串开头和结尾的其他指定字符。在这种情况下,我们使用这个函数在以标准方式检查空值之前删除空格。
基本查询语法是:
SELECT column_name FROM table_name WHERE column_name IS NULL OR TRIM(column_name) = ''
以下查询选择列Color、Size、ProductLine、Class和Style为 NULL 或在修剪任何前导和尾随空格后实际上为空的行。
SELECT Color ,Size ,ProductLine ,Class ,Style FROM dbo.[Product.Test] WHERE (Color IS NULL OR TRIM(Color) = '') OR (Size IS NULL OR TRIM(Size) = '') OR (ProductLine IS NULL OR TRIM(ProductLine) = '') OR (Class IS NULL OR TRIM(Class) = '') OR (Style IS NULL OR TRIM(Style) = '')
它可以帮助我们确保指定列中没有空值或无意义的值。
内置 SQL Server 函数
除了 SQL 查询之外,Microsoft SQL Server 还提供了专门用于处理 NULL 值的内置函数。在本节中,我们将探讨它们的工作原理。
使用 COALESCE 函数
SQL COALESCE 允许我们用默认值替换 NULL,从而确保输出中只有有意义的数据。当 NULL 值可能破坏计算或损害数据准确性时,此功能非常有用。
语法是:
COALESCE (expression [ ,...n ] )
我们使用的测试表包含一些 NULL 和一些空值,而不是有意义的数据。在我们的场景中,我们想要检索缺少一些基本参数的产品名称。包含颜色和尺寸 NULL 的行将返回为未知,而未提供ListPrice 的行将返回为 0。
SELECT Name ,Color ,Size ,ListPrice ,COALESCE(Color, 'No Color') AS MissingColor ,COALESCE(Size, 'No Size') AS MissingSize ,COALESCE(ListPrice, 0) AS MissingListPrice FROM dbo.[Product.Test]
结果,我们得到一个定义所有具有 NULL 值的案例的表,并可以进一步处理数据。
SQL Server 中的 COALESCE 函数可以与 TRIM 函数一起使用,通过一个查询检索同时具有 NULL 和空值的行。
语法是:
SELECT column_name FROM table_name WHERE TRIM(COALESCE(code, '')) = ''
这里,代码是需要过滤数据的列的名称。
在我们的测试用例中,我们想要识别Color列中具有 NULL 或空值的产品:
SELECT ProductID ,Name ,Color FROM dbo.[Product.Test] WHERE TRIM(COALESCE(Color, '')) = ''
此查询识别具有 NULL 或空白颜色值的产品,并确保仅包含空格的字符串被视为空。
使用 NULLIF 函数
NULLIF 函数比较两个表达式,如果它们相等,则返回 NULL。当应用于包含空值的列时,它返回 NULL,允许我们使用 IS NULL 运算符检查 NULL:
SELECT column_name FROM table_name WHERE NULLIF(TRIM(code), '') IS NULL
看看下面的例子:
SELECT Name ,Color ,Size FROM dbo.[Product.Test] WHERE NULLIF(TRIM(COALESCE(Color, '')), '') IS NULL OR NULLIF(TRIM(COALESCE(Size, '')), '') IS NULL
此查询使用 NULLIF 和 TRIM 函数有效地从表中过滤并返回Color或Size列为 NULL、空或仅包含空格的行。
使用 ISNULL 函数
ISNULL 函数用预定义的有意义的值替换 NULL。
该函数的语法是:
ISNULL(expression, replacement)
这里,expression是列名,而replacement是当列值为NULL时将替换该列的值。
在下面的例子中,我们检索产品颜色、尺寸和类别的数据,并用预定义值Unknown替换 NULL :
SELECT Name ,ISNULL(NULLIF(LTRIM(RTRIM(Color)), ''), 'Unknown') AS Color ,ISNULL(NULLIF(LTRIM(RTRIM(Size)), ''), 'Unknown') AS Size ,ISNULL(NULLIF(LTRIM(RTRIM(Class)), ''), 'Unknown') AS Class FROM dbo.[Product.Test]
管理 NULL 或空值的高级技术
处理 NULL 和空值通常涉及高级技术,以实现更高效的数据处理和更精确的结果。
您可能已经注意到函数组合的使用,例如 TRIM 与 COALESCE 或 TRIM 与 ISNULL。多个函数的组合允许更高级的数据操作,从而提供精确且有针对性的结果。
以下查询演示了如何通过删除空格并用占位符替换 NULL 值来清理Color列中的数据,以识别缺少颜色定义的记录:
SELECT ProductID ,Name ,ISNULL(NULLIF(TRIM(COALESCE(Color, '')), ''), 'Not provided') AS Color FROM dbo.[Product.Test]
COALESCE 函数将Color中的所有 NULL 值替换为空字符串,从而可以安全地应用 TRIM,进而从Color列中删除所有前导或尾随空格。NULLIF(TRIM(…),”) 将空字符串(最初为空或修剪为空)转换回 NULL。ISNULL(…, 'Not provided') 将任何 NULL 值(无论是最初为 NULL 还是由 NULLIF 转换为 NULL)替换为字符串Not provided。
在 SQL Server 中,您可以使用条件表达式(例如 CASE)以及 ISNULL、COALESCE 和 TRIM 等函数来处理不同类型的缺失数据。在这种情况下,ISNULL() 或 COALESCE() 会用预定义的占位符替换 NULL,TRIM 会删除前导和尾随空格并检查空字符串 (”),而 CASE 与 TRIM 结合可确保将仅包含空格的字符串视为空。
下面是使用Product.Test表的示例查询,旨在根据缺失数据的类型将Class分类:
SELECT ProductID ,Name ,Class ,CASE WHEN Class IS NULL THEN 'Missing (NULL)' WHEN TRIM(Class) = '' THEN 'Missing (Empty or Spaces)' ELSE Class END AS ProductClassStatus FROM dbo.[Product.Test]
这种先进的技术有助于确保一致地处理缺失数据,并清理数据以进行分析、报告和验证。
具有 NULL 和空值的大型数据集的性能注意事项
处理包含 NULL 和空值的大型数据集时,性能考虑至关重要,因为不同的因素会显著影响查询执行和资源使用。考虑以下因素和策略来优化性能:
SQL Server 中 NULL 值的索引方式不同,查询过滤可能无法有效利用索引。为避免出现问题,请使用过滤索引以仅包含非 NULL 或相关行(例如,WHERE Column IS NOT NULL)。
直接在 WHERE 子句或索引列中应用 ISNULL、COALESCE 和 TRIM 等函数可能会阻止索引使用并导致全表扫描。解决方案是重组查询以从 WHERE 子句中删除这些函数。此外,先进的现代 ETL 解决方案提供内置工具以立即清理数据。
如果管理不当,与内存分配相关的 NULL 和空值的不同处理可能会导致存储开销。为了避免这种情况,请在数据输入期间评估列默认值以尽量减少 NULL 和空值。
复杂的条件表达式可能会导致大型数据集的性能下降。解决方案可能是将 NULL 和空值分成不同的查询过程。此外,在执行查询之前利用执行计划分析来识别查询瓶颈,这将有助于相应地优化它们。
在 SQL Server 中,包含许多 NULL 或空值的列的基数估计可能会受到影响。使用专用的 UPDATE STATISTICS 命令或自动更新功能定期更新统计信息至关重要。
这些策略可以帮助您确保有效处理具有 NULL 和空值的大型数据集,同时最大限度地减少资源消耗和查询执行时间。
结论
NULL 和空值在数据库中很常见,因此了解它们的概念、区分它们并适当处理它们至关重要。本文探讨了识别和解决由 NULL 或空值定义的缺失数据情况的可靠方法。它提供了实用的技术来帮助清理数据并确保计算准确。为了说明这些情况,我们使用了 dbForge Studio for SQL Server,这是一种擅长处理此类情况的工具。
dbForge Studio for SQL Server 提供了一个功能强大的 SQL 编辑器,其中包含基于上下文的建议、代码分析、语法验证、格式和代码片段,使用户能够以两倍的速度编写高质量的 SQL 代码。此外,Studio 还提供了一套全面的工具集来管理 SQL Server 数据库,无论是在本地还是在云中。
欢迎下载并体验它如何将您的工作流程提升到一个新的水平!
如果您有产品试用下载、价格咨询、优惠获取,或其他任何问题,请联系。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@cahobeh.cn
文章转载自:慧都网Unity 是一款功能极其丰富的游戏引擎,允许开发人员将各种媒体集成到他们的项目中。但是,它缺少最令人兴奋的功能之一 - 将 Web 内容(例如 HTML、CSS 和 JavaScript)直接渲染到 3D 场景中的纹理上的能力。在本文中,我们将介绍如何使用 DotNetBrowser 在 Unity3D 中将 Web 内容渲染为纹理。
DevExpress v24.2帮助文档正式发布上线了,请按版本按需下载~
本教程将向您展示如何用MyEclipse构建一个Web项目,欢迎下载最新版IDE体验!
在处理电子表格时,尤其是在专业和数据导向型环境中,正确设置 Excel 单元格内的数字格式至关重要。本文将介绍如何使用 Spire.XLS for Java 设置 Excel 单元格的数字格式,帮助轻松创建精美且结构清晰的电子表格。
dbForge Studio for MySQL是与专业化MySQL数据库紧密相连的先进开发环境。
dbForge Data Compare for SQL ServerdbForge Data Compare for SQL Server是一个快速的、易于使用的Microsoft SQL Server数据库精确对比和同步数据的工具。它提供了扩展的用户映射功能,允许与SQL脚本和查询一起使用,呈现出一套强大的数据管理工具集。
dbForge Studio for SQL ServerdbForge Studio for SQL Server是用于SQL Server的终极管理工具。
dbForge Studio for PostgreSQL一个用于开发和管理PostgreSQL数据库的GUI工具。
dbForge SQL CompletedbForge SQL Complete是一款强大的T-SQL自动实现和格式化插件。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@cahobeh.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢