IN关键字与OR关键字

时间:2011-08-08 16:29:03

标签: tsql

如果我在WHERE子句中使用以下任一项,那会有很大的不同:

WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')

--or

WHERE [Process Code] =  1 AND [Material ID] IN ('PLT', 'BMI')

我会用一次而不是另一次吗?

4 个答案:

答案 0 :(得分:5)

我想不出我会使用第一个选项的时间。第二种选择更清洁,更具表现力。如果需要将其转换为子选择,那么它将更容易实现。

答案 1 :(得分:4)

在您提供的示例中,他们执行的操作完全相同(它们将导致相同的执行计划)。但是,使用后一种语法(除了更简洁),你可以这样做:

WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type)

答案 2 :(得分:1)

IN只是一堆OR's的语法糖。 IN通常更受欢迎,因为它更容易阅读:它不会重复变量名称,您不必考虑ANDOR是否具有更高的运算符优先级。

答案 3 :(得分:1)

查询执行计划通常都是相同的。在运行比较之前,您可以检查表达式是否为null(ISNULL(@parm,'')ISNULL([fieldname],'')等)。

微软警告说:

  

要比较的子查询或表达式返回的任何空值   使用IN或NOT IN返回UNKNOWN到test_expression。使用null   值与IN或NOT IN一起会产生意外结果。