我目前正在使用Codecademy学习SQL,并且很好奇使用“ IS”或“ =”之间是否有区别。
在本课程中,我编写了以下代码:
SELECT *
FROM nomnom
WHERE neighborhood IS 'Midtown'
OR neighborhood IS 'Downtown'
OR neighborhood IS 'Chinatown';
哪个运行得很好。我总是喜欢在查看答案后,看看我做错了什么还是可以改善的。答案是这样的代码:
SELECT *
FROM nomnom
WHERE neighborhood = 'Midtown'
OR neighborhood = 'Downtown'
OR neighborhood = 'Chinatown';
IS和=功能是否相同?
答案 0 :(得分:2)
所有您想知道的东西都可以在这里找到:
IS和IS NOT运算符的工作方式与=和!=相同,除非两者之一或两者同时使用 的操作数为NULL。在这种情况下,如果两个操作数均为NULL, 然后IS运算符求值为1(真),而IS NOT运算符 计算结果为0(假)。如果一个操作数是NULL,而另一个不是, 那么IS运算符的计算结果为0(假),而IS NOT运算符为 1(正确)。 IS或IS NOT表达式不可能 评估为NULL。运算符IS和IS的优先级与 =。
摘自:SQL As Understood By SQLite。
重要的部分是: ...除非一个或两个操作数为NULL ... ,因为使用=
或!=
(<>
)时, 1个(或两个)操作数为NULL,则结果也为NULL
,这与IS
和IS NOT
有所不同。
答案 1 :(得分:0)
它们的工作原理相同,但“ IS”是MySQL中的关键字,通常在比较NULL值时使用。比较NULL值时,“ =”无效。
SELECT * FROM nomnom WHERE neighborhood IS NULL
上面的语句运行得很好,但是
SELECT * FROM nomnom WHERE neighborhood = NULL
会导致错误。
答案 2 :(得分:0)
在这些情况下它们是相同的,但是在最下面的地方,您会发现一个漂亮的小值NULL。
NULL是一种痛苦,因为...它不存在。 0 = NULL返回FALSE; Date <> [Column]不会返回NULL的行,仅返回值不同的行。 地狱,甚至NULL = NULL都会返回false。并且NULL <> NULL也返回false。这就是为什么存在“ IS”的原因。因为NULL IS NULL将返回true。
因此,通常,将=用作值。 保持“ IS”为空。
[Column] IS NULL
或
[Column] IS NOT NULL
请记住,请始终检查您的列是否可为空,以便在WHERE或ON子句中为空值进行规划。