返回顶部
分享到

一文介绍在Hive中NULL的理解

数据库其他 来源:互联网 作者:佚名 发布时间:2025-11-23 09:16:06 人浏览
摘要

在 Hive 中,NULL 是一个特殊的值,表示未知或缺失。任何与NULL的比较操作(如=,,,=,=,)都会返回NULL,而不是TRUE或FALSE。 1.NULL 的比较规则 在 Hive(以及大多数 SQL 数据库)中,NULL的比较遵循三值

在 Hive 中,NULL 是一个特殊的值,表示“未知”或“缺失”。任何与 NULL 的比较操作(如 =, >, <, >=, <=, <>)都会返回 NULL,而不是 TRUE 或 FALSE。

1.NULL 的比较规则

在 Hive(以及大多数 SQL 数据库)中,NULL 的比较遵循 三值逻辑(Three-Valued Logic):

  • TRUE
  • FALSE
  • UNKNOWN(即 NULL)

任何与 NULL 的比较结果都是 UNKNOWN(即 NULL)。

2.具体示例

假设有一个表 test:

value
5
NULL
3

2.1NULL > 1返回什么?

1

SELECT value, value > 1 AS result FROM test;

结果:

value result
5 true
NULL NULL
3 true
  • NULL > 1 → NULL(未知)
  • NULL < 1 → NULL
  • NULL = 1 → NULL
  • NULL <> 1 → NULL

2.2NULL = NULL返回什么?

1

SELECT NULL = NULL AS result;

结果: NULL(不是 true!)

  • 在 SQL 中,NULL 不等于任何值,包括它自己。
  • 要判断两个值是否都为 NULL,必须用 IS NULL。

2.3IS NULL和IS NOT NULL

1

SELECT value, value IS NULL AS is_null FROM test;

结果:

value is_null
5 false
NULL true
3 false
  • IS NULL 是唯一能正确判断 NULL 的操作。

3.WHERE 子句中的 NULL 行为

1

SELECT * FROM test WHERE value > 1;

结果:

value
5
3
  • NULL 被过滤掉了!因为 NULL > 1 返回 NULL,而 WHERE 只保留 TRUE 的行。

如果你想保留 NULL,必须显式判断:

1

SELECT * FROM test WHERE value > 1 OR value IS NULL;

4.NULL 的逻辑运算

  • TRUE AND NULL → NULL
  • FALSE AND NULL → FALSE
  • TRUE OR NULL → TRUE
  • FALSE OR NULL → NULL
  • NOT NULL → NULL

5.如何正确处理 NULL

5.1 使用IS NULL/IS NOT NULL

1

SELECT * FROM test WHERE value IS NULL;

5.2 使用COALESCE提供默认值

1

SELECT COALESCE(value, 0) AS safe_value FROM test;

5.3 使用NVL(Hive 特有)

1

SELECT NVL(value, 0) AS safe_value FROM test;

5.4 使用CASE WHEN

1

2

3

4

5

6

7

SELECT

    CASE

        WHEN value IS NULL THEN 'Missing'

        WHEN value > 1 THEN 'Large'

        ELSE 'Small'

    END AS category

FROM test;

6.总结

操作 结果
NULL > 1 NULL
NULL = NULL NULL
value IS NULL TRUE/FALSE
WHERE value > 1 过滤掉 NULL
COALESCE(value, default) 提供默认值

核心原则:

  • NULL 不等于任何值,包括它自己。
  • 任何与 NULL 的比较都返回 NULL。
  • 必须用 IS NULL 判断空值。

如需处理复杂空值逻辑,建议结合 COALESCE、CASE WHEN 等函数。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。

您可能感兴趣的文章 :

原文链接 :
    Tag :
相关文章
  • 一文介绍在Hive中NULL的理解
    在 Hive 中,NULL 是一个特殊的值,表示未知或缺失。任何与NULL的比较操作(如=,,,=,=,)都会返回NULL,而不是TRUE或FALSE。 1.NULL 的比较规则 在
  • Navicat Premium 12数据库管理解决方案

    Navicat Premium 12数据库管理解决方案
    Navicat Premium 12是一款全面的数据库管理工具,支持多种数据库系统如MySQL、MariaDB、Oracle、SQL Server、PostgreSQL等。它提供了多数据库连接、数据
  • sqlite3命令行工具使用介绍
    一、启动与退出 启动数据库连接 1 2 3 sqlite3 [database_file] # 打开/创建数据库文件(如 test.db) sqlite3 # 启动临时内存数据库 (:memory:) sqlite3 :m
  • StarRocks简介与搭建使用介绍

    StarRocks简介与搭建使用介绍
    StarRocks简介 StarRocks 是一款高速、实时、全场景的MPP(大规模并行处理)分析型数据库系统,专为现代数据分析场景设计,强调亚秒级查询性
  • centos虚拟机部署opengauss数据库详细图文

    centos虚拟机部署opengauss数据库详细图文
    一、基本信息 1、虚拟机安装的centos版本 2、opengauss版本 地址:https://opengauss.org/zh/download/ 3、opengauss和gaussdb的区别 高斯数据库(GaussDB)是云
  • 达梦数据库文件故障的恢复方法

    达梦数据库文件故障的恢复方法
    1、概述 1.1 概述 本文介绍了达梦数据库文件损坏或误删除后的恢复方法。这里的数据库文件包括,表空间数据文件、重做日志文件、UNDO文件
  • Sql Server 2008 数据库附加错误:9004问题解决方案介
    【问题描述】 数据库文件存在异常状况,有可能是因为硬盘有坏区引起的。附加数据库的时候,提示错误9004。 【解决方法】 假设数据库名
  • Access数据中的SQL偏移注入原理解析介绍
    使用场景: 目标数据表的字段较多,无法一一获取的时候,尝试使用偏移注入的方式实现SQL注入。 原理: 例如:一个表有6个字段,而你想
  • Navicat导入Excel数据时数据被截断的问题分析与解

    Navicat导入Excel数据时数据被截断的问题分析与解
    在数据库的日常操作中,将Excel数据导入MySQL是常见的需求之一,特别是通过Navicat工具进行Excel数据导入时,可能会遇到数据截断的问题。具
  • GaussDB数据库事务管理及高级应用

    GaussDB数据库事务管理及高级应用
    事务管理是数据库系统中至关重要的一部分,它确保了数据库的一致性和可靠性。在GaussDB数据库中,事务管理不仅遵循传统的ACID特性,还提
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计