首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如果将NULL与NULL进行比较,sql - CASE返回"true“?

在SQL中,如果将NULL与NULL进行比较,CASE语句将返回NULL而不是"true"。这是因为在SQL中,NULL表示缺少值或未知值,它不等于任何其他值,包括NULL本身。因此,当将NULL与NULL进行比较时,结果是未知的,因此返回NULL。

CASE语句是一种条件表达式,用于根据条件返回不同的结果。它可以用于在SQL查询中进行逻辑判断和条件分支。CASE语句有两种形式:简单CASE表达式和搜索CASE表达式。

简单CASE表达式的语法如下:

代码语言:txt
复制
CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ...
    ELSE result
END

搜索CASE表达式的语法如下:

代码语言:txt
复制
CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE result
END

在上述两种形式中,当条件满足时,返回对应的结果。如果没有条件满足,则返回ELSE后面的结果。如果没有ELSE子句,则返回NULL。

在这个问题中,由于将NULL与NULL进行比较,条件不满足,因此返回NULL。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

算法工程师-SQL进阶:温柔的陷阱-NULL

可以看出,当NULL存在时,SQL中的排中律就不成立了,切记~ 2、 比较谓词和 NULL(2) :CASE 表达式和 NULL eg2: 小明学习了case表达式后写了下面一段SQL,逻辑是:当col...首先,这是一段简单的case表达式写法,会将col_1的值从上到下依次when的值进行比较,一旦符合就break,不会再进行下面的分支判断。...值得注意的是,这里是进行值的比较,看第二个条件分支,翻译过来就是: when col_1 = NULL,前面我们已经说得很清楚了,NULL不是值,参与任何比较运算都是没有意义的,返回的逻辑真值都是unknown...; -- 子查询没有返回结果,因此相反地,NOT EXISTS 为 true 因此,age为null的文生同学,任何人的年龄比较后的结果都是true,即:"文生任何人的年龄都不同"这句话总是对的。...如果聚合函数null行过滤后,结果为空集合,或者传入聚合函数本身的集合本身就是空集,聚合函数会返回NULL

