Vous êtes sur la page 1sur 16

Exercice 1 : vues

1. Créez une vue V_EMP contenant : le matricule, le nom, le numéro de


département, la somme de la commission et du salaire baptisée GAINS, le
lieu du département.
2. Sélectionnez les lignes de V_EMP dont le salaire total est supérieur à 10.000
F
3. Essayez de mettre à jour le nom de l'employé MARTIN à travers la vue
V_EMP.
4. Créez une vue VEMP10 qui ne contienne que les employés du département
10 de la table EMP (n'utilisez pas l'option CHECK pour cette création).

Insérez dans cette vue un employé SOULIER qui appartient au département


20.
Essayez ensuite de retrouver cet employé au moyen de la vue VEMP10 puis
au moyen de la table EMP.

5. Détruisez cette vue VEMP10 et recréez-la avec l'option CHECK.


6. Essayez d'insérer un employé BALARD pour le département 30. Que se
passe-t-il ?

Essayez de modifier le département d'un employé visualisé à l'aide de cette


vue.

7. Liste des salaires des employés avec le pourcentage par rapport au total des
salaires de leur département (utilisez une vue qui fournira le total des
salaires).

Vous pourrez chercher une autre solution qui n'utilise pas de vue mais un
select emboîté dans le from.
create view v_emp (matr, nom, dept, GAINS, lieu) as
select matr, nome, emp.dept, sal + nvl(comm,0), lieu
from emp,dept
where emp.dept = dept.dept;

select * from v_emp where SALTOT > 10000;

update v_emp set nome = 'TOTO' where nome = 'MARTIN';

-----
create view vemp10 as select * from emp where dept=10;

insert into vemp10 values


(1117, 'SOULIER', 'RANGER', 7839, '18/05/81', 10000, 300, 20);

drop view vemp10;

create view VEMP10 as select * from emp


where dept = 10 with check option;

insert into vemp10 values


(0007, 'BALARD', 'OUVRIER', 7839, '18-MAY-81', 10000, 300, 20);

ORA-01402: view WITH CHECK OPTION where-clause violation

update vemp10 set dept=20 where nome='LESAGE';

On ne peut pas non plus utiliser update pour la meme raison.

-----
create view vt (dept, total) as
select dept, sum(sal+nvl(comm,0)) from emp group by dept;

select nome, sal+nvl(comm,0) salaire, (sal+nvl(comm,0))/total pourcentage


from vt,emp
where vt.dept=emp.dept;

Avec les nouvelles possibilités offertes par SQL (select emboîté dans la clause
from) on peut se passer de la création d'une vue:

select nome, sal+nvl(comm,0) salaire, round((sal+nvl(comm,0))/total*100)


pourcentage, emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept;

Si on veut bien utiliser les facilités offertes par SQL*PLUS(pas dans SQL) :
break on dept skip 1

compute sum of salaire on dept

column pourcentage format a7

select nome, sal+nvl(comm,0) salaire,


to_char(round((sal+nvl(comm,0))/total*100), '999')||' %' pourcentage,
emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept
order by 4;
Matière : Sqlserver

SEMESTRE : III

LES VUES

Objectif: à la fin de la séance les stagiaires doivent être capables de


définir une vue et d'effectuer les différentes opérations possibles

temps prévu: 04h

Plan du tp :

1. Introduction
2. intérêt des vues
3. création d'une vue
4. modification d'une vue
5. renommer une vue
6. gérer les autorisation d'une vue

- Aides didactiques : Micro-ordinateur et Data show, Tableau blanc,


Marqueurs

Introduction
Une vue est une liste de colonnes ou une série d'enregistrements extraits d'une ou de
plusieurs tables existantes de la base de données relationnelle, ou comme une
combinaison d'une ou plusieurs vues et d'une ou de plusieurs tables de la base de
données relationnelle.
Une vue est une table virtuelle, c'est-à-dire dont les données ne sont pas stockées dans
une table de la base de données, et dans laquelle il est possible de rassembler des
informations provenant de plusieurs tables. On parle de "vue" car il s'agit simplement
d'une représentation des données dans le but d'une exploitation visuelle. Les données
présentes dans une vue sont définies grâce à une clause SELECT.
La vue représente de cette façon une sorte d'intermédiaire entre la base de données et
l'utilisateur. Cela a de nombreuses conséquences :
• Une sélection des données à afficher
• Une restriction d'accès à la table pour l'utilisateur, c'est-à-dire une sécurité des
données accrue
• Un regroupement d'informations au sein d'une entité

Intérêts des vues

• Gagner du temps sur l’écriture de requêtes :


