English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Dans ce tutoriel, vous apprendrez à créer, mettre à jour et supprimer des vues en utilisant SQL.
Une vue est une table virtuelle, dont la définition est stockée dans la base de données. Cependant, contrairement aux tables, une vue ne contient pas de données. Au lieu de cela, elle offre une méthode pour stocker des requêtes complexes couramment utilisées dans la base de données. Cependant, vous pouvez utiliserRequête SELECT SQLPour accéder aux données de la vue, comme pour une table ou une table de base ordinaire.
Les vues peuvent également être utilisées comme mécanisme de sécurité, en permettant aux utilisateurs d'accéder aux données via des vues plutôt que d'accorder l'accès complet à la table de base.
Utiliser l'expression CREATE VIEW pour créer une vue.
CREATE VIEW view_name AS select_statement;
Pour comprendre cela clairement, regardons ce qui suitemployeesetdepartments表。
+--------+--------------+--------+---------+ | emp_id | emp_name | salary | dept_id | +--------+--------------+--------+---------+ | 1 | Ethan Hunt | 5000 | 4 | | 2 | Tony Montana | 6500 | 1 | | 3 | Sarah Connor | 8000 | 5 | | 4 | Rick Deckard | 7200 | 3 | | 5 | Martin Blank | 5600 | NULL | +--------+--------------+--------+---------+ | +---------+------------------+ | dept_id | dept_name | +---------+------------------+ | 1 | Administration | | 2 | Service client | | 3 | Finance | | 4 | Ressources humaines | | 5 | Ventes | +---------+------------------+ | |
Table : employees | Table : departments |
Supposons que vous vouliez récupérer l'ID et le nom des employés ainsi que le nom de leur département, alors vous devez exécuterJointure gaucheOpérations, comme suit :
SELECT t1.emp_id, t1.emp_name, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
Une fois que vous avez exécuté la requête ci-dessus, vous obtiendrez le résultat suivant :
+--------+--------------+-----------------+ | emp_id | emp_name | dept_name | +--------+--------------+-----------------+ | 1 | Ethan Hunt | Ressources humaines | | 2 | Tony Montana | Administration | | 3 | Sarah Connor | Ventes | | 4 | Rick Deckard | Finance | | 5 | Martin Blank | NULL | +--------+--------------+-----------------+
Mais, chaque fois que vous devez accéder à cet enregistrement, vous devez ressaisir l'ensemble de la requête. Si vous effectuez souvent de telles opérations, cela deviendra très ennuyeux et irritant.
Dans ce cas, vous pouvez créer une vue pour rendre les résultats de la requête plus faciles d'accès, comme suit :
CREATE VIEW emp_dept_view AS SELECT t1.emp_id, t1.emp_name, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
Maintenant, vous pouvez utiliser la vue emp_dept_view pour accéder aux mêmes enregistrements, comme suit :
SELECT * FROM emp_dept_view;
Comme vous le voyez, vous pouvez économiser beaucoup de temps et d'énergie sur la vue.
Astuce :La vue affiche toujours les données les plus récentes ! Chaque fois que vous consultez la vue, le moteur de base de données exécute la requête SQL associée à la vue et recrée les données.
Remarque :Dans MySQL, vous pouvez également spécifier dans la définition de la vueORDER BYPréfixe. Cependant, dans SQL Server, la définition de la vue ne peut pas contenir la clause ORDER BY, sauf siSELECTLa liste des expressions de l'instruction SELECT également contientTOPPréfixe.
Dans MySQL, pour mettre à jour ou remplacer une vue existante, vous pouvez supprimer la vue et créer une nouvelle vue, ou utiliser simplement la clause OR REPLACE de l'instruction CREATE VIEW, comme suit :
CREATE OR REPLACE VIEW view_name AS select_statement;
Remarque :Lorsque l'on utilise la clause OR REPLACE dans une instruction CREATE VIEW, si la vue n'existe pas, elle crée une nouvelle vue, sinon elle remplace la vue existante.
Les instructions SQL suivantes remplaceront ou modifieront la vue existanteemp_dept_viewLa définition de la vue, en ajoutant une nouvelle colonne salary.
-- La syntaxe de la base de données MySQL CREATE OR REPLACE VIEW emp_dept_view AS SELECT t1.emp_id, t1.emp_name, t1.salary, t2.dept_name FROM employees AS t1 LEFT JOIN departments AS t2 ON t1.dept_id = t2.dept_id;
Après avoir mis à jour la vue, si vous exécutez la suivante :
SELECT * FROM emp_dept_view ORDER BY emp_id;
Vous verrez une autre colonne dans la sortie des résultatssalarycomme indiqué ci-dessous :
+--------+--------------+--------+-----------------+ | emp_id | emp_name | salary | dept_name | +--------+--------------+--------+-----------------+ | 1 | Ethan Hunt | 5000 | Human Resources | | 2 | Tony Montana | 6500 | Administration | | 3 | Sarah Connor | 8000 | Sales | | 4 | Rick Deckard | 7200 | Finance | | 5 | Martin Blank | 5600 | NULL | +--------+--------------+--------+-----------------+
Remarque : SQL Server ne prend pas en charge la clause OR REPLACE, par conséquent, pour remplacer une vue, vous pouvez directement supprimer cette vue et créer une nouvelle vue à partir de stretch.
Théoriquement, à l'exception deSELECTEn dehors des instructions INSERT, vous pouvez également exécuterINSERT,UPDATEetDELETECependant, non toutes les vues sont mises à jour, c'est-à-dire capables de modifier les données de la table source de base. Il y a des restrictions sur la mise à jour.
Généralement, si une vue contient l'un des éléments suivants, elle n'est pas mise à jour :
DISTINCT, GROUP BY ou la clause HAVING.
Les fonctions agrégées, telles que AVG(), COUNT(), SUM(), MIN(), MAX() et autres.
Les opérateurs UNION, UNION ALL, CROSS JOIN, EXCEPT ou INTERSECT.
La sous-requête dans la clause WHERE fait référence à la table de la clause FROM.
Si une vue répond à ces conditions, elle peut être utilisée pour modifier la table source.
La phrase suivante mettra à jour le salaire des employés dont l'emp_id est1le salaire des employés (salary).
UPDATE emp_dept_view SET salary = '6000' WHERE emp_id = 1;
Remarque :Pour réaliser l'insertabilité, cette vue doit contenir toutes les colonnes sans valeur par défaut de la table de base. De même, pour réaliser l'upgradabilité, chaque colonne modifiable de la vue doit correspondre à la colonne modifiable de la table source.
De même, si une vue n'est plus nécessaire, vous pouvez l'effacer de la base de données en utilisant la phrase DROP VIEW, comme dans la syntaxe suivante :
DROP VIEW view_name;
Les commandes suivantes supprimeront la vue à partir de la base de donnéesemp_dept_view。
DROP VIEW emp_dept_view;