83120
  • mysql的case when语法_sql基本语句大全

    case when语句,用于计算条件列表并返回多个可能结果表达式之一。 CASE 具有两种格式:简单 CASE 函数某个表达式一组简单表达式进行比较以确定结果。...result expression 是任意有效的 SQL Server 表达式。 ELSE else_result_expression 当比较运算取值不为 TRUE返回的表达式。...如果省略此参数并且比较运算取值不为 TRUECASE 返回 NULL 值。else_result_expression 是任意有效的 SQL Server 表达式。...如果没有取值为 TRUE 的 input_expression = when_expression,则当指定 ELSE 子句时 SQL Server 返回 else_result_expression...如果没有取值为 TRUE 的 Boolean_expression,则当指定 ELSE 子句时 SQL Server 返回 else_result_expression;若没有指定 ELSE 子句,则返回

    3.1K20

    T-SQL基础(一)之简单查询

    如:LIKE '%x' 运算符 SQL中的运算符高级编程语言(C#,JAVA)类似。当多个运算符出现在同一表达式中时,SQL Server会按照运算符的优先级进行计算。...三值逻辑 SQL中表达式的运算结果有三种情况:True,False Unknown。 在查询筛选中,只返回条件表达式(WHERE、HAVING、ON)运算结果为True的数据。...在使用NULL值时应注意以下几点: NULL与其它值进行比较,不管该值是否为NULL,结果均为Unknown 应使用IS NULL或IS NOT NULL来判断值是否为NULL INSERT未给列指定值则插入...CASE...WHEN... CASE表达式是标量表达式,返回一个符合条件的值。注意,CASE是表达式,不是语句,COUNT类似。...共享锁可以阻止对数据进行修改,详细信息可参阅:SQL Server中锁事务隔离级别 小结 相较于增删改而言,查询是比较复杂的,也是数据库优化的关注重点。

    4.2K20

    第四范式OpenMLDB: 拓展Spark源码实现高性能Join

    首先是右表比较小时Spark会自动优化成BrocastHashJoin,这时右表通过broadcast拷贝到所有executor的内存里,遍历右表可以找到所有符合join condiction的行,如果右表没有符合条件则保留左表...internal row并且右表字段值为null如果有一行或多行符合条件就合并两个internal row到输出internal row里,代码实现在BroadcastHashJoinExec.scala...| } |} """.stripMargin } 然后是修改SortMergeJoin的实现来支持新的join type,如果右表比较大不能直接broacast...对应的实现在子类HashJoin.scala中,原理前面也类似,调用outerJoin函数遍历stream table的时候,修改核心的遍历逻辑,保证左表在拼不到时保留并添加null,在拼到一行时立即返回即可...Spark源码涉及SQL语法解析、Catalyst逻辑计划优化、JIT代码动态编译等,拥有这些基础后可以对Spark功能和性能进行更底层的拓展。

    1.1K20

    SQL Cookbook》 - 第三章 多表查询

    =50 or id=null); no rows selected 因为TRUE or NULL返回TRUE,但是FALSE or NULL返回NULL,所以当使用IN和OR时,要注意是否会涉及到NULL...(2) 如果子查询有结果就返回给外层查询,那么EXISTS的结果是TRUE,NOT EXISTS就是FALSE,如此一来,外层查询就会舍弃当前行。...(3) 如果子查询没有返回任何结果,那么NOT EXISTS的结果是TRUE,由此外层查询就会返回当前行(因为他是一个不存在于t02的记录)。...运算比较中使用NULL NULL不等于任何值,甚至不能和其自身进行比较,但是对从NULL返回的数据进行评估,就像评估具体的值一样。...(1) nvl(expr, 0) 如果第一个参数为null,则返回第二个参数。 如果第一个参数为非null,则返回第一个参数。

    2.4K50

    分享10个高级sql写法

    = p.dept_name ) 查询结果: 图片 我们通过 exists 语法外层 emp 表全部数据 放到子查询中一一 dept 表全部数据进行比较,只要有一行记录返回true。...画个图展示主查询所有记录子查询交互如下: 图片 第一条记录子查询比较时,全部返回 false,所以第一行不展示。...第二行记录子查询比较时,发现 销售部门 dept 表第二行 销售部 对应不上,返回 true,所以主查询该行记录会返回。 第二行以后记录执行结果同第一条。...我们可以通过 ORDER BY IF(ISNULL(title), 1, 0) 语法 null 值转换成0或1,来达到 null 值放到前面还是后面进行排序的效果。...但是 name 字段最后显示为 null,我们可以通过 coalesce() 比较函数,返回第一个非空参数。

    1.3K41

    接口测试平台:支持SQL语句执行(Mysql、Oracle)

    SQL的使用,主要有以下两个模块: 1、数据库配置 ? 2、case管理执行 ? 数据库管理这一块,无外乎简单的增删改查,主要是为了保存数据库信息,在此不做过多展开。 ?...然后是case的管理: ? case结构比较简单,主要是两块: 1、sql的基础信息,包含所用数据库、case名称、sql语句及备注信息 2、需要保存的变量、返回结果。...需要保存的变量这一块,同样支持jsonPath和正则两种方式(后端返回的表格转换为了JsonArray的形式,所以也支持jsonPath)。...然后通过正则表达式去判断要执行的语句类型,如果是select则返回查询结果,是其他操作则返回操作状态。...rs为空则抛错,如果不为空则转为map赋值后转为String返回给前端 ResultSetMetaData md = rs.getMetaData();

    1.5K20

    【重学 MySQL】三十三、流程控制函数

    IF函数根据第一个参数(条件表达式)的真假值,返回第二个或第三个参数的值。 语法: IF(expr1, expr2, expr3) 如果expr1为真(TRUE),则返回expr2。...示例: SELECT IF(10 > 5, '大于', '不大于') AS result; -- 结果为'大于' IFNULL函数 IFNULL函数用于检查第一个参数是否为NULL如果是,则返回第二个参数的值...语法: IFNULL(expr1, expr2) 如果expr1不为NULL,则返回expr1。 如果expr1为NULL,则返回expr2。...ELSE resultN END expr是要比较的表达式。 valueN是expr进行比较的值。 如果expr = valueN为真,则返回resultN。...如果条件表达式为真,则返回相应的结果。 如果没有任何条件为真,则返回ELSE子句中的结果。

    16510

    盘点数据库中的一些坑(一)

    盘点数据库中的一些坑(一) 前言 此文是个人根据日常工作中遇到的坑以及通过各种资料总结的sql 的踩坑点,有些坑如果在编写sql的时候不注意确实是容易翻车,所以这里一并进行总结。...,password, gender from admin where gender is null; -- 如果使用case when 会有比较有意思的结果: select id,username,...但是数据库是「只返回查询结果为“true”的结果」的,对于false的内容和“「unknown」 ”是不认识的。 这里读者可能又有疑问了,为什么case when出来的结果是空?...和很多的结果进行比较结果总是unknown,所以如果我们编写 !...「NOT IN 未知值比较返回 0 条记录」由于“NULL”是未知的,因此在可能值列表中包含“NULL”或“NULL”的“NOT IN”查询始终返回“0”记录,因为无法确定“NULL” value

    38320

    【Mysql-3】条件判断函数-CASE WHEN、IF、IFNULL详解

    END 解释一下,语句中的condition是条件判断,如果该判断结果为true,那么CASE语句返回result,否则返回result2,如果没有ELSE,则返回null。...CASEEND之间可以有多个WHEN…THEN…ELSE语句。END表示CASE语句结束。...2 IF IF函数也能通过判断条件来返回特定值,它的语法如下: IF(expr,result_true,result_false) expr是一个条件表达式,如果结果为true,则返回result_true...3 IFNULL 在Java程序中调用sql语句时,如果返回结果是null,是非常容易引发一些意外情况的。 ?...FROM goods WHERE name='light'; 但使用IFNULL语句,如果where条件中的name值是不存在的,那么仍将返回null,例如: -- 返回结果:null SELECT

    27.4K31

    Hive优化器原理源码解析系列—统计信息带谓词选择率Selectivity

    END,cast()或 + 、-、* 、/ 加减乘除运算符的调用 一个SQL解析过程 一般数据库查询处理流程: SQL查询提交后,数据库对SQL进行重写优化(可选),对SQL进行词法分析...物理执行计划转化成可在特定的平台执行的程序。如HiveFlink都在在此阶段物理执行计划CodeGen生成相应的可执行代码。...在本例中,"EMPNO=123456" 就是一个谓词: EMPNO结果不同,返回的结果为: TRUE如果EMPNO = 123456 FALSE,如果EMPNO 不为123456, UNKNOW,...列的比较找到null列的最大记录数MaxNulls。...如果一直为True,则选择率为1,即100% //访问常量,如果是false为0,如果true为1 public Double visitLiteral(RexLiteral literal)

    1.1K20

    MySQL数据库之存储过程存储函数

    本文主要介绍如何创建存储过程和存储函数,以及存储过程函数的使用、修改、删除等操作。 2 存储过程存储函数 MySQL中提供存储过程存储函数机制,我们姑且存储过程和存储函数合称为存储程序。...一般的SQL语句需要先编译然后立即执行不同,存储程序是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,当用户通过指定存储程序的名字并给定参数(如果该存储程序带有参数)来调用才会执行。   ...存储函数存储过程有如下区别:   (1)存储函数的限制比较多,例如不能用临时表,只能用表变量,而存储过程的限制较少,存储过程的实现功能要复杂些,而函数的实现功能针对性比较强。   (2)返回值不同。...在演示如果创建存储过程之前(emp表、dept表),先创建两个数据表,本文所有演示操作都基于这两个表来进行,创建表插入数据SQL语句如下: emp表: SET NAMES utf8mb4; SET...(3) LOOP语句LEAVE语句    LOOP语句循环语句用来重复执行某些语句,IF和CASE语句相比,LOOP只是创建了一个循环操作过程,并不进行条件判断。

    6.9K21

    Oracle PLSQL基础语法学习16:CASE Expression(CASE表达式)

    下面分别介绍这两种形式的写法、语法以及使用方法。 1. 简单CASE表达式 简单CASE表达式是指在给定的表达式上执行基于等式的比较如果表达式等于某个值,则执行某个操作。...以上SQL语句查询employees表中每个员工的first_name、last_name以及对应的部门名称department_name。CASE表达式的作用是每个部门ID转换为对应的部门名称。...搜索CASE表达式 搜索CASE表达式是指在给定的表达式上执行基于不等式的比较如果表达式满足给定的条件,则执行相应操作。...在本例中,它仅仅返回TRUE,因为我们假设所有的学号都是存在的。 然后程序使用了CASE语句,根据学生的成绩和出勤情况来判断对应的评价。...在编写SQL或PL/SQL代码时,可以根据具体的业务需求灵活选择简单形式或搜索形式来进行编写,从而大大提高编码效率和代码可读性。

    53020

    mapper

    下文中,我们首先对增删改进行描述,然后对查进行详细说明,最后对其他五个元素进行简单说明。...-- 3. resultType (resultType  resultMap 二选一配置)            resultType用以指定返回类型,指定的类型可以是基本类型,可以是java容器,...在配置查询的返回结果时,resultType和resultMap是二选一的操作。对于比较复杂的查询结果,一般都会设置成resultMap。 resultMap该怎么配置呢?又支持哪些配置呢?...end where id in (...); 如果对要更新的数据进行判断,只有符合条件的数据才能进行更新,这种情况可以这么做: <trim prefix="status =<em>case</em>" suffix...=null&& status !=-1的数据才能进行status更新.其他的将使用默认值更新,而不会保持原数据不变.如果要保持原数据不变呢?

    62650

    客快物流大数据项目(一百零一):实时OLAP开发

    组件的一些优化引擎对数据源的读取进行优化,比如列裁剪、过滤下推等等。...比如如果是 TextInputFormat,我们可以读取到对应文件的 splits 个数,然后每个 split 构成这里的一个分区,使用一个 Task 读取。...语句的方法实现生成修改sql语句的方法实现生成删除sql语句的方法实现批量更新sql的方法创建测试单例对象读取clickhouse的数据以及数据写入clickhouse中实现方法:在logistics-etl...类继承自DataSourceReader接口/** * 基于批处理的方式对ClickHouse数据库中的数据进行读取 */class ClickHouseDataSourceReader(options...,拼接SQL语句时使用全量字段拼接 // if (data.numFields == fields.length) { // } else { // 表示DataFrame中的字段数据库中的字段不同

    1.3K71

    代码审计原理实践分析-SQL篇(一)

    id参数进行判断,如果参数中含有字符下划线(_)则从_开始分割传入的字符串为数组。...> 代码的流程比较简单,首先通过GET方式获取id参数,然后通过waf函数判断传入字符的安全性,如果安全,则将其拼接到sql语句上。...六、时间型注入 1、原理 时间型注入和布尔型注入十分类似,时间型注入也是通过POST或GET传入的参数,拼接到SQL语句中查询,但布尔型注入不同的是,布尔型注入会返回不同的结果——TRUE or FALSE...,而时间型注入只会返回一种结果——TRUE,对于时间型注入来说,无论输入任何值,它的返回都会按正确的来处理,这也就导致了一种问题,我们无法通过页面的反馈来穷举猜测得到我们想要的数据。...); return $rs; } 可以看到,该函数传入进来的SQL语句,拆分并装入数组,根据数组内字符类型不同而进行不同的处理,最后再重新拼接起来,执行SQL语句

    64020
    领券