C’est certainement l’utilisation première et la plus connue des vues, elles nous
permettent de stocker des requêtes avec de multiples jointures que nous écrivons tous
les jours et de simplifier son utilisation au jour le jour.
L’économie de temps est évidente et son utilisation permet aussi aux nouveaux
arrivants d’avoir un code de référence pour analyser le schéma de données, si le
modèle de donnée n’est pas fourni.
• Centralisation des règles métier
En effet, cela permet de synthétiser simplement des règles métiers complexes
regroupant de nombreux critères afin d’éviter des modifications fréquentes dans les
applications
• Sécurisation de l’accès aux données
On peut recourir aux vues pour affiner, simplifier et personnaliser la perception de la
base de données par chaque utilisateur. Les vues peuvent être utilisées comme
mécanismes de sécurité en permettant aux utilisateurs d'accéder aux données par le
biais de la vue, sans leur accorder d'autorisations qui leur permettraient d'accéder
directement aux tables de base sous-jacentes de la vue. Les vues peuvent servir à
fournir une interface de compatibilité descendante afin d'émuler une table qui existait
mais dont le schéma a changé.
• Mise en évidence de données spécifiques
Les vues permettent aux utilisateurs de se concentrer sur des données spécifiques qui
les intéressent et sur les tâches spécifiques dont ils sont responsables, en n'intégrant
pas dans la vue les données superflues ou sensibles.
• Simplification de la manipulation des données
Les vues permettent de simplifier la manière dont les utilisateurs manipulent des
données. On peut définir comme vues des jointures, des projections, des requêtes
UNION ainsi que des requêtes SELECT fréquemment utilisées de sorte que les
utilisateurs n'aient pas à spécifier toutes les conditions et qualifications chaque fois
qu'une nouvelle opération est effectuée sur ces données. Par exemple, il est possible de
créer comme vue une requête complexe servant à créer des rapports et exécuter des
sous-requêtes, des jointures externes et des agrégations pour extraire des données d'un
groupe de tables. La vue simplifie l'accès aux données puisque la requête sous-jacente
ne doit pas être écrite ou soumise chaque fois que le rapport est créé ; c'est la vue qui
est interrogée.
• Pour offrir la compatibilité descendante
Les vues vous permettent de créer une interface à compatibilité descendante pour une
table lorsque son schéma change.
• Personnalisation des données
Les vues permettent à différents utilisateurs d'afficher des données de différentes
manières, même lorsqu'ils utilisent les mêmes données simultanément. Cet avantage
est particulièrement significatif lorsque des utilisateurs dont les intérêts et les niveaux
de compétences diffèrent partagent la même base de données
• Etre utilisées dans la procédure stockée
Les vues sont aussi peuvent être utilisées dans la procédure stockée pour optimiser les
requêtes et automatiser les traitements
• Etre utilisées pour faire des rapports
Les vues sont également utilisées dans les rapports comme les tables
• Exportation et importation de données
Au moyen des vues, on peut exporter des données définies par la vue vers d'autres
applications. Des données peuvent également être importées dans certaines vues, à
partir de fichiers de données
• Pour combiner des données partitionnées sur plusieurs serveurs
L'opérateur Transact-SQL UNION peut être utilisé dans une vue afin de combiner en
un seul ensemble de résultats les résultats de deux ou plusieurs requêtes sur des tables
séparées L'utilisateur ne voit alors qu'une seule table, appelée vue partitionnée. Par
exemple, si une table contient des données relatives aux ventes réalisées à Paris, et une
autre celles réalisées à Lyon, il est possible de créer une vue résultant de l'UNION de
ces deux tables. Cette représente les ventes réalisées de ces deux villes.
Pour utiliser des vues partitionnées, il faut créer plusieurs tables identiques, en
spécifiant une contrainte qui détermine la plage de données pouvant être ajoutée à
chaque table. La vue est ensuite créée à l'aide de ces deux tables de base. Lorsqu’on
interroge la vue, SQL Server détermine automatiquement quelles tables sont affectées
par la requête et ne référence que ces tables. Si, par exemple, une requête spécifie que
seules les données relatives aux ventes pour Paris sont requises, SQL Server ne lit que
la table contenant ces données ; il n'accède à aucune autre table.
Les vues partitionnées peuvent reposer sur des données de plusieurs sources
hétérogènes, par exemple des serveurs distants, pour créer une fédération de serveurs
de bases de données. Par exemple, pour combiner des données provenant de serveurs
distants différents dont chacun héberge des données relatives à un pays différent
desservi par votre organisation, on peut créer des requêtes distribuées qui extraient des
données de chacune des sources de données, puis une vue basée sur ces requêtes
distribuées. Toutes les requêtes ne lisent que les tables serveurs distants qui
contiennent les données requises par la requête ; le programme n'accède pas aux autres
serveurs référencés par les requêtes distribuées dans la vue. Si on partitionne des
données sur plusieurs serveurs, les requêtes qui n'accèdent qu'à une fraction des
données peuvent être exécutées plus rapidement car la quantité de données à analyser
est moindre. Si les tables résident sur des serveurs différents ou sur un ordinateur
équipé de plusieurs processeurs, chaque table impliquée dans la requête peut
également être analysée en parallèle. Ceci peut améliorer les performances de la
requête. De plus, les tâches de maintenance, telles la reconstruction d'index ou la
sauvegarde d'une table, peuvent être effectuées plus rapidement.
Si on utilise une vue partitionnée, les données apparaissent toujours sous la forme
d'une table unique et peuvent être interrogées comme telles sans qu'il ne faille
référencer manuellement la table sous-jacente appropriée.

