ホームページ > データベース > mysql チュートリアル > SQL AND/OR 演算子の優先順位: これらの SQL ステートメントは同等ですか?

SQL AND/OR 演算子の優先順位: これらの SQL ステートメントは同等ですか?

Barbara Streisand
リリース: 2025-01-22 21:46:10
オリジナル
514 人が閲覧しました

SQL AND/OR Operator Precedence: Are These SQL Statements Equivalent?

SQL 論理演算子の優先順位: AND と OR の階層を理解する

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 における論理演算子の優先順位に関するさらなる参考資料をお探しの場合は、次のリソースをお勧めします。

  • Microsoft Transact-SQL 演算子の優先順位
  • Oracle MySQL 9 演算子の優先順位
  • Oracle 10g 条件の優先順位
  • PostgreSQL 演算子の優先順位
  • SQLite によって理解される SQL

以上がSQL AND/OR 演算子の優先順位: これらの SQL ステートメントは同等ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート