繁体   English   中英

在以下情况下,SQL中的NULL如何工作?

How does the NULL in SQL works in the below scenario?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在练习SQL,并意识到SQL中的NULL是非常了不起的“ 实体 ”。

表“ xo请参见链接以获取表的结构和内容

当我运行以下SQL查询时

select a from xo where a not in (select c from xo) ;

它不返回任何行 当我运行此查询

select a from xo where a  in (select c from xo);

它按照我的预测工作。

你能解释一下上面的事情是如何工作的吗? 如果您可以提供一些其他资源来真正理解NULL ,那将非常有帮助。

小提琴

2 个回复

这是因为NULL在SQL中被特殊对待。 每当您将某物与NULL比较时,它都会返回unknown ,这反过来又使NOT IN条件下的比较失败。

这是为什么建议在NOT IN上使用EXISTS()的原因之一。

小提琴

不要NOT IN子查询中使用NOT IN 当子查询返回NULL值时,它具有您看到的行为。 不返回任何行。

我强烈建议NOT EXISTSLEFT JOIN / WHERE这个原因。 所以:

select a
from xo
where not exists (select 1 from xo xo2 where xo2.c = xo.a);

这将返回以下内容的补充:

select a
from xo
where exists (select 1 from xo xo2 where xo2.c = xo.a);

发生这种情况的技术原因是因为NULL是一个未知值,而不是特殊值。 所以:

1 in (1, 2, 3) returns TRUE
1 not in (1, 2, 3) returns FALSE

但:

1 in (1, 2, 3, NULL) returns TRUE, because 1 is explicitly in the list
1 in (2, 3, NULL) returns NULL (equivalent to FALSE) because `NULL` could be 1 or not

和:

1 not in (1, 2, 3, NULL) returns FALSE because 1 is explicitly in the list
1 not in (2, 3, NULL) returns NULL, because 1 could be in the list

因此,当任何值为NULLNOT IN将返回FALSE或NULL ,因此所有行都将被过滤掉。

1 SQL“或”运算符。 在以下情况下如何工作?

我一直在优化查询,并且遇到了一种情况,使我怀疑如何一直使用SQL的OR运算符。 (同样是SQL Server 2000) 我有一个条件(WHERE)子句看起来像这样的查询: 现在,我一直了解SQL中的OR会对两个表达式求值。 因此,将返回所有对左侧表达式为true的记录以及对右 ...

2 在以下情况下如何编写sql?

我有这样的情况: 每个星期都有密钥,产品和一些价值的组合。 如果密钥和产品的特定组合没有发生,我想在下周保留该值。 我将使用SQL Server 2008 , 一个例子是: 我想在下周2保留key1> prod1组合,因为它不存在。 ...

3 NaCl在以下情况下如何工作

我有一个用于屏幕共享的NPAPI插件。 为此,我使用zlib,jpeg,tight-vnc库以及由我开发的库(例如libX)。 现在,我希望将其移植到NaCl。 libX具有如下结构: 这些目录包含特定于平台的cpp文件。 我利用makefile根据平台进行编译。 ...

4 WebRTC中的信令在以下情况下如何工作?

我在网上阅读了有关此内容的信息,然后才知道使用信令来发起通信,但是我对于如何为另一个对等方获取ip:port组合感到非常困惑。 我想到了三种情况。 在同一网络(LAN)上 在互联网上(但不在代理/ NAT后面) 在互联网上但在代理/ NAT之后 对于1.我 ...

2017-01-31 06:52:14 0 57   webrtc
5 为什么在以下情况下getPersonal()返回null?

我一直在使用Java中的InternetAddress。 我使用了下面的代码片段。 在这种情况下,它返回king作为输出。 在这种情况下,没有例外,但返回null。 这里的逗号不是用双引号引起来,那么它如何被接受以及为什么它返回null而不是逗号? 谢谢。 ...

6 在以下情况下需要sql查询

该表包含: 都是varchar字段。 我需要一个查询,该查询的结果中没有任何空值,并且在单行中显示“ da1 dx1 dy1 db1 dc1 ” ...

2012-04-17 12:42:52 3 97   sql/ tsql
7 在以下情况下如何构造sql查询?

我有2张桌子 indexInfo : userGroupXindexInfo 可能有多个userGroups分配给同一索引,我如何获得唯一索引列表,这些索引属于具有特定类型的用户组列表? 所以我想要从indexInfo分配给用户组(201, 202, 203)的唯一索 ...

2015-03-18 14:11:02 3 35   sql
8 在以下情况下如何从SQL获取不同的数据?

我有一个具有递归一对多关系的表Menu 。 该表包含菜单及其子菜单。 当我执行查询时,我得到的结果是: 但是我想以以下格式将这些信息存储在C#集合(列表/字典)中。 注意:我正在C#中使用SQL-Data-Reader从SQL Server 2008中检索信息。 我该 ...

9 SQL查询-卡在以下情况下:

有谁知道如何处理这个问题: 我的情况是我有一个CustomerTable, OrderTable, ItemsTable and DeliveryTable 客户可以下很多订单一个订单可以包含很多项目 但是,这就是问题所在,如果我说1件,数量为20..我收到15库存,并希望将1 ...

10 在以下情况下如何编写SQL查询?

我有一个变更报告表,其中有两列ChangedTime,FileName 请考虑此表有超过1000条记录 在这里,我需要根据以下因素查询所有更改 这意味着给定的间隔为1分钟,文件数为10。如果在1分钟间隔的任何时间内,已更改文件的数量大于10,则需要获取该1分钟间隔内所有已更改 ...

2013-07-02 13:32:31 3 134   sql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM