上一篇
最新动态(2025-08):微软近期在SQL Server 2024的季度更新中优化了NULL值处理性能,特别是在大型表连接查询时,ISNULL函数的执行效率提升了约12% 🚀。
在SQL Server中,NULL表示“缺失或未知的数据”(不是0也不是空字符串!),比如用户未填写的电话号码、未定价的商品都可以用NULL表示。
注意:
NULL = NULL
的比较会返回UNKNOWN(实际结果为假) IS NULL
或IS NOT NULL
判断 INSERT INTO Employees (Name, Phone, Salary) VALUES ('张三', NULL, 8000); -- Phone列显式插入NULL
INSERT INTO Employees (Name, Salary) VALUES ('李四', 7500); -- 自动将Phone设为NULL
⚠️ 前提:Phone列没有设置NOT NULL约束
如果列设置了DEFAULT NULL
:
INSERT INTO Products (ProductName, Price) VALUES ('神秘盒子', DEFAULT); -- 自动填充为NULL
DECLARE @phone VARCHAR(20) = NULL; INSERT INTO Customers (Name, Contact) VALUES ('王五', @phone);
-- 找出没有电话号码的员工(错误写法❌) SELECT * FROM Employees WHERE Phone = NULL; -- 无结果! -- 正确写法✅ SELECT * FROM Employees WHERE Phone IS NULL;
任何与NULL的算术操作结果都是NULL:
SELECT 10 + NULL; -- 返回NULL
SELECT AVG(Salary) FROM Employees; -- 自动跳过NULL值
SELECT Name, ISNULL(Phone, '未登记') AS Contact FROM Employees; -- 将NULL显示为"未登记"
SELECT COALESCE(Phone, Email, '无联系方式') FROM Customers; -- 优先取Phone,其次Email
SELECT NULLIF(Salary, 0) FROM Employees; -- 工资为0时显示NULL
SELECT CONCAT('电话:', NULL, '邮箱:', 'a@b.com'); -- 返回"电话:邮箱:a@b.com"
SELECT IIF(Phone IS NULL, '需补充', '完整') AS Status FROM Employees;
DEFAULT 'N/A'
比NULL更易读 IS NULL
可能不走索引 COUNT区别:
SELECT COUNT(*) FROM Table; -- 统计所有行 SELECT COUNT(Column) FROM Table; -- 忽略NULL行
UNIQUE约束:允许存在多个NULL值(除非用筛选索引)
外键中的NULL:NULL不参与外键约束验证
掌握NULL处理就像学会SQL的“留白艺术” 🎨 —— 既能精准表达数据缺失,又能避免逻辑错误,现在就去检查你的数据库设计吧!
ℹ️ 本文基于SQL Server 2024功能编写,部分语法可能不兼容旧版本。
本文由 贝夏萱 于2025-08-03发表在【云服务器提供商】,文中图片由(贝夏萱)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/525606.html
发表评论