Oracle中Null和无值的区别

news2024/11/25 12:58:59

以Leetcode第176题“第二高的薪水”为例。
在这里插入图片描述
在这里插入图片描述
首先说一下这道题最容易理解、最容易实现的解法,就是比最大值小的值里最大的值。

SELECT MAX(salary) AS SecondHighestSalary
FROM Employee
WHERE salary < (SELECT MAX(salary) 
                FROM Employee)

通过这道题目,我来说明一下,什么时候结果集显示的是null,什么时候是空。下面这个是我们的测试用例,也就是只有一个值,第二高的薪水也就是null。
在这里插入图片描述
用上面的语句搜索,结果是下面这样的。
在这里插入图片描述
如果你把SQL改成下面这样,也就是去掉MAX函数,结果就变成了空。可以看到输出为null与MAX有关系。

SELECT salary AS SecondHighestSalary
FROM Employee
WHERE salary < (SELECT MAX(salary) 
                FROM Employee)

在这里插入图片描述
我们在利用这个题目试验一些别的东西,比如说取rownum为2的行,对于这个测试用例应该为null,可以发现输出的结果为空。(这道题不能这么做,因为还有重复值的问题,只是举个例子)

SELECT a.salary AS SecondHighestSalary
FROM (SELECT rownum r, e.*
      FROM Employee e) a
WHERE a.r = 2

在这里插入图片描述
如果我们像上面一样加个MAX函数,输出结果就会为null。

SELECT MAX(a.salary) AS SecondHighestSalary
FROM (SELECT rownum r, e.*
      FROM Employee e) a
WHERE a.r = 2

在这里插入图片描述


如果我们在套一个SELECT,也可以输出为null。

SELECT(
    SELECT a.salary
    FROM (SELECT rownum r, e.*
          FROM Employee e) a
    WHERE a.r = 2
) AS SecondHighestSalary
FROM dual

在这里插入图片描述
对于MySQL来说也是这样的,只不过由于语法原因,它不要FROM dual。这个评论区也有人询问,这个解释我觉得没解释出什么,但不知道为什么这么多赞。
在这里插入图片描述
在这里插入图片描述


那NVL不行吗?
可以看到这种方式也是输出为空。

SELECT NVL(a.salary, null) AS SecondHighestSalary
FROM (SELECT rownum r, e.*
      FROM Employee e) a
WHERE a.r = 2

在这里插入图片描述
但是如果你像下面这么写,输出的则是null(确实是由于NVL而输出的,把NVL第二个参数改成别的输出的内容也会变),很奇怪。这也是这道题目Oracle解法大部分人都采用的办法。包括MySQL也是如此。我也不知道为什么,网络上也查不到,只能强行理解SELECT这个语句,放到一个函数里,自己可能也相当于是一个函数(因为NVL只会获取null,所以说明里面SELECT出来就已经是null了,也可以发现,NVL对于这道题没啥用,直接SELECT一个SELECT就可以了)。

SELECT NVL((SELECT a.salary
            FROM (SELECT rownum r, e.*
                  FROM Employee e) a
            WHERE a.r = 2), null) AS SecondHighestSalary
FROM dual

在这里插入图片描述
MySQL的例子:
在这里插入图片描述

我找了两道我用过NVL的题目,发现一个是左连接,一个全连接,它们这种在JOIN时没有值会直接补null,所以用NVL就可以。

SELECT name, NVL(SUM(distance), 0) AS travelled_distance
FROM Users u LEFT JOIN Rides r
  ON u.id = r.user_id
GROUP BY u.id, u.name
ORDER BY travelled_distance DESC, u.name
----------------------------------------------------------
SELECT NVL(e.employee_id, s.employee_id) AS employee_id
FROM Employees e FULL OUTER JOIN Salaries s
  ON e.employee_id = s.employee_id
WHERE e.name IS NULL OR s.salary IS NULL
ORDER BY 1

总结

