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 :
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 :
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!