SQL视图中如何过滤空行_应用WHERE NOT NULL条件

来源:中国站长站作者:霓渡头衔:草根站长
导读:本期聚焦于小伙伴创作的《SQL视图中如何过滤空行_应用WHERE NOT NULL条件》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《SQL视图中如何过滤空行_应用WHERE NOT NULL条件》有用,将其分享出去将是对创作者最好的鼓励。

SQL视图是基于SQL查询结果的虚拟表,在实际业务场景中,我们常常需要在创建视图时过滤掉包含空值的行,保证视图返回的数据都是有效可用的,这时候就需要用到WHERE NOT NULL条件。

SQL视图中如何过滤空行_应用WHERE NOT NULL条件

什么是SQL视图中的空行

SQL视图中的空行指的是查询结果里某一列或者多列的值为NULL的行,NULL表示值不存在,既不是空字符串也不是0。空行通常会在以下场景中出现:

  • 源表插入数据时没有给某些非必填字段赋值,这些字段就会存储为NULL
  • 多表关联查询时,关联条件不匹配导致部分字段没有对应的值,出现NULL
  • 对字段进行计算或者转换时,遇到无效数据返回NULL

WHERE NOT NULL条件的基本用法

WHERE NOT NULL条件的作用是筛选出指定列的值不为NULL的行,基本语法是在WHERE子句中添加列名 IS NOT NULL的判断。需要注意的是,判断NULL值不能用等于号,必须用IS NULL或者IS NOT NULL。

单字段过滤空行

如果只需要过滤某一列存在空值的行,直接在WHERE子句中添加对应列的IS NOT NULL判断即可。以下是一个创建视图时过滤单字段空行的示例,假设我们有一个用户表user_info,需要创建视图过滤掉手机号字段为空的行:

-- 创建用户视图,过滤手机号为空的行
CREATE VIEW valid_user_view AS
SELECT user_id, user_name, phone, register_time
FROM user_info
WHERE phone IS NOT NULL;

多字段过滤空行

如果需要同时过滤多个字段的空行,可以用AND关键字连接多个IS NOT NULL条件。比如我们需要创建订单视图,同时过滤订单金额和支付时间为空的行:

-- 创建有效订单视图,过滤订单金额和支付时间为空的行
CREATE VIEW valid_order_view AS
SELECT order_id, user_id, order_amount, pay_time, create_time
FROM order_info
WHERE order_amount IS NOT NULL
  AND pay_time IS NOT NULL;

不同数据库中的适配说明

大部分关系型数据库都支持IS NOT NULL语法,但是部分数据库有一些细微差异,以下是常见数据库的适配情况:

数据库类型适配说明
MySQL完全支持IS NOT NULL语法,视图创建时可以直接使用
PostgreSQL支持IS NOT NULL,同时也可以用<> NULL判断,但是推荐使用标准IS NOT NULL
SQL Server支持IS NOT NULL,视图创建语法和MySQL基本一致
Oracle支持IS NOT NULL,同时需要注意空字符串在Oracle中会被视为NULL

过滤空行的注意事项

在使用WHERE NOT NULL条件过滤SQL视图空行时,需要注意以下几点:

  • 不要混淆NULL和空字符串,空字符串是有效值,不会被IS NOT NULL过滤掉,如果需要过滤空字符串,需要额外添加<> ''的判断
  • 如果视图基于多表关联查询创建,需要明确要过滤的是关联后的字段空值,还是源表的字段空值,避免过滤掉有效数据
  • 修改视图定义时,需要重新执行CREATE OR REPLACE VIEW语句,原有的过滤条件会覆盖更新
  • 如果过滤的字段是主键,通常主键不会存在空值,不需要额外添加IS NOT NULL条件

验证过滤效果

创建完视图之后,可以查询视图的数据验证空行是否被正确过滤。比如查询上面创建的有效用户视图,查看是否还有手机号为空的行:

-- 查询有效用户视图,验证手机号是否为空
SELECT user_id, user_name, phone
FROM valid_user_view
WHERE phone IS NULL;

如果查询结果为空,说明空行已经被正确过滤。

SQL视图WHERE_NOT_NULL空行过滤视图创建修改时间:2026-07-07 22:30:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。