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.
Appréciez la simplicité de la syntaxe :
CREATE VIEW <nom_vue> AS <requete>
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).
On supprime une vue avec l’instruction suivante :
DROP VIEW <nom_vue>;