Aller au contenu

VIEW

En SQL, on peut enregistrer une requête qu'on utilise régulièrement et la réutiliser facilement dans d'autres requêtes. Pour ce faire on crée ce qu'on appelle une VIEW.

Avantages de créer une VIEW

  • Simplification des requêtes
  • Sécuriser des données sensibles
  • Faciliter la maintenance

Il faut se rappeler qu'une view n'est pas une façon d'optimiser nos requêtes. Quand une view est utilisé dans une requête, la requête de la view est exécuté en premier lieu et ensuite la requête principale. On pourrait voir ça comme une sous-requête qui est plus simple à utiliser pour le programmeur.

Créer une VIEW

Pour créer une view, on utilise la déclaration CREATE VIEW

CREATE [OR REPLACE] VIEW [nom_bd.]nom_view [(liste_colonne)]
AS
requête_select;
  • Le nom de la view doit être unique dans la base de données, aucune autre view ni table ne doit avoir le même nom.
  • Si on ajoute l'option OR REPLACE et que la view existe déjà, la nouvelle view va remplacer l'ancienne, sinon ça n'aura aucun effet.
  • On peut définir optionnellement les noms de colonnes de la view, sinon les noms de colonnes seront celle de la requête select.
  • Pour terminer, on ajoute une requête select. La requête peut interroger des tables et d'autres views.

Exemple

CREATE OR REPLACE VIEW etudiant_informatique (nom_complet, da)
AS 
    SELECT CONCAT(e.nom, ', ', e.prenom),
           e.da
    FROM etudiant e
        INNER JOIN etudiant_concentration ec ON ec.etudiant_id = e.id
            INNER JOIN concentration c ON c.id = ec.concentration
    WHERE c.description = "Technique informatique";

Ensuite pour se servir de la view, on n'a qu'à utiliser la view comme une table :

SELECT * 
FROM etudiant_informatique
ORDER BY da;

Modifier une VIEW

Pour modifier une view, on peut utiliser la déclaration CREATE OR REPLACE VIEW ou bien ALTER VIEW. Les deux méthodes sont similaire dans leur résultat. On a déjà vu la syntaxe du CREATE OR REPLACE VIEW. Voici un exemple pour le ALTER VIEW :

ALTER VIEW nom_view [(liste_colonne)]
AS requête_select;;

On ne peut pas modifier le nom de la view par ces méthodes, pour se faire, on doit utiliser la déclaration RENAME TABLE

Renommer une VIEW

RENAME TABLE nom_view_original 
TO nouveau_nom_view;

Supprimer une VIEW

DROP VIEW [IF EXISTS] nom_view;

Source