pdf - e-book - archive

1.6  Vues

1.6.1  Définition

Une vue est une table contenant des données calculées sur celle d’une autre table. Les données d’une vue sont tout le temps à jour. Si vous modifiez les données d’une des tables sur lesquelles est calculée la vue, alors les modifications sont automatiquement répercutées sur la vue.

1.6.2  Syntaxe

Appréciez la simplicité de la syntaxe :

CREATE VIEW <nom_vue> AS <requete>

1.6.3  Application

Par exemple, la requête suivante met en correpondance les noms des produits avec le nombre de fournisseurs qui le proposent :

SELECT nomprod, COUNT(numfou) AS NB_FOURNISSEURS
FROM PRODUIT P 
 LEFT OUTER JOIN PROPOSER PR 
        ON P.numprod = PR.numprod
GROUP BY nomprod
ORDER BY COUNT(numfou);

nomprod NB_FOURNISSEURS
Déodorant fraîcheur 96 heures 0
Tube de dentifrice 1
Flacon de lotion anti-escarres 1
Bocal de cornichons 2

Ce type de requête sera explicité dans un cours ultérieur. Pour le moment, notez juste que les outils dont vous disposez pour le moment ne vous permettront pas de formuler une requête affichant les noms des produits n’ayant aucun fournisseur. Créons une vue pour ne pas avoir à se farcir la requête chaque fois que nous aurons besoin de ces informations :

CREATE VIEW NB_FOURNISSEURS_PAR_PRODUIT AS
SELECT nomprod, COUNT(numfou) AS NB_FOURNISSEURS
FROM PRODUIT P 
 LEFT OUTER JOIN PROPOSER PR 
        ON P.numprod = PR.numprod
GROUP BY nomprod
ORDER BY COUNT(numfou);


Une fois créée, on peut interroger une vue de la même façon qu’on interroge une table :

SELECT *
FROM NB_FOURNISSEURS_PAR_PRODUIT;

nomprod NB_FOURNISSEURS
Déodorant fraîcheur 96 heures 0
Tube de dentifrice 1
Flacon de lotion anti-escarres 1
Bocal de cornichons 2

Notez que toute modification dans la table PROPOSER ou PRODUIT sera immédiatement répercutée sur la vue.

INSERT INTO PROPOSER VALUES (3, 4, 9);
SELECT *
FROM NB_FOURNISSEURS_PAR_PRODUIT;

nomprod NB_FOURNISSEURS
Tube de dentifrice 1
Flacon de lotion anti-escarres 1
Déodorant fraîcheur 96 heures 1
Bocal de cornichons 2

INSERT INTO PROPOSER VALUES (3, 4, 9);
SELECT *
FROM NB_FOURNISSEURS_PAR_PRODUIT;


Maintenant, nous souhaitons voir s’afficher, pour tout i, le nombre de produits proposés par exactement i fournisseurs.

SELECT CONCAT ('Il y a ', COUNT(*), ' produit(s) qui est/sont proposé(s) par ', 
 NB_FOURNISSEURS, ' fournisseur(s).') 
        AS NOMBRE_DE_FOURNISSEURS 
FROM NB_FOURNISSEURS_PAR_PRODUIT 
GROUP BY NB_FOURNISSEURS
ORDER BY NB_FOURNISSEURS;

NOMBRE_DE_FOURNISSEURS
Il y a 3 produit(s) qui est/sont proposé(s) par 1 fournisseur(s).
Il y a 1 produit(s) qui est/sont proposé(s) par 2 fournisseur(s).

1.6.4  Suppression

On supprime une vue avec l’instruction suivante :

DROP VIEW <nom_vue>;