ホームページ >データベース >mysql チュートリアル >MySQL は「WHERE」句の「OR」演算子と「AND」演算子をどのように評価しますか?

MySQL は「WHERE」句の「OR」演算子と「AND」演算子をどのように評価しますか?

DDD
DDDオリジナル
2024-12-10 22:17:11334ブラウズ

How Does MySQL Evaluate `OR` and `AND` Operators in `WHERE` Clauses?

MySQL OR/AND の優先順位

MySQL の論理演算子には、クエリ内で複数の条件がどのように評価されるかを決定する特定の優先順位ルールがあります。これらのルールを理解することは、効率的で正確なクエリを作成するために非常に重要です。

クエリに関して、表示が 1 または 2 で、コンテンツ、タグ、またはタイトルのいずれかに「hello world」が含まれる行を取得したいと考えています。 MySQL 演算子の優先規則は次のとおりです。

(highest precedence)
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), :=
(lowest precedence)

これらの規則を念頭に置いて、クエリを分析してみましょう。

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) は、display 1 または 2 の行が確実に取得されるようにします。
  • 外側の括弧: ((display = 1) または (display = 2) ) および ("%hello world%" のようなコンテンツ) または ("%hello world%" のようなタグ) または ("%hello world%" のようなタイトル) を定義します"hello world." に一致する条件

OR が AND よりも優先されるため、クエリは次のように解釈されます:

Select * from tablename where (display = 1 or display = 2) and (content like "%hello world%" or (tags like "%hello world%" or title = "%hello world%"))

したがって、クエリは次のように解釈されます。行:

  • 表示は 1 または 2および
  • コンテンツ、タグ、またはタイトルのいずれかに「hello world」が含まれています。

混乱を避けるため、括弧を使用して目的の評価順序を明示的に示すことをお勧めします。たとえば、次のクエリは、表示が 1 または 2 である行、またはコンテンツ、タグ、またはタイトルのいずれかに「hello world」が含まれる行を取得します:

Select * from tablename where (display = 1 or display = 2) and (content like "%hello world%" or tags like "%hello world%" or title like "%hello world%")

以上がMySQL は「WHERE」句の「OR」演算子と「AND」演算子をどのように評価しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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