SQL 論理演算子の優先順位: AND および OR
質問:
次の SQL ステートメントを考えてみましょう:
<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>
これら 2 つのステートメントは同等ですか?同等ではない場合、どのように優先順位を付ければよいでしょうか?
答え:
AND 演算子と OR 演算子の優先順位
SQL では、演算子の優先順位によって、WHERE 句内の論理演算子が評価される順序が決まります。 AND 演算子と OR 演算子の優先順位は次のとおりです:
これは、AND 演算子が OR 演算子の右側にある場合でも、最初に評価されることを意味します。
ステートメントに優先順位を適用します
指定されたステートメント内:
したがって、2 番目のステートメントは次のように評価されます:
<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>
真理値表の検証
計算された差異を示す真理値表は次のとおりです:
some_col | some_other_expr | 语句 1 | 语句 2 |
---|---|---|---|
1 | 0 | False | True |
2 | 1 | True | True |
3 | 0 | False | True |
4 | 0 | False | False |
5 | 1 | False | True |
ご覧のとおり、これら 2 つのステートメントの真理値は最初の行で異なり、これらが等価ではないことがわかります。
優先順位を上書きするには括弧を使用してください
計算の順序を変更したい場合は、括弧を使用してデフォルトの優先順位をオーバーライドできます。たとえば、2 番目のステートメントを最初のステートメントと同等にするには、次のように記述します:
<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>
以上がSQL の「AND」演算子と「OR」演算子には異なる優先順位がありますか?これはクエリ結果にどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。