Max*_*ich 255 sql t-sql sql-server null
有人可以在SQL中解释以下行为吗?
SELECT * FROM MyTable WHERE MyColumn != NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn <> NULL (0 Results)
SELECT * FROM MyTable WHERE MyColumn IS NOT NULL (568 Results)
Run Code Online (Sandbox Code Playgroud)
OMG*_*ies 293
<>是标准SQL-92; !=是等价的.两者都评估值,这NULL不是 - NULL是一个占位符,表示没有值.
这就是为什么你只能使用IS NULL/ IS NOT NULL作为这种情况的谓词.
此行为不是特定于SQL Server.所有符合标准的SQL方言都以相同的方式工作.
注意:要比较您的值是否为null,请使用IS NOT NULL,而要与非空值进行比较时使用<> 'YOUR_VALUE'.我不能说我的值是否等于NULL,但我可以说我的值是NULL还是NOT NULL.如果我的值不是NULL,我可以比较.
Bar*_*own 84
NULL没有值,因此无法使用标量值运算符进行比较.
换句话说,没有值可以等于(或不等于)NULL,因为NULL没有值.
因此,SQL具有特殊的IS NULL和IS NOT NULL谓词来处理NULL.
Cad*_*oux 26
请注意,此行为是默认(ANSI)行为.
如果你:
SET ANSI_NULLS OFF
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/ms188048.aspx
你会得到不同的结果.
SET ANSI_NULLS OFF 显然将来会消失......
null表示没有值或未知值。它没有说明原因没有值,这可能会导致一些歧义。
假设您运行如下查询:
\nSELECT *\nFROM orders\nWHERE delivered=ordered;\nRun Code Online (Sandbox Code Playgroud)\n也就是说,您正在查找ordered和delivered日期相同的行。
当一列或两列都为空时会出现什么情况?
\n由于至少其中一个日期是未知的,因此您不能指望说这 2 个日期是相同的。当两个日期都未知时也是如此:如果我们甚至不知道它们是什么,它们怎么可能相同呢?
\n因此,任何视为null值的表达式都必定会失败。在这种情况下,它将不匹配。如果您尝试以下操作,也会出现这种情况:
SELECT *\nFROM orders\nWHERE delivered<>ordered;\nRun Code Online (Sandbox Code Playgroud)\n再说一次,如果我们不知道两个值是什么,我们怎么能说它们不同呢?
\nSQL 对缺失值有一个特定的测试:
\nIS NULL\nRun Code Online (Sandbox Code Playgroud)\n具体来说,它不是比较值,而是寻找缺失值。
\n最后,关于!=运营商,据我所知,它实际上不在任何标准中,但它得到了广泛的支持。添加它是为了让某些语言的程序员感觉更自在。坦率地说,如果程序员很难记住他们使用的语言,那么他们的开始就很糟糕。
对NULL的唯一测试是IS NULL或IS NOT NULL.对等式进行测试是没有意义的,因为根据定义,人们不知道该值是什么.
这是一篇维基百科文章:
https://en.wikipedia.org/wiki/Null_(SQL)
在SQL中,您评估/计算的任何NULL结果都是UNKNOWN
这就是为什么SELECT * FROM MyTable WHERE MyColumn != NULL或SELECT * FROM MyTable WHERE MyColumn <> NULL给你0结果.
为了提供NULL值的检查,提供了isNull函数.
此外,您可以使用IS第三个查询中使用的运算符.
希望这可以帮助.
我们用
SELECT * FROM MyTable WHERE ISNULL(MyColumn, ' ') = ' ';
Run Code Online (Sandbox Code Playgroud)
返回MyColumn为NULL的所有行或MyColumn为空字符串的所有行.对于许多"最终用户"来说,NULL与空字符串问题是一种区别,没有必要和混淆点.
NULL 不能与使用比较运算符的任何值进行比较。NULL = NULL 为假。Null 不是一个值。IS 运算符专门设计用于处理 NULL 比较。
我只是看不到null不能与其他值或其他null相提并论的功能性和无缝原因,因为我们可以清楚地比较它,并说它们在我们的上下文中是相同还是不同。这很有趣。仅仅由于一些合乎逻辑的结论和一致性,我们需要不断地对其进行打扰。它不是功能性的,要使其更具功能性,然后让哲学家和科学家们来断定它是否一致,是否具有“普遍逻辑”。:)有人可能会说这是由于索引或其他原因造成的,我怀疑这些东西是否无法支持与值相同的null。就像比较两个空杯子,一个是藤蔓玻璃,另一个是啤酒杯,我们不是在比较对象的类型,而是它们包含的值,就像可以比较int和varchar一样,将其为null。甚至更容易,没有什么和两个虚无的共同点是什么,它们是相同的,对于我和其他编写sql的其他人来说,它们显然是可比较的,因为由于某些ANSI标准,我们不断以奇怪的方式比较它们来打破这种逻辑。为什么不使用计算机功能为我们做这件事,我怀疑如果考虑到所有相关内容,它会减慢速度。“这不是null,什么也不是”,不是苹果,而是apfel,加油...从功能上来说是您的朋友,这里也有逻辑。最后,唯一重要的是功能,并且以这种方式使用null会带来或多或少的功能和易用性。它更有用吗?因为我们由于某些ANSI标准而不断以奇怪的方式进行比较来打破这种逻辑。为什么不使用计算机功能为我们做这件事,我怀疑如果考虑到所有相关内容,它会减慢速度。“这不是null,什么也不是”,不是苹果,而是apfel,加油...从功能上来说是您的朋友,这里也有逻辑。最后,唯一重要的是功能,并且以这种方式使用null会带来或多或少的功能和易用性。它更有用吗?因为我们由于某些ANSI标准而不断以奇怪的方式进行比较来打破这种逻辑。为什么不使用计算机功能为我们做这件事,我怀疑如果考虑到所有相关内容,它会减慢速度。“这不是null,什么也不是”,不是苹果,而是apfel,加油...从功能上来说是您的朋友,这里也有逻辑。最后,唯一重要的是功能,并且以这种方式使用null会带来或多或少的功能和易用性。它更有用吗?不是苹果,它是apfel,加油...从功能上来说是您的朋友,并且这里也有逻辑。最后,唯一重要的是功能,并且以这种方式使用null会带来或多或少的功能和易用性。它更有用吗?不是苹果,它是apfel,加油...从功能上来说是您的朋友,并且这里也有逻辑。最后,唯一重要的是功能,并且以这种方式使用null会带来或多或少的功能和易用性。它更有用吗?
考虑以下代码:
SELECT CASE WHEN NOT (1 = null or (1 is null and null is null)) THEN 1 ELSE 0 end
Run Code Online (Sandbox Code Playgroud)
你们当中有多少人知道这段代码会返回什么?无论是否设置NOT,它都将返回0。对我来说,它不起作用并且令人困惑。在c#中,比较操作应该返回值,从逻辑上讲,这也会产生值,因为如果没有,则没有什么可比较的(nothing :)除外)。他们只是“说”:与null相比,任何东西都“返回” 0,这会造成许多变通方法和麻烦。
这是使我来到这里的代码:
where a != b OR (a is null and b IS not null) OR (a IS not null and b IS null)
Run Code Online (Sandbox Code Playgroud)
我只需要比较两个字段(在哪里)具有不同的值,就可以使用函数,但是...