Home >Database >Mysql Tutorial >SQL AND vs. OR: How Does Operator Precedence Affect Query Results?
SQL logical operator precedence: subtle differences between AND and OR
In SQL, the logical operators AND and OR determine how to combine multiple conditions to filter data. Understanding their priorities is critical to ensuring that queries execute correctly and avoid unexpected results.
Understanding operator precedence
Priority defines the order in which operators in an expression are evaluated. In SQL, AND has higher priority than OR. This means AND operations will be performed before OR operations.
Compare two statements
Consider the following two SQL statements:
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col in (1,2,3,4,5) AND some_other_expr</code>
<code class="language-sql">SELECT [...] FROM [...] WHERE some_col in (1,2,3) or some_col in (4,5) AND some_other_expr</code>
If you don’t understand operator precedence, you may think that these two statements are equivalent. However, they are not.
AND priority
In the second statement, the expression some_col in (1,2,3) or some_col in (4,5)
is evaluated first because OR has lower precedence than AND. The result of this expression is a Boolean value indicating whether some_col
is in any of the specified sets. Then, use the AND operator to combine this boolean value with some_other_expr
.
Equivalent correct syntax
To make the second statement equivalent to the first, we need to group the two OR conditions using parentheses to override the precedence rules:
<code class="language-sql">WHERE (some_col in (1,2,3) or some_col in (4,5)) AND some_other_expr</code>
With this modification, the inner OR operation is evaluated first and then the resulting boolean is combined with some_other_expr
using AND. The result is the same as the first statement.
Verify truth table
You can use a truth table to verify the difference between these two statements:
some_col | some_other_expr | 语句1 | 语句2 |
---|---|---|---|
1 | true | true | true |
2 | true | true | true |
3 | true | true | true |
4 | true | true | false |
5 | true | true | false |
1 | false | false | false |
2 | false | false | false |
3 | false | false | false |
4 | false | false | false |
5 | false | false | false |
As the table shows, the two statements produce different results for some_col
values that are not in the two sets specified in the OR condition.
Conclusion
Understanding SQL logical operator precedence is crucial to avoid unexpected query results. Remember that AND has higher precedence than OR, and use parentheses to group expressions as necessary to ensure the desired order of execution.
The above is the detailed content of SQL AND vs. OR: How Does Operator Precedence Affect Query Results?. For more information, please follow other related articles on the PHP Chinese website!