WHERE中IN和OR之间的SQL区别

标签 sql

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

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时,会有区别-NULLNOT 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/

相关文章:

sql - PostgreSQL 和 DataMapper 问题

sql - 如何获取上传到 SQL-Server 的文件大小?

mysql - sql count(*) 查询执行多个结果的另一个查询的结果

SqlExceptionHelper : ERROR: function count(character varying, 整数)不存在

mysql - SQL 数据库的简单复选框值

sql - 如何执行3GB SQL 文件(Microsoft SQL Server)?

mysql - 检索包含字段最大值的整行

mysql - QSqlQuery 仅返回两列 SELECT * FROM ...,知道为什么我没有得到所有列吗?

MySQL复杂字符串匹配

mysql - 'where clause' 中的未知列 - 在 WHERE 中使用 ALL 运算符时