Maison > base de données > tutoriel mysql > Comment la priorité des opérateurs affecte-t-elle la logique « OU » et « ET » de MySQL dans les requêtes ?

Comment la priorité des opérateurs affecte-t-elle la logique « OU » et « ET » de MySQL dans les requêtes ?

Susan Sarandon
Libérer: 2024-12-14 22:10:12
original
529 Les gens l'ont consulté

How Does Operator Precedence Affect MySQL's `OR` and `AND` Logic in Queries?

Précédence MySQL OR/AND

Dans MySQL, l'ordre des opérations pour les opérateurs logiques, tels que OR et AND, détermine l'interprétation des requêtes complexes. Cet article explique les règles de priorité et leur impact sur les résultats des requêtes.

Explication

La documentation MySQL fournit une liste complète des priorités des opérateurs, comme suit :

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

Selon à cette hiérarchie de priorité, la requête suivante serait interprétée comme :

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

Interprétation

La requête ci-dessus recherche les lignes où soit :

  • l'affichage est égal à 1
  • l'affichage est égal à 2 et le contenu contient "Bonjour tout le monde"
  • les balises contiennent "bonjour monde"
  • le titre contient "hello world"

La clause WHERE est évaluée dans l'ordre suivant :

  1. l'affichage est vérifié en premier.
  2. Si display n'est pas 1, alors la deuxième sous-requête est évaluée.
  3. Dans la sous-requête, display est vérifié égalité avec 2. Si vrai, le contenu est vérifié pour "hello world".
  4. Enfin, les clauses restantes pour les balises et le titre sont évaluées, avec un opérateur OR les liant.

Problèmes de priorité et solutions

Pour garantir une interprétation sans ambiguïté, il est recommandé d'utiliser explicitement les parenthèses. Par exemple :

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

Cette requête garantit que les lignes sont récupérées si elles remplissent l'une des conditions suivantes :

  • l'affichage est égal à 1 ou 2
  • contenu, les balises ou le titre contiennent "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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal