在T-SQL中注意and和or的优先级问题

示例
下面的示例检索某些书名,这些书具有大于 $5,500 的预付款,并且这些书籍是商业书籍或心理学书籍。如果没有括号,又该是怎样的哩?

USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, type
FROM titles
WHERE (type = 'business' OR type = 'psychology') AND
   advance > $5500
ORDER BY title
GO
 

由于AND和OR的优先级不同,那么此Where条件就变成了相当于如下的表示:

USE pubs
GO
SELECT SUBSTRING(title, 1, 30) AS Title, type
FROM titles
WHERE type = 'business' OR (type = 'psychology'AND
advance > $5500)
ORDER BY title
GO

这样“(type = 'psychology'AND
advance > $5500) ”经运算后就变成了一个独立条件再与“type = 'business' ”进行 OR 运算。

AND的语义是:二者必须满足才为RTUE;
OR的语义是:二者只要有一个满足就为TRUE,言外之意,二者同时满足也为TRUE。

结论:


“如果没有括号,那么 WHERE 子句就会检索预付款超过 $5,500 的心理学书籍或者所有商业书籍。 ”

 

转载自:http://zhidao.baidu.com/question/43216282.html

 

你可能感兴趣的:(sql,逻辑运算,t-sql)