Maison > base de données > tutoriel mysql > Les opérateurs « AND » et « OR » de SQL ont-ils une priorité différente, et comment cela affecte-t-il les résultats des requêtes ?

Les opérateurs « AND » et « OR » de SQL ont-ils une priorité différente, et comment cela affecte-t-il les résultats des requêtes ?

Linda Hamilton
Libérer: 2025-01-22 21:57:13
original
257 Les gens l'ont consulté

Do SQL's `AND` and `OR` Operators Have Different Precedence, and How Does This Affect Query Results?

Priorité des opérateurs logiques SQL : AND et OR

Question :

Considérez l'instruction SQL suivante :

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col IN (1,2,3,4,5) AND some_other_expr</code>
Copier après la connexion

et

<code class="language-sql">SELECT [...]
FROM [...]
WHERE some_col IN (1,2,3) OR some_col IN (4,5) AND some_other_expr</code>
Copier après la connexion

Ces deux affirmations sont-elles équivalentes ? S’ils ne sont pas équivalents, comment les hiérarchiser ?

Réponse :

Priorité des opérateurs ET et OU

En SQL, la priorité des opérateurs détermine l'ordre dans lequel les opérateurs logiques de la clause WHERE sont évalués. La priorité des opérateurs AND et OR est la suivante :

  • L'opérateur AND a une priorité plus élevée que l'opérateur OR.

Cela signifie que même si l'opérateur AND apparaît à droite de l'opérateur OR, il sera évalué en premier.

Appliquer la priorité à la déclaration

Dans la déclaration donnée :

  • La première instruction utilise uniquement l'opérateur AND, la priorité est donc simple.
  • La deuxième instruction utilise une combinaison d'opérateurs OR et AND, où l'opérateur OR précède l'opérateur AND.

Par conséquent, la deuxième déclaration sera évaluée comme suit :

<code class="language-sql">WHERE (some_col IN (1,2,3)) OR (some_col IN (4,5) AND some_other_expr)</code>
Copier après la connexion

Vérification de la table de vérité

Voici une table de vérité illustrant les différences calculées :

some_col some_other_expr 语句 1 语句 2
1 0 False True
2 1 True True
3 0 False True
4 0 False False
5 1 False True

Comme on peut le constater, les valeurs de vérité de ces deux affirmations diffèrent dans la première ligne, ce qui montre qu'elles ne sont pas équivalentes.

Utilisez des parenthèses pour ignorer la priorité

Si vous souhaitez modifier l'ordre de calcul, vous pouvez utiliser des parenthèses pour remplacer la priorité par défaut. Par exemple, pour rendre la deuxième affirmation équivalente à la première, elle s'écrirait ainsi :

<code class="language-sql">WHERE (some_col IN (1,2,3) OR some_col IN (4,5)) AND some_other_expr</code>
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
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