以下两个命令有什么区别?
SELECT * FROM table WHERE id IN (id1, id2, ..., idn)
和
SELECT * FROM table WHERE id = id1 OR id = id2 OR ... OR id = idn
哪一个更快?如果
id
是另一种类型,会有所不同吗?
最佳答案
它们在语义上是相同的。 IN
只是一串相等语句的简写,如您的第二个示例中所示。性能也应该相同。
类型无关紧要,它将始终计算为一串相等的字符串。
但是,当您使用NOT IN
和数据可以是NULL
时,会有区别-NULL
在NOT IN
比较中不会得出false,因此您可能会得到结果集中未曾期望的行。
举个例子:SELECT 'Passed!' WHERE NULL NOT IN ('foo', 'bar')
即使表面值NULL
既不是'foo'
也不是'bar'
,上面的查询也不会返回行-这是因为NULL
是未知状态,并且SQL无法确定地说未知值是不是列出的IN
值之一。
关于WHERE中IN和OR之间的SQL区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9024594/