如果一个查询是没有结果的,你如果想让输出是null,有两种方式

  1. 用一个函数,像MAX、MIN等,去包住这个SELECT的值。该怎么理解呢?我也不知道,我觉可以理解为一个函数的参数为空,输出结果就是null。
  2. 你可以在这个SELECT的外面在套一个SELECT,该怎么理解呢?我觉得就是SELECT空,输出就是null。
  3. 额外说一下NVL,NVL是遇见null才会起作用的,遇见空是不起作用的。如果想让它起作用可以在NVL里包一个SELECT语句,强行理解,可以说把这个语句变成“函数”,这样就会输出null。
补充

这个文章是说MySQL里ifnull的,也证明了我的猜想:地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/116275.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

泛型------数据结构

泛型 问题:下面是一个简单的顺序表&#xff0c;我们在这里面实现的一个顺序表&#xff0c;是存放的数据类型只有int类型&#xff0c;这就会很不通用&#xff0c;如果我们想什么样的类型的数据都想要放进去,就要把这个数组的类型设置成Object类型 能不能啥样的类型都可以存放呢&…

ArcGIS中ArcMap栅格重采样操作与算法选择

本文介绍在ArcMap软件中&#xff0c;实现栅格图像重采样的具体操作&#xff0c;以及不同重采样方法的选择依据。 在文章Python中ArcPy实现栅格图像文件批量掩膜与批量重采样&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/124282764&#xff09;中&…

optimization问题的解决

目录 临界点critical point 基本介绍临界点两种情况的区分 g和H的举例介绍根据H区分Saddle Point和local minima 批次Batch batch大小的比较 时间的开销训练集和测试集的效果 训练集效果测试集效果 动量Momentum 一般的Gradient Descent带有动量的Gradient Descent 2021 -…

异步通信技术AJAX | 原理剖析、发送Ajax请求四步

目录 一&#xff1a;快速搞定AJAX&#xff08;第一篇&#xff09; 1、传统请求及缺点 2、AJAX请求原理剖析 3、AJAX概述 4、XMLHttpRequest对象 5、AJAX GET请求 6、AJAX GET请求提交数据 7、AJAX GET请求的缓存问题 8、AJAX POST请求及模拟表单提交数据 9、经典案例…

C语言基础--数组

文章目录一维数组一、一维数组的创建和初始化&#xff08;1&#xff09;一维数组的创建&#xff08;2&#xff09;一维数组的初始化1&#xff09;整形数组初始化2&#xff09;字符数组初始化3&#xff09;sizeof与strlen4&#xff09;总结二、一维数组的使用三、一维数组在内存…

基于C++实现(控制台)职工信息管理系统【100010060】

职工信息管理系统 一、实验内容 ​ 设计一个职工信息管理案例&#xff0c;实现不同类别职工的工资数据。职工的种类包括&#xff1a;正式职工和临时工。定义一个基本的职工类&#xff0c;基本信息包括&#xff1a;编号、姓名、性别、年龄、家庭住址、基本职务工资。派生出正式…

Quarkus实现第一个Hello World

Quarkus介绍 Quarkus 是一个为 Java 虚拟机&#xff08;JVM&#xff09;和原生编译而设计的全堆栈 Kubernetes 原生 Java 框架&#xff0c;用于专门针对容器优化 Java&#xff0c;并使其成为无服务器、云和 Kubernetes 环境的高效平台。 Quarkus 可与常用 Java 标准、框架和库…

php正则匹配反斜杠问题

php正则匹配反斜杠问题&#xff1a; 之前做了一道题&#xff0c;发现php中正则匹配反斜杠好像有点问题。 我们先看下面代码&#xff1a; <?php$cmd "\\";echo $cmd.PHP_EOL;if(preg_match("/\\\\|\\/",$cmd)) {echo "yes";} else {echo …

springdata-jpa-hibernate-03

springdata-jpa-hibernate-03 多表关联操作 首先加上这个lombok依赖,可以使代码更加简洁 一对一 account类 customerRepository接口 测试 一对多 message类 测试 多对一 在上面一对多的基础上加上这句代码就行 MessageRepository接口 测试&#xff1a; 多对多…

Mybatis-Plus快速入门

入门案例 MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具&#xff0c;旨在简化开发、提高效率开发方式基于MyBatis使用MyBatisPlus基于Spring使用MyBatisPlus基于SpringBoot使用MyBatisPlusSpringBoot整合MyBatis开发过程&#xff08;复习&#xff09;创建Spring…

