在SQL中的WHERE子句中使用以下语句之间的区别是什么?
WHERE STUDENTID=7
或
WHERE STUDENTID IN (7)
是否有推荐/最佳选择?
答案 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')