Création d'une vue

La création d'une vue se fait grâce à la clause CREATE VIEW suivie du nom que l'on
donne à la vue, puis du nom des colonnes dont on désire agrémenter cette vue (il faut
autant de redéfinitions de colonne qu'il y en aura en sortie), puis enfin d'une clause AS
précédant la sélection.
• Aller dans SQL Server Mangement Studio
• Dans la base de données, faire clic droit sur « Views »
• Sélectionner « New View …»
• Dans la fenêtre « Add Table », sélectionner la table où on veut créer la vue
• Cliquer sur « Add »
• Ci-dessous un exemple qui illustre comment on crée la vue avec la sélection des
colonnes
redéfinition les noms des colonnes d’une table avec une critère de sélection avec
WHERE

Modification d’une vue

• Aller dans SQL Server Mangement Studio


• Dans la base de données, cliquer sur « Views »
• Faire clic droit sur la vue qu’on veut modifier
• Cliquer sur « Script View as »
• Cliquer sur « ALTER To »
• Cliquer sur « New Query Editor Window »

• Ci-dessous un exemple qui illustre comment on sélectionne et redéfinit les colonnes


d’une
table avec une critère de sélection avec WHERE

Exécution d’une vue

Les vues ainsi créées peuvent être l'objet de nouvelles requêtes en précisant le nom de
la vue au lieu d'un
nom de table dans un ordre SELECT...
• Aller dans SQL Server Mangement Studio
• Dans la base de données, cliquer sur « Views »
• Faire clic droit sur la vue qu’on veut exécuter
• Cliquer sur « Script View as »
• Cliquer sur « SELECT To »
• Cliquer sur « New Query Editor Window »
Renommer d’une vue

Le nom de la vue est important car le nom de la vue est utilisé dans les requêtes
comme le nom d’une
table. Le nom de la vue est unique dans la base de données.
Le nom de la vue est modifiable. Pour modifier le nom de la vue
• Aller dans SQL Server Mangement Studio
• Dans la base de données, cliquer sur « Views »
• Faire clic droit sur la vue qu’on veut renommer
• Cliquer sur « Rename »

Gérer les autorisations d’une vue

La vue créée peut être accordée l’autorisation à tous les utilisateurs ou à certains
utilisateurs seulement.
Pour accorder la permissions de la vue :
• Aller dans SQL Server Mangement Studio
• Dans la base de données, cliquer sur « Views »
• Faire clic droit sur la vue qu’on veut gérer la permission
• Cliquer sur « Properties »
• Cliquer sur « Permissions »
• Cliquer sur « Search »
• Cliquer sur « Browse »
• Sélection le groupe des utilisateurs prédéfini ou Public
-- soit la table suivante :
CREATE TABLE T_EMPLOYE
(EMP_ID INTEGER PRIMARY KEY,
EMP_MATRICULE CHAR(8),
EMP_TITRE VARCHAR(4),
EMP_NOM VARCHAR(32),
EMP_PRENOM VARCHAR(32),
EMP_DATE_NAIS DATE,
EMP_SALAIRE FLOAT,
EMP_STATUT CHAR(8),
EMP_MAIL VARCHAR(128),
EMP_TEL CHAR(16))
-- permet de stocker les employés de l'entreprise

-- pour le syndicat, on pourra définir la vue suivante :


CREATE VIEW V_EMP_SYNDICAT
AS
SELECT EMP_MATRICULE, EMP_TITRE, EMP_NOM, EMP_PRENOM, EMP_DATE_NAIS,
EMP_MAIL, EMP_TEL
FROM T_EMPLOYE
-- elle ne peut être mise à jour car la clef ne s'y trouve pas

-- pour le carnet d'adresse on pourra définir la vue suivante


CREATE VIEW V_EMP_SYNDICAT
AS
SELECT EMP_ID, EMP_TITRE || ' ' || EMP_PRENOM || ' ' || EMP_NOM AS
EMP_NOM_COMPLET, EMP_MAIL, EMP_TEL
FROM T_EMPLOYE
-- elle ne peut être mise à jour à cause des transformation de données
(concaténation au niveau du nom)

-- pour le service comptable, on pourra définir la vue suivante :


CREATE VIEW V_EMP_SYNDICAT
AS
SELECT EMP_ID, EMP_PRENOM, EMP_NOM, EMP_SALAIRE
FROM T_EMPLOYE
WHERE STATUT = 'ETAM'
WITH CHECK OPTIONS
-- elle pourra être mis à jour uniquement pour les salariés de type 'ETAM'

Vous aimerez peut-être aussi