![]() |
1
305
查询A与以下内容相同:
自从
查询B与以下内容相同:
什么时候
什么时候
|
![]() |
2
56
无论何时使用NULL,实际上都是在处理三值逻辑。
第二条:
未知与虚假是不同的 您可以通过调用以下命令轻松测试:
两个查询都不会给出任何结果
如果未知值与FALSE相同,那么假设第一个查询将为FALSE,第二个查询将必须计算为TRUE,因为它与NOT相同(FALSE)。
article on this subject on SqlServerCentral .
我想推荐的另一篇文章是 SQL Aggregate Functions and NULL . |
![]() |
3
48
|
![]() |
4
18
除非使用is null,否则Compare to null未定义。 因此,当将3与NULL(查询A)进行比较时,它返回undefined。 和 将产生相同的结果,因为NOT(UNDEFINED)仍然是UNDEFINED,但不是TRUE |
![]() |
5
9
在撰写本文时,这个问题的标题是
从问题的文本来看,问题似乎发生在SQL DML中
然而,特别是考虑到标题的措辞,我想指出,这里所作的一些陈述是潜在的误导性陈述,这些陈述大致如下(意译)
尽管SQL DML就是这种情况,但在考虑约束时,效果是不同的。 考虑一个非常简单的表,它有两个约束直接从问题的谓词中得到(并用@ Brnon的一个很好的答案来处理):
根据@Brannon的回答,第一个约束(使用
就SQL-92标准而言,上述效果确实是正确的。比较和对比SQL-92规范中的以下部分
换言之:
在SQL DDL(即约束)中,当行的计算结果为未知时,不会从结果中删除行,因为它是未知的 做 满足条件“不为假”。 尽管SQL DML和SQL DDL中的效果可能看起来相互矛盾,但通过允许未知结果满足约束(更准确地说,允许它们不不满足约束),为未知结果提供“怀疑的好处”是有实际理由的:如果没有这种行为,每一个约束都必须显式地处理空值,从语言设计的角度来看,这是非常不令人满意的(更不用说,这对编码人员来说是一种痛苦!) P.S.S.如果你发现遵循这样的逻辑是“未知的不满足约束”,就像我要写的那样,那么考虑你可以简单地通过避免SQL DDL中的可空列和产生空值的SQL DML(例如外部连接)来省略所有这些。 |
![]() |
6
7
在A中,对集合中的每个成员测试3是否相等,从而得出(FALSE、FALSE、TRUE、UNKNOWN)。因为其中一个元素为真,所以条件为真。(这里也可能发生一些短路,因此一旦达到第一个真值,它实际上就会停止,并且永远不会计算3=NULL。)
|
![]() |
7
7
从这里的答案可以得出如下结论:
考虑一张桌子
任务是找到已知供应零件号“P1”但数量不为1000的供应商。
以下用途
但是,下面的查询使用相同的一般结构,但是
当然,问题的根源是空值的存在,因此“真正”的解决方案是消除这些空值。 这可以通过使用两个表来实现(除其他可能的设计外):
注意,可能存在外键约束,其中
然后可以使用“减号”关系运算符(即
|
![]() |
8
6
Null表示没有数据,也就是说它是未知的,不是一个空的数据值。编程背景的人很容易混淆这一点,因为在C类型语言中,使用指针时,null实际上什么都不是。
选择“真”,其中3不在(空)
|
![]() |
9
6
如果要使用NOT IN筛选包含null的子查询,只需检查NOT null
|
![]() |
10
3
SQL对真值使用三值逻辑。这个
这是因为上述查询相当于以下查询:
下面是where子句的计算方法:
请注意:
|
![]() |
11
1
这是给男孩的:
无论ansi设置如何,此选项都有效 |
![]() |
12
0
此外,这可能有助于了解联接、exists和in之间的逻辑差异 http://weblogs.sqlteam.com/mladenp/archive/2007/05/18/60210.aspx |
![]() |
giancy9 · 从表中的多个值中选择不在数组中的位置 8 年前 |