Maison >interface Web >js tutoriel >Méthode d'affichage en ligne et sous-requête corrélée dans SQL

Méthode d'affichage en ligne et sous-requête corrélée dans SQL

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-04 14:23:021039parcourir

Inline View Method and the Correlated Subquery in SQL

Plongeons dans le flux d'exécution des deux méthodes : la méthode de vue en ligne et la méthode de sous-requête corrélée. Comprendre l'exécution étape par étape de ces requêtes aidera à clarifier comment SQL traite chaque scénario pour obtenir le résultat souhaité.

  1. Flux d'exécution de la méthode d'affichage en ligne

La méthode Inline View utilise une sous-requête dans la clause FROM pour créer un jeu de résultats temporaire (vue en ligne), puis le traite dans la requête externe.

Requête :

SELECT DepartmentId, MAX(Salary) AS HighestSalary
DE (
SELECT DepartmentId, Salaire
DE Employé
) COMME InlineView
GROUP BY DepartmentId;

Étapes d'exécution :

  1. Exécution de requête interne (vue en ligne) :

La requête interne (SELECT DepartmentId, Salary FROM Employee) est exécutée en premier.

Il sélectionne les colonnes DepartmentId et Salary de la table Employee.

Cette étape crée essentiellement un ensemble de résultats temporaires (vue en ligne) qui inclut toutes les lignes de la table Employee mais uniquement avec les colonnes DepartmentId et Salary.

Exemple de résultat de la requête interne :

  1. Exécution de requêtes externes (agrégation et regroupement) :

Une fois la vue en ligne (ensemble de résultats temporaire) créée, la requête externe prend cet ensemble de résultats et effectue l'agrégation à l'aide de la fonction MAX(Salary).

Le GROUP BY DepartmentId garantit que le salaire maximum est calculé pour chaque département.

La requête externe parcourt les lignes de la vue en ligne et regroupe les lignes en fonction de DepartmentId. Ensuite, il calcule le salaire maximum pour chaque groupe.

  1. Renvoyer le résultat :

La requête renvoie le salaire le plus élevé pour chaque département.

Résultat final :

Résumé du flux d'exécution :

  1. Exécutez la requête interne pour créer la vue en ligne.

  2. La requête externe agrège (en utilisant MAX) et regroupe les résultats par DepartmentId.

  3. Renvoyer le résultat final.


  1. Flux d'exécution de la méthode de sous-requête corrélée

Dans la méthode de sous-requête corrélée, la sous-requête interne est exécutée pour chaque ligne de la requête externe, ce qui la rend plus dynamique mais potentiellement plus lente que la méthode d'affichage en ligne.

Requête :

SELECT DepartmentId, EmployeeId, Salary AS HighestSalary
DE Employé e
OÙ Salaire = (
SELECT MAX (Salaire)
DE Employé
OÙ DepartmentId = e.DepartmentId
);

Étapes d'exécution :

  1. Exécution de requête externe (traitement ligne par ligne) :

La requête externe commence par la lecture de chaque ligne de la table Employee.

Pour chaque ligne de la table Employee, la requête récupère DepartmentId, EmployeeId et Salary.

Exemple de traitement ligne par ligne à partir de la requête externe :

  1. Exécution de requête interne (sous-requête corrélée) :

Pour chaque ligne de la requête externe, la requête interne (SELECT MAX(Salary) FROM Employee WHERE DepartmentId = e.DepartmentId) est exécutée.

La sous-requête calcule le salaire maximum dans le département correspondant au DepartmentId de la ligne actuelle.

La corrélation entre la requête externe et la sous-requête se fait via la condition DepartmentId (WHERE DepartmentId = e.DepartmentId).

Par exemple :

Pour la ligne avec EmployeeId = 1, la sous-requête calcule le salaire maximum pour DepartmentId = 101, soit 6 000.

Pour la ligne avec EmployeeId = 3, la sous-requête calcule le salaire maximum pour DepartmentId = 102, soit 7 500.

Exemple d'exécution de sous-requête pour chaque ligne :

  1. Filtrage des lignes :

Après avoir calculé le salaire maximum pour le DepartmentId correspondant, la requête externe compare le salaire de la ligne actuelle avec le salaire maximum renvoyé par la sous-requête.

Si le Salaire correspond au salaire maximum du département, la ligne est conservée.

Les lignes qui ne correspondent pas sont filtrées.

Par exemple :

La ligne pour EmployeeId = 2 sera conservée car son salaire de 6000 correspond au salaire maximum du département 101.

La ligne EmployeeId = 1 sera filtrée car son salaire de 5000 est inférieur au salaire maximum du département 101.

  1. Renvoyer le résultat :

La requête externe renvoie les lignes où le salaire de l'employé correspond au salaire maximum de son service.

Résultat final :

Résumé du flux d'exécution :

  1. Pour chaque ligne de la requête externe, exécutez la sous-requête corrélée interne.

  2. La sous-requête calcule le salaire maximum pour le DepartmentId actuel.

  3. Comparez le salaire de l'employé avec le résultat de la sous-requête.

  4. Filtrer et renvoyer les lignes où le salaire de l'employé correspond au maximum de son service.


Différences clés dans le flux d'exécution :


Considérations relatives aux performances :

La méthode d'affichage en ligne est plus efficace lorsque vous êtes uniquement intéressé par le salaire le plus élevé de chaque département, sans avoir besoin d'informations détaillées sur les employés. Il effectue l'agrégation en un seul passage sur les données.

La méthode de sous-requête corrélée peut être plus lente pour les grands ensembles de données, car elle exécute la sous-requête pour chaque ligne de la requête externe, ce qui peut conduire à de nombreux calculs redondants. Cependant, il vous permet de récupérer à la fois le salaire le plus élevé du service et des informations détaillées sur les employés (par exemple, EmployeeId, Name).

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