括号影响查询结果

时间:2013-03-25 15:49:07

标签: sql sql-server tsql

我对正在运行的查询的结果感到困惑。希望这不会因为我拍打我的脑袋而感觉像个白痴而结束,但是这里(SQL Server 2008)。

第一个问题是:

SELECT p.product_number,p.long_desc
FROM products p
WHERE p.prod_status = 1
AND ((p.long_desc IS NULL) OR (p.long_desc LIKE '%N/A%'))
ORDER BY p.product_number

第二个版本是:

 SELECT p.product_number,p.long_desc
 FROM products p
 WHERE p.prod_status = 1
 AND p.long_desc IS NULL 
 OR p.long_desc LIKE '%N/A%'
 ORDER BY p.product_number

第二个版本中有三个产品没有出现在第一个版本中,但对我来说这两个查询应该给出相同的结果。显示在第二个但不是第一个中的三个项目在N/A列中都具有值long_desc

然而,还有许多其他版本N/A也出现在两个版本中。

我对这里使用括号有何了解?

1 个答案:

答案 0 :(得分:7)

AND的优先级高于OR(请参阅documentation),因此如果没有括号,则查询等效于此:

 SELECT p.product_number,p.long_desc
 FROM products p
 WHERE (p.prod_status = 1
 AND p.long_desc IS NULL) 
 OR p.long_desc LIKE '%N/A%'
 ORDER BY p.product_number