Les vues¶
Définition et utilité¶
Une vue est une table virtuelle créée à partir du résultat d’une requête SQL. Elle ne contient pas de données sur le disque, mais affiche les données de tables de la base de données.
Les vues sont utiles pour plusieurs raisons :
- Simplifier l'accès aux données : elles permettent de masquer la complexité des jointures ou des calculs.
- Sécurité : elles permettent de restreindre l'accès à certaines colonnes ou lignes sensibles.
- Requêtes réutilisables : elles facilitent l'écriture de requêtes complexes en les encapsulant dans une vue.
Créer une vue¶
La syntaxe de base pour créer une vue est :
CREATE [OR REPLACE] VIEW nom_vue AS
SELECT ...
- CREATE VIEW : crée l'objet de type vue dans la base de données.
- OR REPLACE (facultatif) : permet de recréer la vue si elle existe déjà.
- nom_vue (obligatoire) : le nom donné à la vue.
- AS SELECT ... : la requête SQL qui définit le contenu de la vue.
Exemple simple :
-- Vue simple qui affiche les clients et leur ville
CREATE VIEW vue_clients_villes AS
SELECT nom, prenom, ville
FROM clients;
Conseils et bonnes pratiques
- Donnez des noms explicites aux vues en utilisant le préfixe "vue_".
- Évitez de créer des vues trop complexes qui impactent la performance.
Quelques exemples d'utilité :
Gardons en tête que la création d'une vue a toujours un premier objectif : simplifier les extractions fréquentes.
- Masquer des informations sensibles
CREATE VIEW vue_employes_sans_salaire AS
SELECT id, nom, prenom, departement
FROM employes;
✔️ Avec cette vue, Les utilisateurs peuvent accéder aux informations des employés sans voir les salaires.
- Simplifier les requêtes avec jointures
CREATE VIEW vue_commandes_clients AS
SELECT nomClient, prenomClient, idCommande, dateCommande, montantCommande
FROM clients
JOIN commandes
ON idClient = idClientCommande;
On peut maintenant consulter les commandes avec le nom du client sans réécrire la jointure à chaque fois.
- Calculer des agrégats fréquemment utilisés
CREATE VIEW vue_ventes_par_mois AS
SELECT EXTRACT(MONTH FROM dateCommande) AS mois_commande,
SUM(montant) AS total_ventes
FROM commandes
GROUP BY EXTRACT(MONTH FROM dateCommande);
Cette vue fournit un résumé des ventes par mois, ce qui peut être utile pour un magasin.
- Créer des informations filtrées
CREATE VIEW vue_clients_quebec AS
SELECT *
FROM clients
WHERE province = 'QC';
Seuls les clients du Québec sont visibles via cette vue.
Utiliser une vue¶
Une fois créée, la vue se comporte comme une table pour la lecture.
On peut filtrer, trier ou joindre les données d'une vue comme s’il s’agissait d’une table normale.
On peut interroger la vue avec un SELECT :
--Extraire tout le contenu de la vue
SELECT * FROM vue_clients_villes;
--Extraire les clients de la ville de Québec
SELECT nom FROM vue_clients_villes WHERE ville = 'Québec';
À noter que :
- Une vue ne retourne que le contenu dont elle a accès via le SELECT associé.
- Une vue ne contient pas d'information qui n'existe pas dans les tables
On peut aussi utiliser une vue dans un SELECT complexe :
SELECT nom, prenom, dateCommande, montantCommande
FROM vue_clients_villes
JOIN commandes ON vue_clients_villes.idClient = idClientCommande
WHERE ville = 'Québec';
Mettre à jour une vue¶
Certaines vues permettent de modifier les données des tables avec INSERT, UPDATE ou DELETE, mais sous certaines conditions :
| Instruction | Conditions |
|---|---|
| INSERT | * La vue n'a aucune jointure de table * La vue n'a aucune donnée groupée ni d'agrégat * Les lignes insérées répondent aux contraintes de la table d'origine * Les lignes insérées possèdent autant de valeurs que de champs dans la vue |
| UPDATE | * La vue n'a aucune donnée groupée ni d'agrégat * Les données à mettre à jour font partie des enregistrements de la vue * Seulement sur les champs de la table principale (pas sur une table jointe) |
| DELETE | * La vue n'a aucune donnée groupée ni d'agrégat * Les données à supprimer font partie des enregistrements de la vue |
Exemple :
Si on a cette vue simple :
CREATE VIEW vue_clients_quebec AS
SELECT id_client, nom, prenom, ville
FROM clients
WHERE ville = 'Québec';
On peut faire un UPDATE via la vue :
-- Mettre à jour la ville de tous les clients de Québec
UPDATE vue_clients_quebec
SET ville = 'Québec City';
Oracle va répercuter la modification dans la table clients.
Supprimer une vue¶
Pour supprimer une vue qui n’est plus nécessaire, on utilise l'instruction DROP comme on le ferait pour une table :
DROP VIEW nom_vue;
Ceci supprime l'objet vue de la base de données, mais conserve les tables.