La commande CREATE VIEW permet de créer une vue, soit une table virtuelle produite par une requête de sélection.

Une vue contient donc un jeu d'enregistrements constitué par une requête SELECT prédéfinie appliquée à une ou plusieurs tables d'une base de données.

A la différence d'une table, une vue ne consomme pas d'espace de stockage physique mais conserve des propriétés semblables dans la mesure ou toutes les opérations de sélection, d'insertion, de mise à jour ou encore de suppression de lignes de données avec néanmoins quelques restrictions comme l'interdiction de modification d'une vue multitables.

Les vues peuvent servir à recueillir des données régulièrement consultées et mises à jour.

Les vues sont souvent employées pour des raisons de sécurité. A l'aide de cet outil, il devient possible de ne montrer qu'une partie des données d'une table et ainsi, cacher des informations confidentielles.

Le créateur de la vue en détient la propriété et les privilèges afférents à l'instar d'une table. En conséquence, le propriétaire de la vue peut accorder des droits aux différents utilisateurs de la base de données.

Subséquemment à sa création, une vue peut être utilisée de la même façon qu'une table. Des requêtes de sélection ou de manipulation de données peuvent être appliquées à la vue.

Création d'une vue sous SQL Server
CREATE VIEW [ nom_base . ] [ propriétaire . ] nom_vue
[ ( nom_colonne [ ,...n ] ) ] 
[ WITH { ENCRYPTION | SCHEMABINDING | VIEW_METADATA } [ ,...n ] ]
AS instruction_selection... [ WITH CHECK OPTION ]

La clause WITH ENCRYPTION indique que SQL Server crypte les colonnes des tables systèmes contenant le texte de l'instruction CREATE VIEW.

La clause WITH SCHEMABINDING implique que la requête de sélection doit contenir des noms sous la forme propriétaire.objet pour des tables, des vues ou des fonctions référencées.

La clause WITH VIEW_METADATA indique que SQL Server renvoie aux interfaces de programmation d'applications DBLIB, ODBC et OLE DB les informations de métadonnées sur la vue, au lieu des tables de la base de données, lorsque des métadonnées en mode lecture sont sollicitées pour une requête qui fait référence à la vue.

La clause WITH CHECK OPTION garantit que l'ensemble des instructions de modification exécutées sur la vue respectent le critère défini dans la requête de sélection.

Création d'une vue sous Oracle
CREATE [ OR REPLACE ] [ FORCE | NOFORCE ] VIEW [ propriétaire . ] nom_vue
(nom_colonne,...,nom_colonneN)
AS instruction_sélection...;
[WITH CHECK OPTION
[CONSTRAINT constraint]]

L'instruction OR REPLACE crée à nouveau la vue si elle existe déjà.

Les clauses FORCE et NOFORCE indiquent respectivement que :

  • la vue est créée sans se soucier de l'existence des tables qu'elle référence ou des privilèges adéquats sur les tables,
  • la vue est créée seulement si les tables existent et si les permissions requises sont données.

La clause WITH CHECK OPTION limite les insertions et les mises à jour exécutées par l'intermédiaire de la vue.

La clause CONSTRAINT est un nom optionnel donné à la contrainte WITH CHECK OPTION.

Les vues peuvent être créées à partir d'autres vues. Pour cela il suffit de référencer les vues dans la clause FROM de l'instruction select.

CREATE VIEW nom_vue
AS
SELECT * FROM nom_vue2;

Bien que cela soit possible, il faut éviter l'accumulation sur plusieurs niveaux afin d'éviter tout problème de gestion lors des suppressions de vue notamment.

La modification d'une vue s'effectue au moyen de la commande ALTER. L'instruction OR REPLACE vu précédemment spécifique à Oracle peut être également utilisée pour modifier la vue.

ALTER VIEW [ nom_base . ] [ propriétaire . ] nom_vue
[ ( nom_colonne [ ,...n ] ) ] 
[ WITH { ENCRYPTION | SCHEMABINDING | VIEW_METADATA } [ ,...n ] ]
AS instruction_selection... [ WITH CHECK OPTION ]

Les vues peuvent être supprimées par l'intermédiaire de la commande DROP.

DROP VIEW nom_vue;

Il est possible de renommer une vue par l'intermédiaire de la commande RENAME.

RENAME nom_vue TO nouveau_nom;

D'autre part, la clause ORDER BY ne peut pas être employée dans l'instruction CREATE VIEW. Cependant, la clause de regroupement GROUP BY peut être utilisée à des fins d'ordonnancement.

Les vues ne possédant pas d'existence physique, peuvent être néanmoins sauvegardées dans une table par l'intermédiaire d'une commande CREATE TABLE.

CREATE TABLE tbl_sauvegarde AS
SELECT col1, ..., colN
FROM nom_vue
[WHERE Condition];

La clause ORDER BY ne peut être utilisée dans la commande SELECT dans le cadre d'une création de vue. Toutefois, la clause de regroupement GROUP BY est utilisable dans ce cas de figure est produit un résultat sensiblement équivalent.

Exemples
CREATE VIEW vue_personnel AS
SELECT * FROM tbl_personnel

CREATE VIEW vue_personnel AS
SELECT sexe, nom, prenom, adresse, cp, ville
  FROM tbl_personnel
  WHERE service = 'commercial'

CREATE VIEW vue_pers_serv AS
SELECT v.sexe, v.nom, v.prenom, t.poste, t.service
  FROM vue_personnel v, tbl_service t
  WHERE code_service = 'SC02354L'
GROUP BY v.nom || ', ' || v.prenom;

-- Utilisation d'une vue
SELECT * FROM vue_pers_serv;

UPDATE vue_pers_serv
SET sexe = 'masculin'
WHERE nom = 'Frédérique' AND prenom = 'Jean'

SELECT v1.nom, v2.prenom, v3.service
FROM vue_personnel AS v1, vue_services AS v2
WHERE v1.id_service = v2.id_service

CREATE TABLE tbl_employes AS
SELECT v1.id_service, v2.service, v1.nom, v1.prenom, v1.adresse
FROM vue_personnel AS v1, vue_services AS v2
WHERE v1.id_service = v2.id_service