Maison >base de données >tutoriel mysql >Comment MySQL gère-t-il la priorité des opérateurs OR et AND dans les clauses WHERE ?

Comment MySQL gère-t-il la priorité des opérateurs OR et AND dans les clauses WHERE ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-10 20:58:10501parcourir

How Does MySQL Handle OR and AND Operator Precedence in WHERE Clauses?

La priorité des opérateurs MySQL OR/AND expliquée

Comprendre la priorité des opérateurs est cruciale pour interpréter le flux logique des requêtes SQL. Dans MySQL, OR et AND ont des priorités différentes, affectant l'ordre dans lequel ils sont évalués.

Interprétation des requêtes

Considérons la requête suivante :

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

Selon la documentation MySQL, OR et AND ont la même priorité. Par conséquent, la requête peut être interprétée de deux manières :

Interprétation 1 :

(display = 1 OR display = 2) AND (content LIKE "%hello world%" OR tags LIKE "%hello world%" OR title = "%hello world%")

Cette interprétation donne la priorité à l'opérateur OU entre parenthèses, regroupant les lignes où l'affichage est égal à 1 ou 2 avec des lignes correspondant à l'un des critères de contenu, de balises ou de titre.

Interprétation 2 :

((display = 1 OR display = 2) AND (content LIKE "%hello world%")) OR (tags LIKE "%hello world%" OR title = "%hello world%")

Dans cette interprétation, l'opérateur AND est plus étroitement lié que OR. Les valeurs d'affichage doivent toutes deux correspondre à 1 ou 2, ET au moins une des conditions de contenu, de balises ou de titre doit être remplie.

Règles de priorité

Pour éviter toute confusion, utilisez les règles de priorité des opérateurs suivantes :

  1. Les parenthèses remplacent toujours priorité.
  2. Les opérateurs ayant la même priorité sont évalués de gauche à droite.
  3. AND a une priorité plus élevée que OR.

Approche recommandée

Pour plus de clarté, regroupez explicitement les clauses à l'aide de parenthèses, en particulier lorsque vous utilisez plusieurs opérateurs logiques. Considérez la requête modifiée suivante :

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

Cette approche définit clairement le flux logique prévu, garantissant que la requête se comporte comme prévu.

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