Maison >base de données >tutoriel mysql >Comment MySQL évalue-t-il les opérateurs « OR » et « AND » dans les clauses « WHERE » ?

Comment MySQL évalue-t-il les opérateurs « OR » et « AND » dans les clauses « WHERE » ?

DDD
DDDoriginal
2024-12-10 22:17:11338parcourir

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

Précédence MySQL OR/AND

Les opérateurs logiques MySQL ont des règles de priorité spécifiques qui dictent la manière dont plusieurs conditions sont évaluées dans une requête. Comprendre ces règles est crucial pour élaborer des requêtes efficaces et précises.

En ce qui concerne votre requête, vous souhaitez récupérer les lignes où l'affichage est 1 ou 2 et où l'un des contenus, balises ou titres contient "hello world". Les règles de préséance pour les opérateurs MySQL sont :

(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)

Avec ces règles à l'esprit, analysons votre requête :

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

Selon les règles de préséance, les opérateurs logiques sont évalués entre parenthèses :

  • Parenthèses intérieures : (affichage = 1) ou (display = 2) garantit que les lignes avec l'affichage 1 ou 2 seront récupérées.
  • Parenthèses extérieures : ((display = 1) ou (display = 2)) et (contenu comme "%hello world%") ou (balises comme "%hello world%") ou (titre comme "%hello world%") définit les conditions de correspondance avec "hello monde."

En raison de la priorité de OU sur ET, la requête sera interprétée comme suit :

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

Par conséquent, la requête récupérera les lignes où :

  • l'affichage est 1 ou 2 et
  • l'un des contenus, balises ou titres contient "bonjour monde."

Pour éviter toute confusion, il est recommandé d'utiliser des parenthèses pour indiquer explicitement l'ordre d'évaluation souhaité. Par exemple, la requête suivante récupérera les lignes où l'affichage est 1 ou 2, ou où l'un des contenus, balises ou titres contient « 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%")

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn