括号影响查询结果

val*_*lis 2 sql t-sql sql-server

我对运行的查询结果感到困惑.希望这并不会因为我拍打我的头而感觉像个白痴一样,但是这里(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
Run Code Online (Sandbox Code Playgroud)

第二个版本是这样的:

 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
Run Code Online (Sandbox Code Playgroud)

第二个版本中有三个产品没有出现在第一个版本中,但对我来说,这两个查询应该给出相同的结果.出现在第二,但不是首先在三个项目有值N/Along_desc列.

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

关于括号的使用,我对此无法理解?

Dan*_*rth 7

AND优先级高于OR(参见文档),因此没有括号,查询等同于:

 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
Run Code Online (Sandbox Code Playgroud)