Introduction
Vous voulez restreindre l’accès à certains de vos objets ? Vous voulez interroger de façons complexes vos objets mais vous ne vous sentez pas l’âme de ré-écrire plusieurs fois une même requête ?
Vous avez donc la possibilité d’utiliser un système de vues. Cet article va vous permettre de l’appréhender au mieux.
Les vues : Quésako ?
Attention, une vue n’est pas une table mais elle a la particularité de se comporter tout comme si elle en était une. Une vue est un objet permanent qui est, le plus souvent, uniquement accessible en lecture seule. Elle possède plusieurs fonctions qui peuvent se montrer très pratiques. En effet, une Vue permet :
- De restreindre l’accès à notre Base de Données,
- De rendre l’utilisation de requêtes complexes plus simple,
- De présenter une même donnée de plusieurs façons.
Il existe deux types principaux de vues : les vues Simples et les vues Complexes.
Les premières ne permettent d’accéder qu’à une seule table en même temps, ne peuvent contenir de fonctions mais sont compatibles avec les opérations DML (INSERT, UPDATE et DELETE). Quant aux autres, elles ont accès à plusieurs tables, peuvent contenir des fonctions de groupes mais ne permettent pas tout le temps l’utilisation d’opérations DML.
Création d’une vue Simple
La syntaxe pour créer une vue comprends plusieurs parties importantes. Tout d’abord, nous devons utiliser la clause CREATE OR REPLACE VIEW. Cette clause prend en paramètre le nom que vous voulais donner à votre vue. Si la vue existe déjà, elle sera tout simplement remplacée par la nouvelle vue que vous êtes en train de créer. Dans le cas contraire, la vue sera créée normalement.
Le reste de la syntaxe contiendra la requête principale qui caractérisera la vue.
Voila donc la syntaxe pour la création d’une vue :
CREATE OR REPLACE VIEW nom_de_la_vue AS
requête_qui_caractérise_la_vue
[WITH CHECK OPTION [CONSTRAINT nom_de_la_contrainte]]
[WITH READ ONLY [CONSTRAINT nom_de_la_contrainte]];
L’option WITH CHECK OPTION [CONSTRAINT nom_de_la_contrainte]] permet de vérifier si une contrainte a été spécifié lors de la modification des données. Quant à l’option [WITH READ ONLY [CONSTRAINT nom_de_la_contrainte]], elle permet de spécifier le fait que les opérations DML soient autorisées ou pas sur la vue.
Par exemple, nous possédons une table EMPLOYEES avec différentes colonnes dont les colonnes ID et MONTH_SALARY. Nous allons créer une vue BASIC_INFO qui permettra d’afficher l’ID et le Salaire Annuel d’un employé. Voici la syntaxe a utilisée :
CREATE OR REPLACE VIEW BASIC_INFO AS
SELECT ID, MONTH_SALARY*12 AS Salaire_Annuel
FROM EMPLOYEES;
Si maintenant, nous voulons récupérer toutes les lignes de cette vues, voila la syntaxe adéquate :
SELECT *
FROM BASIC_INFO;
Création d’une vue Complexe
La syntaxe de création d’une vue Complexe ne diffère pas de celle de la création d’une vue Simple. C’est pour cela que nous allons passer directement à l’exemple.
Imaginons que nous voudrions créer une vue « SALAIRE_EMPLOYE » de quatre colonnes (name pour le nom, minsal pour le salaire minimum, maxsal pour le salaire maximum et avgsal pour la moyenne de tous les salaires) et qui requête dans deux tables bien différentes (la table departments et la table EMPLOYEES).
Voila la syntaxe qui nous intéresse :
CREATE OR REPLACE VIEW SALAIRE_EMPLOYE
(name, minsal, maxsal, avgsal) AS
SELECT d.department_name, MIN(e.salary),
MAX(e.salary),AVG(e.salary)
FROM EMPLOYEES e JOIN departments d
ON (e.department_id = d.department_id)
GROUP BY d.department_name;
Vu que la colonne department_id existe dans les deux tables, nous devons bien préciser la table que nous voulons utiliser. Lorsque que nous utilisons des colonnes de la table EMPLOYEES, nous utilisons le préfixe e. alors que lorsque nous utilisons la table departments, c’est le préfixe d. qui est présent.
Modifier une vue
Dans le cas où vous voudriez modifier une vue, la syntaxe est la même que pour la création d’une vue. En effet, comme nous l’avons vu plus haut, la clause CREATE OR REPLACE VIEW remplacera la vue si elle existait déjà auparavant ou la créera dans le cas contraire. Donc dans le cas où nous voudrions, par exemple, afficher le salaire d’un employé par semestre, et non plus par an, voila la syntaxe a utilisée :
CREATE OR REPLACE VIEW BASIC_INFO AS
SELECT ID, MONTH_SALARY*6 AS Salaire_Semestre
FROM EMPLOYEES;
Connaître la syntaxe de création d’une vue
Il peut vous arriver qu’au bout d’un certain temps, vous n’avez plus le souvenir de la commande qui a été utilisée pour la création d’une vue en particulier. Pour palier à ce problème, il existe la clause SHOW CREATE VIEW dont la syntaxe est :
SHOW CREATE VIEW nom_de_la_vue;
Donc, dans le cas où j’utiliserai cette clause sur notre Vue BASIC_INFO, j’aurai la dernière syntaxe utilisée pour créer ou modifier cette vue.
Supprimer une vue
Il est important de savoir que lorsque vous supprimez une vue, les données contenues dans celle-ci ne sont en aucun cas supprimées. En effet, une vue n’est pas une table : c’est juste un moyen d’accéder plus rapidement ou de restreindre l’accès à des données.
La syntaxe pour supprimer une vue est très simple, il vous suffit d’utiliser la clause DROP VIEW :
DROP VIEW [IF EXISTS] nom_de_la_vue;
L’option [IF EXISTS] permet d’éviter l’affichage d’un message d’erreur si l’on essaie de supprimer une Vue qui n’existe pas.
Reprenons notre vue BASIC_INFO créée pour les besoins de cet article, si nous souhaitons la supprimer :
DROP VIEW IF EXISTS BASIC_INFO;
Conclusion
Voila, ce billet arrive maintenant à son terme. Dans celui-ci, nous avons appris à gérer (Créer/Modifier/Supprimer) une vue et nous avons compris la façon de les utiliser.
Si vous avez la moindre question ou remarque, n’hésiter pas. Je serai ravi d’y répondre.