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
Libérer: 2024-12-10 22:17:11
original
333 Les gens l'ont consulté

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)
Copier après la connexion

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%"
Copier après la connexion

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%"))
Copier après la connexion

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%")
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal