`

(转)not in(1,2..) ,null 查不出来的问题

 
阅读更多

今天同事遇到一个问题:

select    'true '   from   dual   where   (1,2)   not   in   ((2,3),(2,null)); 

select 'true ' from dual where (2,1) not in ((2,3),(2,null)); 

以上两个例子的结果居然不同
 
 
in/not   in在判断NULL时用的与=/ <> 一样的方式,即必须用is   null来判断,否则始终为失败。 
语句 
select   'true '   from   dual   where   (1,2)   not   in   ((2,3),(2,null)); 
成功的原因在于判断二元值时首先判断其中一个非null元素,该元素成功或者失败会“短路”另一个个。由于上述第一个元素就使not   in成功了,因此第二个元素就不再处理。 
语句 
select   'true '   from   dual   where   (2,1)   not   in   ((2,3),(2,null)); 
的第一个元素没有造成“短路”,因此引起了null判断,从而结果始终为失败。 
请再实验语句 
select   'true '   from   dual   where   (2,1)   not   in   ((2,3),(null,3)); 
其结果为true,原因是第二个元素短路了第一个元素。 
分享到:
评论

相关推荐

    NOT EXISTS ⇔ NOT IN ⇒ NOT NULL 问题 结果不一样 疑问 如果等效

    在SQL查询语言中,`NOT EXISTS`、`NOT IN` 和 `NOT NULL` 是三种用于排除特定条件的数据记录的方法。然而,在实际应用中,这三种语法有着不同的应用场景和执行逻辑,有时初学者可能会误以为它们是等效的,但实际上...

    JAVA使用ElasticSearch查询in和not in的实现方式

    在使用Elasticsearch时,我们需要实现一个需求:过滤一部分id,查询时不需要查出来。这时我们需要使用到termQuery和BoolQuery。 BoolQuery是Elasticsearch中的一种查询方式,使用must、should、must_not三个关键词来...

    经典SQL查询总结关于Exists,not Exists.in ,not in效率的说明。

    本文将深入探讨 SQL 中 `EXISTS`, `NOT EXISTS`, `IN`, `NOT IN` 的使用场景及效率问题。 #### 一、Exists 和 Not Exists 的效率说明 **Exists** 和 **Not Exists** 子句通常用于检查子查询是否返回任何行,它们...

    mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录

    MySQL中的`NOT IN`, `LEFT JOIN`, `IS NULL`, 和 `NOT EXISTS` 是四种不同的SQL查询方式,它们在特定情况下可以实现相似的功能,但实际执行效率可能会有很大差异。本文主要探讨这四种方法在处理大数据量时的性能表现...

    in exist not_in

    IN、EXISTS、NOT EXISTS、NOT IN 在 SQL 语句中的应用和区别 IN 语句和 EXISTS 语句都是 SQL 语句中用来判断是否存在某个值的语句,但是它们的实现机制和应用场景是不同的。 IN 语句是通过 hash 连接来实现的,它...

    MySQL中NOT IN填坑之列为null的问题解决

    在MySQL数据库操作中,我们经常会遇到使用`IN`或`NOT IN`子句来筛选满足特定条件的数据。然而,当涉及到`NULL`值时,这些子句的行为可能会出乎意料,导致查询结果不符合预期。本文将深入探讨这个问题,并提供解决...

    mysql数据库In的优化.txt

    CREATE TEMPORARY TABLE userlist(UserID int NOT NULL DEFAULT 0); INSERT INTO userlist(UserID) VALUES (166); -- 关联查询,如果users表中有166则返回1 SELECT COUNT(ul.UserID) FROM userlist AS ul ...

    数据库实验2的实验报告1. 在 studentsdb 数据库中使用 SELECT 语句进行基本查询。 (1)在 student

    SELECT COUNT(DISTINCT student_id), SUM(CASE WHEN score IS NOT NULL THEN 1 ELSE 0 END) FROM grade WHERE course_id = '0003'; ``` - 查询`student_info`的姓名和出生日期,按出生日期降序排列: ```sql ...

    SQL必知必会(第3版-PDF清晰版)part1

    B.1 使用Aqua Data Studio.. 157 B.2 使用DB2.. 158 B.3 使用Macromedia ColdFusion.. 159 B.4 使用Microsoft Access.. 159 B.5 使用Microsoft ASP... 160 B.6 使用Microsoft ASP.NET... 161 B.7 使用Microsoft ...

    EJB3.0实例教程

    EJB3.0实例教程PDF 黎活名著 1.2 联系作者....................................................................................................................................................................

    sql_2.rar_in

    3. **NULL值处理**:“IN”不考虑NULL值,如果你需要包含NULL值,可以使用“IS NULL”或“NOT IN”。 4. **性能优化**:当“IN”操作符与大量值或子查询结合时,优化查询计划很重要,可能需要考虑创建索引或者优化...

    MySQL null与not null和null与空值的区别详解

    例如,如果你想知道`col1`列中是否有非空值,使用`WHERE col1 IS NOT NULL`会得到准确的结果,而`WHERE col1 &lt;&gt; ''`则会排除空字符串但不包括`NULL`值。 在使用`COUNT()`函数时,`NULL`值会被忽略,但空字符串会被...

    Oracle基础查询关联查询练习题.docx

    该查询使用了 NOT IN 运算符来排除 ACCOUNT 部门。 知识点:NOT IN 运算符的使用、关联查询的写法 2. 分组查询 Oracle 基础查询关联查询练习题中第二部分是分组查询。分组查询是指将数据分组,并对每个组进行...

    sql not in 与not exists使用中的细微差别

    特别是当主查询中的某个字段值为 NULL 时,`NOT IN` 会排除这些行,因为 NULL 不在任何集合(包括包含 NULL 的集合)中。而 `NOT EXISTS` 则不会受到 NULL 影响,它只关心是否存在匹配的行。 以一个简单的例子来...

    数据库查询3.pptx

    6. **集合查询**:IN和NOT IN操作符用于判断某个值是否在给定的集合中。查询信息系、数学系和计算机系的学生姓名和性别: ```sql SELECT SN, SEX FROM S WHERE DEPT IN ('信息系', '数学系', '计算机系') ``` ...

    SQLserver查询语句练习题[汇编].pdf

    2. 查询教师所有的单位即不重复的 Depart 列: ```sql select distinct depart from teacher ``` 3. 查询 Student 表的所有记录: ```sql select * from student ``` 4. 查询 Score 表中成绩在 60 到 80 之间的...

    数据库实验四:SQL数据查询.doc

    2. NOT IN运算的嵌套查询:排除IN中的结果,如`SELECT * FROM table WHERE column NOT IN (SELECT column FROM another_table)`。 3. 关系运算的嵌套查询:比较子查询结果,如`SELECT * FROM table WHERE column = ...

    2021032701_陈圆实验三 多表查询 (1)(2).doc

    SELECT 学号, SUM(CASE WHEN 成绩 IS NOT NULL THEN 1 ELSE 0 END) AS 选课门数, SUM(成绩) AS 总成绩 FROM XS_KC GROUP BY 学号 ) SELECT 学号, 选课门数, 总成绩 FROM CTE ORDER BY 选课门数 DESC ```...

Global site tag (gtag.js) - Google Analytics