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 ?

Jan 21, 2025 am 02:24 AM

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 :

SELECT * 
FROM Table t 
WHERE @key IS NULL OR (@key IS NOT NULL AND @key = t.Key) 
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!

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

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Réduisez l'utilisation de la mémoire MySQL dans Docker Réduisez l'utilisation de la mémoire MySQL dans Docker Mar 04, 2025 pm 03:52 PM

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

Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Comment modifier une table dans MySQL en utilisant l'instruction ALTER TABLE? Mar 19, 2025 pm 03:51 PM

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 Comment résoudre le problème de MySQL ne peut pas ouvrir la bibliothèque partagée Mar 04, 2025 pm 04:01 PM

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

Qu'est-ce que Sqlite? Aperçu complet Qu'est-ce que Sqlite? Aperçu complet Mar 04, 2025 pm 03:55 PM

Qu'est-ce que Sqlite? Aperçu complet

Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Exécutez MySQL dans Linux (avec / sans conteneur Podman avec phpmyadmin) Mar 04, 2025 pm 03:54 PM

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

Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Exécuter plusieurs versions MySQL sur macOS: un guide étape par étape Mar 04, 2025 pm 03:49 PM

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 sécuriser MySQL contre les vulnérabilités communes (injection SQL, attaques par force brute)? Mar 18, 2025 pm 12:00 PM

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? Comment configurer le cryptage SSL / TLS pour les connexions MySQL? Mar 18, 2025 pm 12:01 PM

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

See all articles