Évaluation de la clause SQL WHERE : explication des courts-circuits
Une question fréquente concernant les clauses WHERE
de SQL concerne l'évaluation des expressions booléennes : SQL utilise-t-il l'évaluation par court-circuit ? Cela signifie que l'évaluation s'arrête dès que le résultat est certain, contournant potentiellement les parties ultérieures de l'expression.
Norme ANSI SQL et commande d'évaluation
La norme ANSI SQL ne définit pas explicitement l'évaluation des courts-circuits pour les clauses WHERE
. L'ANSI SQL Draft 2003 spécifie que l'ordre d'évaluation des expressions dépend de l'implémentation. Cela laisse la décision de mettre en œuvre ou non le court-circuit aux fournisseurs de bases de données individuels.
Implémentation spécifique à la base de données
Par conséquent, le comportement en cas de court-circuit varie considérablement selon les systèmes de bases de données :
AND
et OR
.OPTIMIZER_MODE
.AND
uniquement.Exemple illustratif
Considérez cette requête :
<code class="language-sql">SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) </code>
Si @key
est NULL
, la première condition (@key IS NULL
) est TRUE
. Dans SQL Server, l'évaluation du court-circuit ignorerait la deuxième condition (@key IS NOT NULL AND @key = t.Key
), car le résultat global est déjà connu.
Clé à retenir
La norme ANSI SQL ne garantit pas l'évaluation des courts-circuits dans les clauses WHERE
. Sa présence et son comportement sont spécifiques à la base de données. Consultez toujours la documentation de votre système de base de données pour comprendre sa stratégie d'évaluation.
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!