


SQL garantit-il l'évaluation des courts-circuits dans les clauses WHERE ?
Jan 21, 2025 am 02:24 AMÉ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
etOR
. -
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 :
SELECT * FROM Table t WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key)
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!

Article chaud

Outils chauds Tags

Article chaud

Tags d'article chaud

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Réduisez l'utilisation de la mémoire MySQL dans Docker

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE?

Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin)

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape

Comment sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)?

Comment configurer le cryptage SSL / TLS pour les connexions MySQL?
