Not in \ in中包含有null值的列,不会排除null(因为 null != null)
Oracle not in (如果子查询返回的值或是集合有null值的话,将查询不到记录
解决办法: 子查询中限制不能游null返回值 is not null
用 not exists 代替 not in
True and null 返回 null
true or null 返回true ,
false and null返回null
false or null 返回null
null要用is进行比较如果用其它的比较运算符都返回null,
如:(1<>null返回null 1=null返回null)
This issue came up when I got different records counts for what I thought were identical queries one using a not in where constraint and the other a left join. The table in the not in constraint had one null value (bad data) which caused that query to return a count of 0 records. I sort of understand why but I could use some help fully grasping the concept.
To state it simply, why does query A return a result but B doesn't?
A: select 'true' where 3 in (1, 2, 3, null)
B: select 'true' where 3 not in (1, 2, null)
This was on SQL Server 2005. I also found that calling set ansi_nulls off causes B to return a result.
Query A is the same as:
select 'true' where 3 = 1 or 3 = 2 or 3 = 3 or 3 = null
Since 3 = 3 is true, you get a result.
Query B is the same as:
select 'true' where 3 <> 1 and 3 <> 2 and 3 <> null
When ansi_nulls is on, 3 <> null is UNKNOWN, so the predicate evaluates to UNKNOWN, and you don't get any rows.
When ansi_nulls is off, 3 <> null is true, so the predicate evaluates to true, and you get a row.
分享到:
相关推荐
Oracle使用三值逻辑来处理与NULL的逻辑运算:TRUE、FALSE和UNKNOWN(对应于NULL)。在逻辑表达式中,任何操作与UNKNOWN的结果都是UNKNOWN。 了解并正确处理NULL值对于编写有效的SQL查询、确保数据一致性以及避免...
NULL 参与四则运算时返回为空对空值做加、减、乘、除等运算操作,结果仍为空。因此有时需 nvl 函数处理 NULL 的处理使用 NVL 函数。 组函数忽略空值。在实际应用中,根据需要可利用 nvl 函数用零代替空值。 空值...
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 <=>: 比较操作符(不同于=运算符),当比较的的两个值为 NULL 时返回 true。 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中...
例如,整型和日期时间类型通常不允许NULL,除非明确声明为允许NULL的(如MySQL的NOT NULL DEFAULT NULL)。在创建表时,要确保允许NULL的列使用了正确的数据类型。 6. NULL vs. 空字符串: 值得注意的是,NULL和空...
#### 五、NULL与算术运算 8. **算术运算**: 任何涉及`NULL`的算术运算结果都是`NULL`。 - **题目示例**: - 第11题中,`100 + NULL`的结果是`NULL`。 - **选项分析**: - A. `NULL`: 正确。 - B. `100`: 错误。 ...
在比较运算中,null 和 undefined 被认为是相等的,但是 null 和 NaN 是不相等的。例如: ```javascript var a = null; var b = undefined; alert(a == b); // true alert(a == NaN); // false ``` NaN NaN(Not ...
例如,`NULL`值不参与算术运算和比较,`NULL`与任何值的比较都会返回`NULL`,这可能导致预期之外的行为。 为了将字段从`NOT NULL`变为`NULL`,可以使用以下SQL语句: ```sql ALTER TABLE 表名 MODIFY 字段名 ...
本篇文章将深入探讨“ActionScript Number(NaN) —> java(null) —> NaN —> null”这一主题,主要关注如何处理在ActionScript中的NaN(Not-a-Number)值在Java中转换为null的情况,以及这种转换可能引发的问题和...
例如,NULL不能使用=、<、>这样的运算符,对NULL做算术运算的结果都是NULL,COUNT时不会包括NULL行等,NULL比空字符串需要更多的存储空间等。 因此,在实际应用中,我们不建议列上允许为空,而是限制NOT NULL,并...
当`NULL`参与`IN`或`NOT IN`子查询时,同样会返回`NULL`,因为无法判断`NULL`是否存在于集合中: ```sql SELECT 1 IN (NULL); -- 结果为 NULL SELECT 1 NOT IN (NULL); -- 结果为 NULL SELECT NULL IN (NULL)...
#### 第二部分:逻辑运算与数学运算 ##### Hive 数学运算 - **加法操作**:`+` - **语法**:`A + B` - **操作类型**:所有数值类型 - **说明**:返回 `A` 与 `B` 相加的结果。结果的数值类型等于 `A` 的类型和 ...
如果B, C, D中的任何一个为NULL,由于OR运算符,结果可能为NULL,因为NULL与非NULL值的比较总是产生NULL。 - 特别地,针对NULL值的测试,我们可以使用 `IS (NOT) NULL` 来检查某个字段是否有值。这种方式不会产生...
IS NOT NULL: 当列的值不为 NULL, 运算符返回 true。 : 比较操作符(不同于 = 运算符),当比较的的两个值相等或者都为 NULL 时返回 true。 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != ...
IS NOT NULL: 当列的值不为NULL, 运算符返回true。 <=>: 比较操作符(不同于=运算符),当比较的的两个值为NULL时返回true。 关于 NULL 的条件比较运算是比较特殊的。你不能使用 = NULL 或 != NULL 在列中查找 ...
当我们使用 NULL 值与其他类型做运算时,结果将总是 NULL。例如: ```sql DECLARE @num INT DECLARE @num1 INT SET @num = NULL SET @num1 = 2 SET @num2 = @num + @num1 PRINT @num2 ``` 这段代码将打印出 NULL,...
本篇文章主要探讨MySQL中的一些常用函数和操作符,包括比较运算、NULL处理、逻辑运算以及一些特殊函数。 首先,我们要理解MySQL的比较运算规则。在MySQL中,比较运算会产生1(真)、0(假)或NULL的结果。如果比较...
对null的特殊处理即是在前面的章节中,为了决定哪个动物不再是活着的,使用death is not null而不使用death != null的原因。 在group by中,两个null值视为相同。 执行order by时,如果运行 order by … asc,则null...
7. **非空判断**: 使用 `IS NOT NULL` 运算符判断一个表达式的值是否非NULL,如果是则返回TRUE,否则返回FALSE。例如:`hive> select 1 from dual where 1 is not null;` 此外,Hive还支持基于模式匹配的关系运算,...