`
米奈希尔
  • 浏览: 268802 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

指定的值列表中有一个为空值,NOT IN返回false

阅读更多

    如果指定的值列表中有一个为空值(null),那么NOT IN返回false。怎么理解呢?看下面这张表:

    表users:

user_id    name
1          lisi
2          zhangsan
3          wangwu
 

    现在执行如下这条SQL:

 

SELECT * FROM users
WHERE user_id NOT IN (2, 3, NULL);

    在Oracle 10g下执行结果是:

未选定行

 

    我是这样理解的:NULL本身代表一个不确定的值,也就是说给定的user_id可能匹配NULL代表的值,也可能不匹配。由于这种不确定性,所以就返回false。

 

    我们再看下面这条语句:

SELECT * FROM users
WHERE user_id IN (2, 3, NULL);

    在Oracle 10g下执行结果是:

user_id    name
2          zhangsan
3          wangwu

   原因是值为2,3的user_id在(2, 3, NULL)列表中是可以确定的,这与NULL值得不确定性没有关系,但值为1的user_id就不同了,数据库因为无法判断是否与NULL匹配,因此不会返回这条记录。

分享到:
评论

相关推荐

    Python Pandas对缺失值的处理方法

    在案例中,我们首先读取了一个带有空值的Excel文件,然后使用 `isnull()` 和 `notnull()` 来检测空值,接着用 `dropna()` 删除了全为空的列和行,最后可能还会用 `fillna()` 填充剩余的缺失值。这些步骤对于数据清洗...

    MySQL命令大全

    例如:在表MyClass中添加了一个字段passtest,类型为int(4),默认值为 mysql> alter table MyClass add passtest int(4) default ’′ 8、更改表名: 命令:rename table 原表名 to 新表名; 例如:在表MyClass...

    第3章 选择与循环.pptx

    例如,算术运算符用于数值计算,关系运算符用来比较两个值的大小,而测试运算符如`in`和`not in`则用于检查一个值是否在序列中。逻辑运算符`and`、`or`和`not`则用于组合多个条件,其中`and`和`or`具有短路求值特性...

    2009达内SQL学习笔记

    NVL:处理空值,把空值转化为指定值。可转化为日期、字符、数值等三种(注意:转化时,两参数必须要同类型) 如:NVL(date, '01-JAN-95') NVL(title,'NO Title Yet') NVL(salary,0) 错误写法: Select last_name,...

    大名鼎鼎SWFUpload- Flash+JS 上传

    官方帮助文档的原文中对该事件的描述中有这样一句:“If you return 'true' or do not return any value then the upload proceeds.”,从中可以看到既定的设计是当不返回任何值的时候应该等同于返回true,但是笔者...

    python编程必备英语(全)

    9. **remove**: 移除,根据值删除列表中的第一个匹配项。 10. **del (delete)**: 删除,移除列表中的元素。 11. **clear**: 清除,删除列表中的所有元素。 12. **sort**: 排序,按升序或降序排列列表中的元素。 ###...

    MySQL exists 和in 详解及区别

    如果值在列表中,`IN`返回`TRUE`,否则返回`FALSE`。 例如: ```sql SELECT CustomerId, CompanyName FROM Customers c WHERE c.CustomerId IN (SELECT CustomerID FROM Orders) ``` 这里,`IN`子查询返回`Orders...

    python基础梳理(一)(推荐)

    - **成员运算符**: `in`, `not in`,用于判断某个值或变量是否在一个序列中。 - **身份运算符**: `is`, `is not`,用于比较两个变量是否指向同一个对象。 - **逻辑运算符**: `and`, `or`, `not`,用于连接多个...

    MySql基本查询、连接查询、子查询、正则表达查询讲解

    IN关键字可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,该纪录将被查询出来。如果不在集合中,则不满足查询条件。其语法规则如下:[ NOT ] IN ( 元素1, 元素2, …, 元素n ) [sql...

    迷你lua 5.1参考手册

    - `or`: 逻辑或运算,如果至少有一个表达式为真,则返回最后一个表达式的值。 - `repeat`: 用于创建无限循环,直到满足退出条件。 - `return`: 从函数中返回值。 - `then`: `if`语句中紧跟条件后的部分。 - `true`: ...

    SQLite NULL 值

    比较操作在涉及到 `NULL` 值时会有特殊的行为,因为 `NULL` 不等于任何其他值,包括另一个 `NULL`。 在创建表时,你可以指定某个字段是否允许 `NULL`。例如,以下是一个创建名为 `COMPANY` 的表的 SQLite 语句: `...

    Python 实现使用空值进行赋值 None

    在Python编程语言中,`None`是一个特殊的值,用于表示空或不存在的值。它不同于其他编程语言中的`null`或`nil`,因为`None`在Python中是一个预定义的单例对象,属于`NoneType`类型。在处理数据时,特别是在数据分析...

    freemarker总结

    这里所说的空值,实际上也包括那些并不存在的变量,对于一个Java的 null值而言,我们认为这个变量是存在的,只是它的值为null,但对于FreeMarker模板而言,它无法理解null值,null值和不存在的变 量完全相同. 为了处理缺失...

    python基础关键字介绍.docx

    23. **`in`**: 用于检查一个值是否存在于一个序列中。 24. **`is`**: 用于比较两个对象是否是同一个对象。 25. **`lambda`**: 用于创建匿名函数。 26. **`nonlocal`**: 用于声明非局部变量。 27. **`not`**: 用于...

    Hive函数大全

    逻辑或操作用于组合两个条件,并且只要有一个条件为真,结果就为真。 ```sql SELECT * FROM table WHERE condition1 OR condition2; ``` ##### 3. 逻辑非操作(`NOT`) 逻辑非操作用于取反一个条件的结果。 ```sql...

    《Python数据分析与应用》试卷A.docx

    3. **布尔值**:在Python中,非零数值(包括正数、负数、浮点数)被认为是True,0和空字符串`''`被认为是False,`None`也是一个特殊的False值。因此,选项A、B和D都不是True,只有C是False,但题目要求选择True。 4...

    mysql试题(2).docx

    4. 在SQL中,测试列值是否为空通常使用`IS NULL`或`IS NOT NULL`运算符。 5. 要修改表,可以使用`ALTER TABLE`或`MODIFY COLUMN`命令。 6. 数据库管理系统(DBMS)属于系统软件,它提供了一种组织、存储和检索数据...

    GBase-8s数据库平台PLSQL语法手册-D.docx

    - 用于定义一个变量,该变量包含表中一行的所有列的值。 - **1.2.7 使用限制** - 不同类型的变量不能使用同一个名字。 - **1.2.8 初始化为空值的变量** - 默认情况下,未初始化的变量会被赋予NULL值。 - **...

    JavaScript

    - **Null**:表示一个空值,通常用来表示“没有对象”。 - **Number**:可以表示整数或浮点数。特别地,`NaN`(Not a Number)用来表示非法的数值运算结果。 - **String**:表示文本数据,可以使用单引号或双引号...

Global site tag (gtag.js) - Google Analytics