ホームページ >データベース >mysql チュートリアル >SQL AND/OR 演算子の優先順位: これらの SQL ステートメントは同等ですか?
SQL では、論理演算子「AND」と「OR」は、指定された条件に基づいてデータをフィルタリングする条件式を構築するための構成要素です。ただし、これらの式の結果を決定する際には、それらの優先順位、つまり評価される順序が重要です。
質問:
次の 2 つの 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」よりも優先されます。つまり、式 some_col in (1,2,3,4,5) AND some_other_expr
が最初に評価され、次にその評価結果が OR 演算子に適用されます。
これを説明するために、次の例を考えてみましょう:
<code class="language-sql">Declare @x tinyInt = 1 Declare @y tinyInt = 0 Declare @z tinyInt = 0 Select Case When @x=1 OR @y=1 And @z=1 Then 'T' Else 'F' End -- 输出 T Select Case When (@x=1 OR @y=1) And @z=1 Then 'T' Else 'F' End -- 输出 F</code>
最初のステートメントは @x=1 OR @y=1 And @z=1
を評価し、式 @y=1 And @z=1
が「False」を返すため、結果は「T」になります。次に、「OR」演算子がこの結果を「@x=1」(「True」)と結合し、最終的に「T」を出力します。
ただし、2 番目のステートメントは (@x=1 OR @y=1) And @z=1
を異なる方法で評価します。 「OR」演算子はまず、両方とも「True」である「@x=1」と「@y=1」を結合し、結果は「True」になります。この「True」の結果は「@z=1」(「False」) に対して評価され、最終的な出力は「F」になります。
したがって、評価の順序は重要であり、括弧を使用して優先順位ルールをオーバーライドできます。これら 2 つのステートメントを等価にするには、次のように括弧を追加します。
<code class="language-sql">SELECT [...] FROM [...] WHERE (some_col in (1,2,3) or some_col in (4,5)) AND some_other_expr</code>
SQL における論理演算子の優先順位に関するさらなる参考資料をお探しの場合は、次のリソースをお勧めします。
以上がSQL AND/OR 演算子の優先順位: これらの SQL ステートメントは同等ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。