WHERE中IN和OR之间的SQL差异

DrX*_*eng 8 sql

以下两个命令有什么区别?

SELECT * FROM table WHERE id IN (id1, id2, ..., idn)
Run Code Online (Sandbox Code Playgroud)

SELECT * FROM table WHERE id = id1 OR id = id2 OR ... OR id = idn
Run Code Online (Sandbox Code Playgroud)

哪一个更快?如果id是另一种类型,它会有所不同吗?

JNK*_*JNK 12

它们在语义上是相同的.

IN只是在第二个例子中的一串相等语句的简写.表现也应该是相同的.

类型无关紧要,它总是会评估为一系列的等式.

使用时NOT IN可能会有不同之处NULL,但是数据可能是这样 - NULL对于NOT IN比较,a 不会评估为false ,因此您可能会得到结果集中没有预期的行.

举个例子:

SELECT 'Passed!' WHERE NULL NOT IN ('foo', 'bar')

上面的查询将不会返回一行,即使在面值NULL既不'foo'或者'bar'-这是因为NULL是一个未知的状态,和SQL不能肯定地说,未知值是不是对的一个IN列出的值.