DSP-Z变换

目录 Z变换的定义: Z变换的收敛域: 收敛域的定义: 收敛条件&#xff1a; Z变换收敛域的形状&#xff1a; 阿贝尔定理&#xff1a; 对于有限长序列的收敛域&#xff1a; Z变换的性质: 线性&#xff1a; 收敛域取交集&#xff1a; 时移&#xff1a; 指数相乘&#xf…

Java和Web前端哪个有发展前景?

Java和Web前端都是当今技术行业里的热门岗位&#xff0c;岗位招聘需求量大&#xff0c;人才竞争度高&#xff0c;同学们掌握这两个岗位里其中任何一个的相关主流技术&#xff0c;都可以找到一份不错的职位。下面请允许笔者做一个简要的分析阐述&#xff1a; 一、Web前端 Web前…

5 Redis

5.1 Redis 5.1.1 前言 前面使用到的mysql数据库会出现以下问题 由于用户量增大&#xff0c;请求数量也随之增大&#xff0c;数据压力过大 多台服务器之间数据不同步 多台服务器之间的锁&#xff0c;已经不存在互斥性了。 5.1.2 Redis 5.1.2.1 什么是Redis Redis&#x…

GO语言基础-05-循环和语句-select语句

文章目录1. 概述1.1 作用1.2 和switch比较1.3 执行过程2. 语法示例3. 完整示例1. 概述 1.1 作用 监听channel的数据流动 1.2 和switch比较 相同 开始的一个新的选择块&#xff0c;每个选择条件由case语句来描述。 不同 switch语句&#xff1a;可以选择任何使用相等比较的…

SpringCloud 协同开发方案

相比Springboot开发&#xff0c;SpringCloud开发要复杂的多&#xff0c;因为涉及服务的注册发现&#xff0c;多个微服务模块间的调用等。 最简单的解决方案是每个开发者都在本地启动一套完整的开发环境&#xff0c;包括网关、nacos等各个组成微服务的模块&#xff0c;如果系统…

Hive 学习Demo

背景介绍 陌陌作为聊天平台每天都会有大量用户在线&#xff0c;会出现大量的聊天数据&#xff0c;通过对聊天数据分析&#xff0c;可以更好的构建精确的用户画像&#xff0c;为用户提供更好的服务以及实现高ROI(投资回报率)的平台运营推广&#xff0c;给公司的发展决策提供精确…

智能网联汽车渗透率变化图显示预计

IDC 于 2020 年最新发布的《全球智能网 联汽车预测报告&#xff08;2020-2024&#xff09;》数据显示&#xff0c;尽管受新冠肺炎疫情冲击&#xff0c;2020 年全球智能网联汽车出货量预计较上一年下滑 10.6%&#xff0c;约为 4440 万辆&#xff0c;但到 2024 年全球智能网联汽车…

广播机制基础知识

广播机制 1.广播机制 1.1概述 1.1.1引入 1.广播的生活案例 记得以前读书的时候&#xff0c;每个班级都会有一个挂在墙上的大喇叭&#xff0c;用来广播一些通知&#xff0c;比如&#xff0c;开学要去搬书&#xff0c;广播&#xff1a; "每个班级找几个同学教务处拿书"…

商业智能BI与业务结构分析

做商业智能BI还必须熟悉行业和业务知识&#xff0c;不结合行业业务知识&#xff0c;商业智能BI的项目是很难落地的。商业智能BI的本质其实是企业的业务和管理思维的落地。企业的高层、业务部门的管理人员为什么要通过商业智能BI去看报表&#xff0c;他们看的是什么&#xff0c;…

深度学习-吴恩达(C3)结构化你的机器学习工程

结构化你的机器学习工程改变了深度学习的错误 比如你分割数据的方法&#xff0c;分割成train&#xff0c;development(dev)或叫valid&#xff0c;test&#xff0c;所以最好的实践方法是什么&#xff1f;了解更多端对端的深度学习&#xff0c;进而了解到你是否需要使用它&#…