在SQL中,在where语句中返回值时,“ IS”和“ =”之间是否有区别?

时间:2019-12-30 22:40:58

标签: sql sqlite

我目前正在使用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和=功能是否相同?

3 个答案:

答案 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,这与ISIS 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子句中为空值进行规划。