Maison  >  Article  >  développement back-end  >  Description du processus d'exécution SQL

Description du processus d'exécution SQL

巴扎黑
巴扎黑original
2017-09-06 11:11:181109parcourir

La caractéristique la plus évidente qui distingue SQL des autres langages de programmation est l'ordre dans lequel le code est traité. Dans la plupart des langages de programmation, les codes sont traités dans l'ordre de codage, mais dans le langage SQL, la première clause à traiter est la clause FROM, et bien que l'instruction SELECT apparaisse en premier, elle est presque toujours traitée en dernier.

Chaque étape génère une table virtuelle, qui est utilisée comme entrée pour l'étape suivante. Ces tables virtuelles ne sont pas accessibles aux appelants (applications clientes ou requêtes externes). Seule la table générée à la dernière étape sera renvoyée à l'appelant. Si une clause n'est pas spécifiée dans la requête, l'étape correspondante est ignorée. Ce qui suit est une brève description des différentes étapes logiques qui s'appliquent à SQL Server 2000 et SQL Server 2005.
Mise en évidence du code produite par Actipro CodeHighlighter (gratuit)

-->(8)SELECT (9)DISTINCT (11)

( 1) FROM [left_table]

(3) JOIN

(2) ON

(4) OÙ < où_condition>

(5) GROUP BY

(6) AVEC

(7) AYANT

(10)ORDER BY

Introduction à l'étape de traitement logique des requêtes (ordre d'exécution)

FROM : Pour les deux premiers du FROM clause La table effectue un produit cartésien (jointure croisée) pour générer la table virtuelle VT1
ON : appliquer le filtre ON à VT1. Seules les lignes pour lesquelles est vraie sont insérées dans VT2.
OUTER(JOIN) : Si OUTER JOIN est spécifié (par rapport à CROSS JOIN ou (INNER JOIN), table préservée : la jointure externe gauche marque la table de gauche comme table réservée, la jointure externe droite marque la table de droite comme table réservée, un La jointure externe complète marque les deux tables comme réservées (la jointure externe complète marque les deux tables comme réservées). Les lignes qui ne trouvent pas de correspondance seront ajoutées à VT2 en tant que lignes externes, générant VT3. Si la clause FROM contient plus de deux tables, les résultats. généré par la jointure précédente sera Répétez les étapes 1 à 3 pour la table suivante jusqu'à ce que toutes les tables soient traitées
WHERE : Seules les lignes avec sont insérées dans VT4.
GROUP BY : Regroupez les lignes. dans VT4 selon la liste de colonnes dans la clause GROUP BY pour générer VT5.
CUBE|ROLLUP : insérez les supergroupes (Suppergroups) dans VT5 pour générer VT6.
HAVING : appliquer au filtre VT6 HAVING uniquement les groupes avec <. ;having_condition> défini sur true sera inséré dans VT7.
SELECT : traite la liste SELECT, produisant VT8
DISTINCT : supprime les lignes en double de VT8, produisant
ORDER BY : trie les lignes dans VT9. par la liste de colonnes dans la clause ORDER BY pour générer un curseur (VC10)
TOP : sélectionnez un nombre ou une proportion spécifié de lignes à partir du début de VC10 pour générer la table VT11, et revenez à l'appelant
Remarque : étape 10, triez les lignes renvoyées à l'étape précédente en fonction de la liste de colonnes dans la clause ORDER BY et renvoyez le curseur VC10. Cette étape est la première et la seule étape pouvant être utilisée dans la liste SELECT. Cette étape est différente des autres étapes dans la mesure où elle ne renvoie pas une table valide, mais renvoie un curseur. SQL est basé sur la théorie des ensembles. L'ensemble ne pré-ordonne pas ses lignes, c'est juste la logique des membres. . Pour les collections, l'ordre des membres n'a pas d'importance. Une requête qui trie une table peut renvoyer un objet contenant des lignes organisées dans un ordre physique spécifique. Comprendre cette étape est fondamental pour comprendre correctement SQL
. renvoie une table (mais un curseur), les requêtes utilisant la clause ORDER BY ne peuvent pas être utilisées comme expressions de table. Les expressions de table incluent : les vues, les fonctions table en ligne, les sous-requêtes, les tables dérivées et une expression commune. l'application client qui attend un enregistrement physique. Par exemple, la requête de table dérivée suivante n'est pas valide et génère une erreur :


select *

from(select orderid,customerid from commandes order par orderid)

as d

La vue suivante produira également une erreur

create view my_view

as

select *

from commandes

order by orderid

En SQL, les requêtes avec des clauses ORDER BY ne sont pas autorisées dans les expressions de table, mais il existe une exception dans T-SQL (en appliquant le TOP option).

Alors rappelez-vous, ne supposez aucun ordre spécifique pour les lignes du tableau. En d’autres termes, ne spécifiez pas de clause ORDER BY sauf si vous êtes sûr de vouloir trier les lignes. Le tri a un coût et SQL Server doit effectuer une analyse d'index ordonnée ou utiliser un opérateur de tri.

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:
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 précédent:Introduction de base à UMLArticle suivant:Introduction de base à UML