Les vues
Comprendre et utiliser les vues dans une base de données relationnelle
Notions théoriques
Une vue (ou view en anglais) est une table virtuelle dans une base de données.
Une vue permet de sauvegarder une requête SQL sous forme d'objet, que l'on peut interroger comme une table classique.
Les vues sont souvent utilisées pour simplifier des requêtes complexes, sécuriser l'accès aux données ou créer des abstractions sur les données.
Les vues ne stockent pas les données elles-mêmes, mais une requête. Cela signifie qu'une vue est toujours à jour par rapport aux données des tables qu'elle interroge.
Pourquoi utiliser une vue ?
- Simplifier les requêtes complexes : une requête complexe peut être encapsulée dans une vue, et utilisée comme une table simple.
- Sécuriser l’accès aux données : une vue peut exposer uniquement certaines colonnes ou lignes d’une table, selon des règles définies.
- Réutiliser une requête : une vue peut être utilisée plusieurs fois sans avoir à réécrire la requête.
- Améliorer la lisibilité du code SQL : les vues permettent de nommer des requêtes complexes et de les rendre plus compréhensibles.
Création d'une vue
Pour créer une vue, on utilise la commande :
CREATE VIEW nom_vue AS
SELECT colonne1, colonne2
FROM table
WHERE condition;
Cela crée une vue appelée nom_vue
qui contient les résultats de la requête spécifiée.
Exemple : Vue simple
CREATE VIEW employes_actifs AS
SELECT nom, prenom, poste
FROM employes
WHERE statut = 'actif';
Cette vue permet d’obtenir uniquement les employés actifs.
Consultation d'une vue
Une fois la vue créée, on peut l’interroger comme une table :
SELECT * FROM employes_actifs;
Mise à jour d'une vue
Certaines vues peuvent être modifiables, c’est-à-dire qu’on peut faire des INSERT
, UPDATE
ou DELETE
dessus, si elles respectent certaines règles (pas de GROUP BY
, pas de DISTINCT
, etc.).
Suppression d'une vue
Pour supprimer une vue :
DROP VIEW nom_vue;
Exemple pratique
Il est possible de créer une base de données pour une entreprise avec une table
employes
, puis d’y créer une vue pour filtrer les employés actifs.
Étape 1 : Créer la base et la table
CREATE DATABASE entreprise;
USE entreprise;
CREATE TABLE employes (
id INT PRIMARY KEY AUTO_INCREMENT,
nom VARCHAR(50),
prenom VARCHAR(50),
poste VARCHAR(50),
statut VARCHAR(20)
);
Étape 2 : Insérer des données
INSERT INTO employes (nom, prenom, poste, statut) VALUES
('Durand', 'Alice', 'Développeur', 'actif'),
('Martin', 'Paul', 'Technicien', 'inactif'),
('Lemoine', 'Sophie', 'Chef de projet', 'actif');
Étape 3 : Créer une vue
CREATE VIEW vue_employes_actifs AS
SELECT nom, prenom, poste
FROM employes
WHERE statut = 'actif';
Étape 4 : Consulter la vue
SELECT * FROM vue_employes_actifs;
Résultat :
nom | prenom | poste |
---|---|---|
Durand | Alice | Développeur |
Lemoine | Sophie | Chef de projet |
Étape 5 : Supprimer la vue
DROP VIEW vue_employes_actifs;
Test de mémorisation/compréhension
TP pour réfléchir et résoudre des problèmes
Le but de ce TP est de manipuler des vues SQL dans une base de données existante.
Nous allons travailler sur une base de données appelée
bibliotheque
, contenant des tables sur des auteurs, des éditeurs, des livres, des emprunteurs et des emprunts.
Commencer par télécharger et importer le fichier SQL suivant dans MariaDB :
👉 Télécharger le fichier 'cdi.sql' - Télécharger le MCD
Étape 1 : Créer la base de données
Créer une base de données bibliotheque
et importer le fichier cdi.sql
pour créer toutes les tables et insérer les données.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 2 : Créer une vue affichant les livres de plus de 300 pages
Créer une vue livres_long
qui affiche les titres, auteurs et nombre de pages des livres ayant plus de 300 pages.
Une solution
Vous devez être connecté pour voir le contenu.
Étape 3 : Créer une vue listant les livres empruntés mais non rendus
Créer une vue livres_non_rendus
qui affiche le titre du livre, le nom de l’emprunteur et la date de prêt pour tous les emprunts dont la date de rendu est NULL.
Une solution
Vous devez être connecté pour voir le contenu.