1. Définition d'une vue SQL
Une vue, également appelée table virtuelle, est une représentation logique d’un ensemble de données. Elle repose sur une requête SELECT stockée dans la base, à laquelle on donne un nom. La vue elle‑même ne contient aucune donnée physique ; elle conserve uniquement la définition de la requête. Lorsque les données des tables sous‑jacentes (les tables de base) changent, les données visibles à travers la vue se mettent automatiquement à jour.
Caractéristiques principales :
- Virtualité : la vue n’occupe qu’un espace négligeable car elle ne stocke que la requête, pas les données.
- Indépendance des données : elle offre une couche d’abstraction qui protège les applications des modifications structurelles des tables de base.
- Sécurité : en exposant seulement certaines colonnes ou lignes, la vue limite l’accès aux données sensibles.
- Simplification des requêtes complexes : une vue encapsule des jointures ou des agrégations, rendant l’interrogation plus simple pour l’utilisateur final.
Relation entre une vue et ses tables de base :
- Les modifications apportées via une vue (INSERT, UPDATE, DELETE) se répercutent sur les tables de base, sous réserve des restrictions de mise à jour.
- Inversement, toute modification des tables de base est immédiatement reflétée dans la vue.
- Attention : une vue n’est pas toujours modifiable. Par exemple, une vue contenant
DISTINCT,GROUP BY, des fonctions d’agrégation ou des sous‑requêtes n’est généralement pas mise à jour.
2. Création et utilisation d’une vue
2.1. Préparation de l’environnement
Téléchargez le fichier hr_data.sql depuis un dépôt fiable. Ce fichier contient les instructions SQL nécessaires pour recréer une base de données de démonstration. Inspectez son contenu :
vim hr_data.sql
Importez‑le dans MySQL en utilisant la commande source :
source /chemin/absolu/vers/hr_data.sql;
Vérifiez que la base hr a été créée :
SHOW DATABASES;
USE hr;
SHOW TABLES;
Les tables disponibles sont :
employees(employés)departments(départements)salaries(échelons de salaire)
Examinez leur structure et leur contenu :
DESC employees;
SELECT * FROM employees;
DESC departments;
SELECT * FROM departments;
DESC salaries;
SELECT * FROM salaries;
2.2. Créer une vue
Syntaxe :
CREATE VIEW nom_vue AS requête_SELECT;
Explication : la SELECT est exécutée immédiatement ; le jeu de résultats obtenu sert de définisseur pour la vue.
Imaginons que vous deviez fréquemment lister chaque employé avec le nom de son département. Sans vue, vous écrivez :
SELECT e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
Pour éviter de répéter cette jointuer, créez une vue :
CREATE VIEW v_employe_depart AS
SELECT e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;
Vous pouvez alors interroger simplement la vue :
SELECT * FROM v_employe_depart;
3. Influence réciproque entre vue et tables de base
3.1. Modifier la vue impacte la table de base
Changez le nom d’un employé via la vue :
UPDATE v_employe_depart SET last_name = 'king' WHERE last_name = 'KING';
Vérifiez dans la table employees :
SELECT * FROM employees WHERE last_name = 'king';
La modification a bien été propagée.
3.2. Modifier la table de base impacte la vue
Renommez un département :
UPDATE departments SET department_name = 'Ressources Humaines' WHERE department_name = 'Human Resources';
Interrogez la vue :
SELECT * FROM v_employe_depart WHERE department_name = 'Ressources Humaines';
Le changement apparaît dans la vue.
4. Supprimer une vue
La commande DROP VIEW spuprime la vue sans affecter les tables de base :
DROP VIEW IF EXISTS v_employe_depart;
Après suppression, la vue n’est plus accessible via SHOW TABLES.
5. Remarques importantes sur les vues
- Nom unique : une vue ne peut pas porter le même nom qu’une autre vue ou qu’une table dans le même schéma.
- Nombre illimité : en théorie, vous pouvez créer autant de vues que vous le souhaitez, mais tenez compte des limites de performance.
- Index et déclencheurs : il est impossible de définir un index ou un déclencheur (trigger) sur une vue, car elle ne stocke pas physiquement les données.
- Sécurité : accordez des privilèges d’accès sur la vue pour limiter ce qu’un utilisateur peut voir ou modifier.
- Ordre dans la vue : bien qu’il soit syntaxiquement possible d’inclure
ORDER BYdans la définition de la vue, cela est déconseillé : l’ordre est souvent redéfini par la requête finale. Préférez trier au moment de l’interrogation. - Utilisation comme une table : une vue peut être employée dans toute opération de requête (jointures, sous‑requêtes) exactement comme une table ordinaire.