Création et utilisation des vues dans MySQL
Introduction aux vues
1. Qu'est-ce qu'une vue ?
o Une vue est une table virtuelle basée sur une requête SQL. Elle ne contient pas
de données physiques, mais affiche les résultats d’une requête lorsqu’elle est
consultée.
o Utilisée pour simplifier les requêtes complexes, renforcer la sécurité, ou
présenter les données sous un format spécifique.
2. Avantages des vues
o Simplification des requêtes complexes : Les utilisateurs peuvent interagir avec
une vue comme s’il s’agissait d’une table classique.
o Sécurisation : Permet de masquer certaines colonnes ou données sensibles des
tables d'origine.
o Maintenance : Facilite les modifications sur les structures de données sans
impacter directement les utilisateurs.
Création et gestion des vues
1. Créer une vue simple
o Exemple : Créer une vue pour afficher les étudiants majeurs
CREATE VIEW etudiants_majeurs AS
SELECT id, nom, prenom, age
FROM etudiants
WHERE age >= 18;
o Consulter la vue :
SELECT * FROM etudiants_majeurs;
Créer une vue complexe avec jointures
Exemple : Afficher les étudiants avec leurs cours :
CREATE VIEW etudiants_cours AS
SELECT [Link] AS etudiant, [Link] AS cours
FROM etudiants e
INNER JOIN cours c ON [Link] = c.etudiant_id;
Utiliser la vue :
SELECT * FROM etudiants_cours;
Créer une vue avec alias
Exemple : Renommer des colonnes pour un affichage personnalisé :
CREATE VIEW rapport_etudiants AS
SELECT nom AS NomEtudiant, age AS AgeEtudiant, email AS EmailEtudiant
FROM etudiants;
Mettre à jour une vue
Pour modifier une vue existante :
CREATE OR REPLACE VIEW etudiants_majeurs AS
SELECT id, nom, age
FROM etudiants
WHERE age > 20;
Supprimer une vue
Supprimer une vue :
DROP VIEW IF EXISTS etudiants_majeurs;
Restrictions et limitations des vues
1. Non mise à jour directe
o Une vue ne peut pas toujours être modifiée directement. Pour mettre à jour une
vue, certaines conditions doivent être respectées (comme l'absence de calculs ou de
clauses GROUP BY).
o Exemple d'une vue non modifiable
CREATE VIEW vue_inmodifiable AS
SELECT id, COUNT(*) AS nombre_cours
FROM cours
GROUP BY id;
2. Vues matérialisées
Une vue classique est calculée à chaque requête, ce qui peut être coûteux pour
des requêtes complexes.
Astuce : Simuler une vue matérialisée en créant une table contenant les
résultats d'une requête :
CREATE TABLE vue_materialisee AS
SELECT id, nom, age FROM etudiants WHERE age >= 18;
Cas d'utilisation des vues
1. Simplification de l'accès aux données
o Masquer des relations complexes avec une vue. Exemple
CREATE VIEW produits_fournisseurs AS
SELECT [Link] AS produit, [Link] AS fournisseur
FROM produits p
INNER JOIN fournisseurs f ON p.fournisseur_id = [Link];
Renforcer la sécurité
Masquer des colonnes sensibles avec une vue. Exemple :
CREATE VIEW clients_public AS
SELECT id, nom, email FROM clients;
Création de rapports dynamiques
Exemple : Afficher les ventes par mois :
CREATE VIEW rapport_ventes AS
SELECT MONTH(date_vente) AS mois, SUM(montant) AS total_ventes
FROM ventes
GROUP BY mois;
1. Standardisation des requêtes
o Utiliser une vue pour imposer une structure standard aux requêtes utilisées par
les utilisateurs ou applications.
1. Standardisation des requêtes
o Utiliser une vue pour imposer une structure standard aux requêtes utilisées par les
utilisateurs ou applications.
Travaux pratiques
1. Création d'une vue sécurisée
o Créer une vue pour afficher uniquement les noms et âges des étudiants sans afficher
leurs emails.
CREATE VIEW etudiants_public AS
SELECT id, nom, prenom, age FROM etudiants;
Création d'une vue complexe pour un tableau de bord
Concevoir une vue affichant pour chaque cours le nombre d'étudiants inscrits.
Solution :
CREATE VIEW nombre_etudiants_par_cours AS
SELECT [Link] AS cours, COUNT([Link]) AS nombre_etudiants
FROM cours c
LEFT JOIN etudiants e ON [Link] = [Link]
GROUP BY [Link];
Création d'une vue pour un rapport mensuel
Afficher les ventes totales par mois et par produit.
Solution :
CREATE VIEW ventes_par_mois_produit AS
SELECT MONTH(v.date_vente) AS mois, [Link] AS produit, SUM([Link]) AS
total_ventes
FROM ventes v
INNER JOIN produits p ON v.produit_id = [Link]
GROUP BY mois, produit;
Conclusion sur les vues
Les vues dans MySQL sont un puissant outil pour :
Simplifier les interactions avec la base de données.
Améliorer la sécurité et masquer des informations sensibles.
Standardiser l’accès et les formats des données.
Optimiser le développement en cachant la complexité sous une abstraction.