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
Linda Hamiltonoriginal
2025-01-22 21:57:13258parcourir

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>

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>

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>

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>

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