SQL Vue En Ligne (Inline View)



SQL > SQL Avancé > Vue En Ligne 

Une vue en ligne (inline view) est une instruction SELECT dans la clause FROM. Une vue est une table virtuelle qui a les caractéristiques d'une table mais qui ne contient aucune donnée réelle. Dans une construction de vue en ligne, au lieu de spécifier le ou les noms de table après le mot-clé FROM, la source des données provient en réalité de la vue en ligne.

Une vue en ligne est parfois appelée table dérivée. Ces deux termes sont utilisés de manière interchangeable.

Syntaxe

La syntaxe pour une vue en ligne est la suivante:

SELECT "Nom_de_Colonne" FROM (Vue_en_Ligne);

Exemple

Supposons que nous ayons deux tables: la première table est User_Address, qui associe chaque utilisateur à un code postal; la deuxième table est User_Score, qui enregistre toutes les notes de chaque utilisateur. La question est, comment écrire une requête SQL pour trouver le nombre d'utilisateurs ayant obtenu plus de 200 points pour chaque code postal?

Sans utiliser de vue en ligne, nous pouvons accomplir cela en deux étapes :

Requête 1

CREATE TABLE User_Higher_Than_200
SELECT User_ID, SUM(Score) FROM User_Score
GROUP BY User_ID
HAVING SUM(Score) > 200;

Requête 2

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM User_Higher_Than_200 a1, User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

Dans le code ci-dessus, nous avons introduit une table temporaire, User_Higher_Than_200, pour stocker la liste des utilisateurs ayant obtenu plus de 200 points. User_Higher_Than_200 est ensuite utilisée pour faire une jointure avec la table User_Address afin d'obtenir le résultat final.

Nous pouvons simplifier le SQL ci-dessus en utilisant la construction de vue en ligne comme suit:

Requête 3

SELECT a2.ZIP_CODE, COUNT(a1.User_ID)
FROM
(SELECT User_ID, SUM(Score) FROM User_Score GROUP BY User_ID HAVING SUM(Score) > 200) a1,
User_Address a2
WHERE a1.User_ID = a2.User_ID
GROUP BY a2.ZIP_CODE;

Le code en rouge représente une vue en ligne. Il y a deux avantages à utiliser une vue en ligne ici:

1. Nous n'avons pas besoin de créer la table temporaire. Cela évite que la base de données ait trop d'objets, ce qui est une bonne chose car chaque objet supplémentaire dans la base de données coûte des ressources à gérer.

2. Nous pouvons utiliser une seule requête SQL pour accomplir ce que nous voulons.

Remarquez que nous traitons la vue en ligne exactement de la même manière que nous traitons une table. En comparant la Requête 2 et la Requête 3, nous voyons que la seule différence est que nous remplaçons le nom de la table temporaire dans la Requête 2 par l'instruction de vue en ligne dans la Requête 3. Tout le reste reste inchangé.

SQL INTERSECT >>

Cette page a été mise à jour pour la dernière fois le 27/12/2023


Copyright © 2024   1keydata.com   Tous droits réservés