1

我想了很多,但一直没有找到答案。在我不知道如何评估 SQL 查询的 where 子句中的条件的情况下,我发现了自己。可以肯定的是,我一直使用括号来使其更具可读性和易于理解。我认为有时使用括号来增加可读性是一种很好的做法,即使它可能不是必需的。

考虑以下查询

SELECT * 
FROM mytable 
WHERE name='Anton' 
  AND lastname='Gildebrand' 
   OR age > 18 
  AND country='Sweden'

我想这个查询实际上等于

SELECT * 
FROM mytable 
WHERE name='Anton' 
 AND (lastname='Gildebrand' OR (age > 18 AND country='Sweden'))

它是否正确?或者如何评估条件?它与不同的数据库引擎有什么不同吗?

4

2 回答 2

8
SELECT * FROM mytable
WHERE name='Anton' AND lastname='Gildebrand' OR age > 18 AND country='Sweden'

等于:

SELECT * FROM mytable
WHERE (name='Anton' AND lastname='Gildebrand') OR (age > 18 AND country='Sweden')

资料来源:TSQLMySQLOraclePostgreSQL

于 2013-03-01T21:30:58.740 回答
3

如果你在谈论andand or,那么在没有括号的情况下and首先被评估。*+数学一样。

这些规则不依赖于 SQL 实现。

于 2013-03-01T21:32:02.793 回答