Maison >base de données >tutoriel mysql >Comment MySQL évalue-t-il les opérateurs « OR » et « AND » dans les clauses « WHERE » ?
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 :
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ù :
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!