ホームページ >データベース >mysql チュートリアル >演算子の優先順位は、クエリ内の MySQL の「OR」および「AND」ロジックにどのような影響を与えますか?

演算子の優先順位は、クエリ内の MySQL の「OR」および「AND」ロジックにどのような影響を与えますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-14 22:10:12532ブラウズ

How Does Operator Precedence Affect MySQL's `OR` and `AND` Logic in Queries?

MySQL OR/AND の優先順位

MySQL では、OR や AND などの論理演算子の演算順序によって、複雑なクエリの解釈が決まります。この記事では、優先順位ルールと、それがクエリ結果に与える影響について説明します。

説明

MySQL ドキュメントには、次のような演算子の優先順位の包括的なリストが記載されています。

INTERVAL
BINARY, COLLATE
!
- (unary minus), ~ (unary bit inversion)
^
*, /, DIV, %, MOD
-, +
<<, >>
&
|
= (comparison), <=, >=, >, <, <>, !=, IS, LIKE, REGEXP, IN
BETWEEN, CASE, WHEN, THEN, ELSE
NOT
&&, AND
XOR
||, OR
= (assignment), :=

によるとこの優先順位に従って、次のクエリが解釈されます。

SELECT *
FROM tablename
WHERE
    display = 1
    OR (
        display = 2 AND content LIKE "%hello world%"
    )
    OR tags LIKE "%hello world%"
    OR title = "%hello world%"

解釈

上記のクエリは、

  • display が 1 に等しい
  • display が 2 に等しく、コンテンツに以下が含まれる行を検索します。 「hello world」
  • タグには「hello」が含まれていますworld"
  • タイトルには "hello world" が含まれています

WHERE 句は次の順序で評価されます:

  1. 表示が最初にチェックされます。
  2. display が 1 でない場合、2 番目のサブクエリが評価されます。
  3. サブクエリでは、表示が 2 と等しいかどうかチェックされます。true の場合、コンテンツが「hello world」かどうかチェックされます。
  4. 最後に、タグとタイトルの残りの句が、OR 演算子でリンクされて評価されます。

優先順位の問題と解決策

明確な解釈を保証するために、括弧を使用することをお勧めします明示的に。例:

SELECT *
FROM tablename
WHERE
    ((display = 1) OR (display = 2)) AND
    ((content LIKE "%hello world%") OR (tags LIKE "%hello world%") OR (title LIKE "%hello world%"))

このクエリは、次の条件のいずれかを満たしている場合に行がフェッチされることを確認します:

  • display が 1 または 2 に等しい
  • content、タグまたはタイトルに「hello world」が含まれています

以上が演算子の優先順位は、クエリ内の MySQL の「OR」および「AND」ロジックにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。