Maison > base de données > tutoriel mysql > SQL garantit-il l'évaluation des courts-circuits dans les clauses WHERE ?

SQL garantit-il l'évaluation des courts-circuits dans les clauses WHERE ?

Mary-Kate Olsen
Libérer: 2025-01-21 02:24:14
original
488 Les gens l'ont consulté

Does SQL Guarantee Short-Circuit Evaluation in WHERE Clauses?

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

  • SQL Server : Prend en charge l'évaluation des courts-circuits pour les opérateurs AND et OR.
  • Oracle : Ne prend pas en charge l'évaluation des courts-circuits par défaut, bien qu'elle puisse être activée à l'aide de l'astuce OPTIMIZER_MODE.
  • MySQL : Prend en charge l'évaluation des courts-circuits pour l'opérateur 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>
Copier après la connexion

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!

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