我对正在运行的查询的结果感到困惑。希望这不会因为我拍打我的脑袋而感觉像个白痴而结束,但是这里(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
也出现在两个版本中。
我对这里使用括号有何了解?
答案 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