SQL使用=和IN之间的区别

时间:2015-02-12 15:52:14

标签: sql oracle

在SQL中的WHERE子句中使用以下语句之间的区别是什么?

WHERE STUDENTID=7

WHERE STUDENTID IN (7)

是否有推荐/最佳选择?

5 个答案:

答案 0 :(得分:6)

如果你正在做多个或多个,请使用IN。

Where StudentID = 7 or StudentID = 6 or StudentID = 5

将是

Where StudentID IN (5,6,7)

否则只需使用=

答案 1 :(得分:5)

没有功能差异,结果是一样的。

如果数据库对它们的处理方式不同,性能会有所不同,但数据库可能会识别出您在in表达式中只使用了一个值,并且实际上将执行计划视为第一个。< / p>

您可能希望以任何一种方式使用第一种方式,这样可以更清楚地表明您打算进行精确比较,并且不会忘记将其他值放在in表达式中。< / p>

答案 2 :(得分:2)

IN运算符只是一个语法糖:

( StudentID = 7 or StudentID = 6 or ... )

因此它以相同的方式处理NULL值。

答案 3 :(得分:2)

除了关于功能相似性等的所有其他答案之外,重要的是要注意的是,无论你如何编写SQL,Oracle OPTIMIZER 都足够聪明,可以进行查询-write 选择最高效执行计划。最好的方法是跟踪查询并查看实际情况。您会发现,当需要使用最佳执行计划时,优化程序会重新编写查询。

如果在多个 OR 条件下使用 IN 的其中一个答案中显示 -

  

其中StudentID = 7或StudentID = 6或StudentID = 5

优化器无论如何都会将其视为多个 OR 条件,只是为了使用 IN 进行编码。

答案 4 :(得分:1)

如果您使用一个值,则没有差异。但是如果您使用多个,则应使用IN语句。

例如:

您想在表格中选择a,b和c值。

如果你想使用=,你应该这样使用;

Select * from table_name where name = 'a' or name = 'b' or name = 'c' 

但如果您使用IN

Select * from table_name where name in('a','b','c')