Vous êtes sur la page 1sur 48

Ministère de l’Enseignement Supérieur et de la Recherche Scientifique

Université Dr Tahar Moulay de Saïda


Faculté de Technologie
Département d’Informatique

Master II - Réseaux Informatiques et Systèmes Répartis (RISR)


Administration et Sécurité des Systèmes d’Information Répartis (ASSIR)

Langage de Manipulation Relationnel: SQL


Rappel SQL
•Le niveau SQL1 : correspond à la norme de base acceptée en 1989. Elle permet
l’expression des requêtes composées d’opérations de l’algèbre relationnelle et
d’agrégats.

•Le niveau SQL2 : norme 1992, est sous divisé en trois niveaux, respectivement
entrée, intermédiaire et complet. Le niveau entrée est une amélioration de SQL1 ,
alors que les niveaux intermédiaire et complet permet de supporter totalement le
modèle relationnel avec des domaine variés, tels date et temps.

Le niveau SQL3 : norme 1999, est constitué d’un ensemble de propositions


nouvelles traitant plus particulièrement des fonctionnalités objets et déductives,
BDD actives.
Langage de définition de données
1- Création dune table Exemple 1
CREATE TABLE nom-table CREATE TABLE Doctorant
{ ( nom-col type-col [DEFAULT valeur] ( nom VARCHAR (20),
[ [CONSTRAINT] contrainte-col] )* prénom VARCHAR (15),
[ [CONSTRAINT] contrainte-table ]* année_insc DECIMAL (4)
| AS requête-SQL }; DEFAULT 2003 ) ;

Légende :
{a | b} : a ou b Exemple 2
[option] CREATE TABLE Doctorant
* : applicable autant de fois que souhaité AS
mot en capitale : mot clé SELECT nom, prénom, année_ins
FROM Etudiant
WHERE statut='Doctorant' ;
1- contrainte-col: contrainte sur une colonne
• NOT NULL

• PRIMARY KEY
• UNIQUE
• REFERENCES nom-table [(nom-col)] [ON DELETE CASCADE]
• CHECK ( condition)

2- contrainte-table: contrainte sur une table


•PRIMARY KEY (nom-col*)
• UNIQUE (nom-col*)
• FOREIGN KEY (nom-col*) REFERENCES nom-table [(nom-col*)] [ON DELETE CASCADE |
SET NULL]
• CHECK ( condition)
Primary key

Exemple 1
CREATE TABLE Pays
( nom VARCHAR(20) PRIMARY KEY ,
capitale VARCHAR(20) … )

Exemple 2
CREATE TABLE Employé
( nom VARCHAR(30) ,
prénom VARCHAR(30) ,
adresse VARCHAR(60) , …
CONSTRAINT Pk_emp PRIMARY KEY (nom, prénom) )
2- suppression dune table
DROP TABLE nom_table [CASCADE CONSTRAINTS]
•CASCADE CONSTRAINTS
•Supprime toutes les contraintes de clé externe référençant cette table
•Si on cherche à détruire une table dont certains attributs sont référencés sans spécifier
CASCADE CONSTRAINT refus

2- modification dune table

ALTER TABLE nom-table


{ RENAME TO nouveau-nom-table |
ADD ( [ (nom-col type-col [DEFAULT valeur]
[contrainte-col])* ] |
MODIFY (nom-col [type-col] [DEFAULT valeur]
[contrainte-col])* |
DROP COLUMN nom-col [CASCADE CONSTRAINTS] |
RENAME COLUMN old-name TO new-name
}
Langage de manipulation de données

1.Insertion de n-uplets : INSERT INTO


INSERT INTO nom_table(nom_col_1, nom_col_2, ...) VALUES (val_1, val_2, ...)

Exemple 1
INSERT INTO Sites (lieu, region)

SELECT lieu, region FROM Station

2. Modification de n-uplets : UPDATE


UPDATE nom_table
SET nom_col_1 = {expression_1 | ( SELECT ...) },
nom_col_2 = {expression_2 | ( SELECT ...) },
...
nom_col_n = {expression_n | ( SELECT ...) }
WHERE predicat
Exemple 2
UPDATE Produit
SET couleur = "vert d'eau"
WHERE couleur = "vert"

2. Suppression de n-uplets : DELETE


DELETE FROM nom_table
WHERE predicat
Toutes les lignes pour lesquelles predicat est évalué à vrai sont supprimées. En
l’absence de clause WHERE, toutes les lignes de la table sont supprimées
Langage de requêtes: Interroger une base
1-Syntaxe générale de la commande SELECT
SELECT [ ALL | DISTINCT ] { * | expression [ AS nom_affiché ] } [, ...]
FROM nom_table [ [ AS ] alias ] [, ...]
[ WHERE prédicat ]
[ GROUP BY expression [, ...] ]
[ HAVING condition [, ...] ]
[ {UNION | INTERSECT | EXCEPT [ALL]} requête ]
•Projection

L’opérateur de projection _(A1, ...An)(relation) se traduit tout simplement en SQL


par la requête :
SELECT DISTINCT A_1, ..., A_n FROM relation
DISTINCT permet de ne retenir qu’une occurrence de n-uplet dans le cas où une
requête produit plusieurs n-uplets identiques.

•Traduction de l’opérateur de sélection


L’opérateur de sélection se traduit tout simplement en SQL par la requête :
SELECT * FROM relation WHERE prédicat
De manière simplifiée, un prédicat est une expression logique sur des
comparaisons.

•Traduction de l’opérateur de produit cartésien


L’opérateur de produit cartésien se traduit en SQL par la requête :
SELECT * FROM relation_1, relation_2

•Traduction de l’opérateur d’équi-jointure


L’opérateur d’équi-jointure se traduit en SQL par la requête :
SELECT * FROM relation_1, relation_2 WHERE relation_1.A_1 = relation_2.A_2
Administration des Bases de Données Réparties sous Oracle

- Connectez en tant que utilisateur SYSTEM (mot de passe choisi : assir)

Accès local (Serveur)


SQLPLUS nom_utilisateur/mot_de_passe
Accès distant (Client)
SQLPLUS nom_utilisateur/mot_de_passe@chaine_de_connexion

- Créer un utilisateur qui porte votre nom et le mot de passe : assir

- Donnez le privilège CONNECT à ce nouveau utilisateur

- Donnez le privilège Ressource à ce nouveau utilisateur

- Donnez le privilège DBA à ce nouveau utilisateur

- Déconnectez SYSTEM puis se connectez avec votre username/password


Administration des Bases de Données Réparties sous Oracle

- Création d’un utilisateur 

CREATE USER nom_user


IDENTIFIED BY mot_de_passe
DEFAULT TABLESPACE USERS
QUOTA 100M ON USERS
TEMPORARY TABLESPACE temp
PROFILE default;

CREATE USER samir


IDENTIFIED BY assir
DEFAULT TABLESPACE USERS
QUOTA 100M ON USERS
TEMPORARY TABLESPACE temp
PROFILE default;
Administration des Bases de Données Réparties sous Oracle

- Donner un privilège à un utilisateur


GRANT privilège TO nom_user;
- Donner le privilège de connexion à un utilisateur

GRANT CONNECT TO nom_user;


- Donner le privilège DBA à un utilisateur

GRANT DBA TO nom_user;


- Donner le privilège pour exécuter un ordre ORDRE_SQL sur une table à un
utilisateur

GRANT ordre_sql ON nom_table TO nom_user;


- Donner le privilège sur une colonne d’une table à un utilisateur

GRANT UPDATE (nom_colonne) ON nom_table TO nom_user;


Administration des Bases de Données Réparties sous Oracle

- Retirer un privilège d’un utilisateur

REVOKE privilège FROM nom_user;

- Retirer le privilège pour exécuter un ordre ORDRE_SQL sur une table d’un
utilisateur
REVOKE ordre_sql ON nom_table FROM nom_user;

- Retirer le privilège sur une colonne d’une table d’un utilisateur


REVOKE UPDATE (nom_colonne) ON nom_table FROM nom_user;

- Créer un synonyme public pour une table


CREATE PUBLIC SYNONYM nom_synonyme FOR nom_table;
Exercice :
1- Le schéma relationnel :

COMMANDE (num_cmd, date_cmd, num_cli)

CLIENT (num_cli, nom, prenom, ville)

ARTICLE (num_art, designation, prix)

LIGNE_CMD (num_cmd, num_art, qte)


2- Création des tables :

CREATE TABLE client (


num_cli NUMBER(5) PIMARY KEY,
nom VARCHAR2(30),
prenom VARCHAR2(30),
ville VARCHAR2(30)) ;
2- Création des tables :

CREATE TABLE article (


num_art NUMBER(5),
designation VARCHAR2(30),
prix NUMBER(10,2),
PIMARY KEY (num_art));
2- Création des tables :

CREATE TABLE commande (


num_cmd NUMBER(5),
date_cmd DATE,
num_cli NUMBER(5) REFERENCES client(num_cli),
CONSTRAINT PK_cmd PIMARY KEY (num_cmd));
2- Création des tables :

CREATE TABLE ligne_cmd (


num_cmd NUMBER(5),
num_art NUMBER(5),
qte NUMBER(10,2),

CONSTRAINT PK_ligne PIMARY KEY (num_cmd,num_art),

CONSTRAINT FK_cmd FOREIGN KEY (num_cmd)


REFERENCES commande(num_cmd),

FOREIGN KEY (num_art) REFERENCES article(num_art));


3- Insertion des tuples :
INSERT INTO client (num_cli, nom, prenom, ville) VALUES
(1,'SAIDI','Ahmed','saida');
INSERT INTO client VALUES (2,'TABTI','Mohammed','Alger');

INSERT INTO article (num_art, designation, prix) VALUES (1,'PC
portable Toshiba',75000);
INSERT INTO article VALUES (2,'PC portable SONY',85000.00);

INSERT INTO commande (num_cmd, date_cmd, num_cli) VALUES
(1,'2014/01/01',1);
INSERT INTO commande VALUES (2,'2014/01/01',5);

INSERT INTO Ligne_cmd (num_cmd, num_art, qte) VALUES (1,1,1);
INSERT INTO Ligne_cmd VALUES (1,8,1);

4- Sélection des tuples:

1- Afficher tous les clients ?

SELECT * FROM client;


SELECT num_cli, nom, prenom, ville FROM client;
SELECT client.* FROM client;
2- Afficher tous les articles ?

SELECT num_art, designation, prix FROM article;


SELECT * FROM article;

3- Les noms et prénoms des clients ?

SELECT nom, prenom FROM client;


4- Sélection des tuples:

4- Les noms des clients ?

SELECT DISTINCT nom FROM client;

5- La liste des clients par ordre alphabétique des noms ?

SELECT nom, prenom FROM client ORDER BY nom;

6- La liste des clients par ordre alphabétique des noms puis les prénoms ?

SELECT nom, prenom FROM client ORDER BY nom, prenom;


4- Sélection des tuples:

7- La liste des articles par ordre descendant des prix ?

SELECT * FROM article ORDER BY prix DESC;

8- Le nom et prénom du client n° 3 ?

SELECT nom, prenom FROM client WHERE num_cli=3;

9- Le nom et prénom des clients n°3 et n°5 ?

SELECT nom, prenom FROM client WHERE num_cli=3 OR


num_cli=5;
4- Sélection des tuples:

10- Afficher le nom et prénom des clients n°3, n°5, n°6 et n°8 ?

SELECT nom, prenom FROM client WHERE num_cli IN


(3, 5, 6, 8);

11- Les clients de la ville de Saida ?

SELECT * FROM client WHERE ville='saida';


SELECT * FROM client WHERE ville LIKE 'saida';
12- Les clients qui ne sont pas de SBA ?

SELECT * FROM client WHERE ville<>'sba';


SELECT * FROM client WHERE ville != 'sba';
4- Sélection des tuples:

13- Les clients dont la ville commence par 's' ?

SELECT * FROM client WHERE UPPER(ville) LIKE ‘S%';


SELECT * FROM client WHERE LOWER(ville) LIKE ‘s%';

14- Les clients dont le nom ne commence pas par 'm' ?

SELECT * FROM client WHERE LOWER(nom) NOT LIKE 'm%';

15- Les clients dont le nom se termine par 'i' ?

SELECT * FROM client WHERE LOWER(nom) LIKE '%i';


4- Sélection des tuples:

16- Les clients dont le nom ne se termine pas par 'i' ?

SELECT * FROM client WHERE LOWER(nom) NOT LIKE '%i';


17- Les clients qui sont de Saida ou de Mascara ?

SELECT * FROM client WHERE lower(ville)='saida' OR


lower(ville) =’mascara’;
SELECT * FROM client WHERE lower(ville) IN ('saida',’mascara’);
18- Les clients qui ne sont ni d'Alger ni d'Oran ?
SELECT * FROM client WHERE lower(ville)<>'alger' AND
lower(ville)!=’oran’;
SELECT * FROM client WHERE lower(ville) NOT IN
('alger',’oran’);
4- Sélection des tuples:

19- Les articles que leur prix dépasse 50000 ?

SELECT * FROM article WHERE prix>50000;


20- Le client qui a fait la commande n°2 ?

SELECT C.num_cli, nom, prenom, ville


FROM client C, commande M
WHERE C.num_cli= M.num_cli AND num_cmd=2;
SELECT C.* FROM client C, commande M
WHERE C.num_cli= M.num_cli AND num_cmd=2;

SELECT num_cli, nom, prenom, ville FROM client NATURAL


JOIN commande WHERE num_cmd=2;
4- Sélection des tuples:
21- Les articles du bon de commande n°1 (numéro de l'article, désignation,
son prix et la quantité commandée) ?
SELECT article.*, qte
FROM article A, ligne_cmd L
WHERE num_cmd=1 AND A.num_art=L.num_art;
SELECT num_art, designation, prix, qte FROM article
NATURAL JOIN ligne_cmd WHERE num_cmd=1;

22- Les clients qui ont fait une commande ?


SELECT DISTINCT C.*
FROM client C, commande M
WHERE C.num_cli=M.num_cli;
SELECT DISTINCT num_cli, nom, preom, ville FROM client
NATURAL JOIN commande;
4- Sélection des tuples:
23- Les articles commandés ?

SELECT DISTINCT A.*


FROM article A, ligne_cmd L
WHERE A.num_art=L.num_art;
SELECT DISTINCT num_art, designation, prix
FROM article NATURAL JOIN ligne_cmd;
4- Sélection des tuples:
24- Total des quantités commandés par article ?

SELECT A.num_art, designation, SUM(qte)


FROM article A, ligne_cmd L
WHERE A.num_art=L.num_art
GROUP BY A.num_art, designation;

SELECT num_art, designation, SUM(qte)


FROM article A NATURAL JOIN ligne_cmd
GROUP BY num_art, designation;
4- Sélection des tuples:
25- Calculer les montants des articles du bon de commande n°7 ?

SELECT A.num_art, designation, prix, qte, qte*prix montant


FROM article A, ligne_cmd L
WHERE A.num_art=L.num_art AND L.num_cmd=7;

SELECT num_art, designation, prix, qte, qte*prix montant


FROM article NATURAL JOIN ligne_cmd
WHERE num_cmd=7;
26- Les clients qui n'ont passé aucune commande ?

SELECT * FROM client


WHERE num_cli NOT IN (SELECT num_cli
FROM commande);
4- Sélection des tuples:
27- Les articles dont les quantités commandés est plus que 2 ?

SELECT A.num_art, designation, SUM(qte) as total


FROM article A, ligne_cmd L
WHERE A.num_art=L.num_art
GROUP BY A.num_art , designation
HAVING SUM(qte)>2;

SELECT num_art, designation, SUM(qte) as total


FROM article NATURAL JOIN ligne_cmd
GROUP BY A.num_art , designation
HAVING SUM(qte)>2;
4- Sélection des tuples:
28- Les clients qui ont acheté une souris ?

SELECT DISTINCT C.* FROM client C, commande M, article


A, ligne_cmd L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art
AND LOWER(designation) LIKE ’souris%’;

SELECT DISTINCT num_cli, nom, prenom, ville FROM client


NATURAL JOIN commande NATURAL JOIN article
NATURAL JOIN ligne_cmd WHERE LOWER(designation)
LIKE ’souris%’;
4- Sélection des tuples:
29- Les clients qui n’ont pas acheté de clavier ?

SELECT * FROM client WHERE num_cli NOT IN (SELECT


C.num_cli FROM client C, commande M, article A, ligne_cmd
L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art
AND LOWER(designation) LIKE ’clavier%’);

SELECT * FROM client WHERE num_cli NOT IN (SELECT


num_cli FROM client NATURAL JOIN commande NATURAL
JOIN article NATURAL JOIN ligne_cmd
WHERE LOWER(designation) LIKE ’clavier%’);
4- Sélection des tuples:
30- Les clients qui ont acheté un clavier ou une souris ?

SELECT DISTINCT C.num_cli, nom, prenom, ville FROM


client C, commande M, article A, ligne_cmd L WHERE
C.num_cli=M.num_cli AND M.num_cmd=L.num_cmd AND
A.num_art=L.num_art
AND (LOWER(designation) LIKE ’souris%’ OR
LOWER(designation) LIKE ‘clavier%’);

SELECT DISTINCT num_cli, nom, prenom, ville FROM client


C NATURAL JOIN commande NATURAL JOIN article
NATURAL JOIN ligne_cmd
WHERE LOWER(designation) LIKE ’souris%’
OR LOWER(designation) LIKE ‘clavier%’;
31- Les clients qui ont acheté un clavier et une souris ?
SELECT DISTINCT C.* FROM Client C, Commande M, Article A,
Ligne_cmd L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art
AND LOWER(designation) LIKE 'souris%‘ AND C.num_cli IN
(SELECT C.num_cli FROM Client C, Commande M, Article A,
Ligne_cmd L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art AND
LOWER(designation) LIKE 'clavier%‘);
SELECT DISTINCT num_cli, nom, prenom, ville FROM Client
NATURAL JOIN Commande NATURAL JOIN Article NATURAL
JOIN Ligne_cmd WHERE lower(designation) LIKE 'souris%'
AND num_cli IN (SELECT num_cli FROM Client C NATURAL
JOIN Commande NATURAL JOIN Article NATURAL JOIN
Ligne_cmd WHERE lower(designation) LIKE 'clavier%');
31- Les clients qui ont acheté un clavier et une souris ?
SELECT num_cli, nom, prenom, ville
FROM Client NATURAL JOIN Commande NATURAL JOIN
Article NATURAL JOIN Ligne_cmd
WHERE lower(designation) LIKE 'souris%‘
INTERSECT
SELECT num_cli, nom, prenom, ville
FROM Client C NATURAL JOIN Commande NATURAL JOIN
Article NATURAL JOIN Ligne_cmd
WHERE lower(designation) LIKE 'clavier%');
32- Les clients qui ont acheté un clavier et jamais une souris ?
SELECT C.num_cli, nom, prenom, ville FROM Client C,
Commande M, Article A, Ligne_cmd L WHERE
C.num_cli=M.num_cli AND M.num_cmd=L.num_cmd AND
A.num_art=L.num_art AND lower(designation) LIKE 'clavier%'
AND C.num_cli NOT IN (SELECT C.num_cli FROM Client C,
Commande M, Article A, Ligne_cmd L WHERE
C.num_cli=M.num_cli AND M.num_cmd=L.num_cmd AND
A.num_art=L.num_art AND lower(designation) LIKE 'souris%');
SELECT num_cli, nom, prenom, ville FROM Client NATURAL
JOIN Commande NATURAL JOIN Article NATURAL JOIN
Ligne_cmd WHERE lower(designation) LIKE 'clavier%' AND
C.num_cli NOT IN (SELECT num_cli FROM Client NATURAL
JOIN Commande NATURAL JOIN Article NATURAL JOIN
Ligne_cmd WHERE lower(designation) LIKE 'souris%');
32- Les clients qui ont acheté un clavier et jamais une souris ?
SELECT num_cli, nom, prenom, ville
FROM Client NATURAL JOIN Commande NATURAL JOIN
Article NATURAL JOIN Ligne_cmd
WHERE lower(designation) LIKE 'clavier%‘
MINUS
SELECT num_cli, nom, prenom, ville
FROM Client NATURAL JOIN Commande NATURAL JOIN
Article NATURAL JOIN Ligne_cmd
WHERE lower(designation) LIKE 'souris%’;
33- Les clients qui ont acheté uniquement le produit clavier ?
SELECT C.* FROM Client C, Commande M, Article A,
Ligne_cmd L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art AND
lower(designation) LIKE 'clavier%' AND C.num_cli NOT IN
(SELECT C.num_cli FROM Client C, Commande M, Article A,
Ligne_cmd L WHERE C.num_cli=M.num_cli AND
M.num_cmd=L.num_cmd AND A.num_art=L.num_art AND
lower(designation) NOT LIKE 'clavier%');
SELECT num_cli, nom, prenom, ville FROM Client NATURAL
JOIN Commande NATURAL JOIN Article NATURAL JOIN
Ligne_cmd WHERE lower(designation) LIKE 'clavier%' AND
num_cli NOT IN (SELECT num_cli FROM Client C NATURAL
JOIN Commande NATURAL JOIN Article NATURAL JOIN
Ligne_cmd WHERE lower(designation) NOT LIKE 'clavier%');
34- Combien d’article il y a dans le bon de commande n°5 ?
SELECT count(num_art) nbre_article FROM ligne_cmd WHERE
num_cmd=5;

SELECT count(*) FROM ligne_cmd WHERE num_cmd=5;

35- Combien d’article y-a-il dans chaque bon de commande ?


SELECT num_cmd, COUNT(num_art) FROM ligne_cmd
GROUP BY num_cmd;

SELECT num_cmd, COUNT(*) FROM ligne_cmd GROUP BY


num_cmd;
36- Combien de client ont acheté une imprimante ?
SELECT count(distinct num_cli) FROM commande M, article A,
ligne_cmd L WHERE M.num_cmd=L.num_cmd AND
A.num_art=L.num_art AND lower(designation) LIKE ’imprimante
%’;
SELECT count(distinct num_cli) FROM commande NATURAL
JOIN article NATURAL JOIN ligne_cmd WHERE
lower(designation) LIKE ’imprimante%’;
37- Combien de produit différent a acheté le client n°6 ?
SELECT COUNT(DISTINCT num_art) FROM commande M,
ligne_cmd L WHERE M.num_cmd=L.num_cmd AND
M.num_cli=6;
SELECT COUNT(DISTINCT num_art) FROM commande
NATURAL JOIN ligne_cmd WHERE num_cli=6;
38- Donner le total du bon de commande n°7 ?
SELECT SUM(qte*prix) Total FROM article A, ligne_cmd L
WHERE A.num_art=L.num_art AND num_cmd=7;

SELECT SUM(qte*prix) Total FROM article NATURAL JOIN


ligne_cmd WHERE num_cmd=7;

39- Donner le total pour chaque bon de commande ?


SELECT num_cmd, SUM(qte*prix) Total FROM article A,
ligne_cmd L WHERE A.num_art=L.num_art GROUP BY
num_cmd;

SELECT num_cmd, SUM(qte*prix) Total FROM article


NATURAL JOIN ligne_cmd GROUP BY num_cmd;
40- Donner le total des achats du client n°6 ?
SELECT SUM(qte*prix) Total FROM article A, commande M,
ligne_cmd L WHERE A.num_art=L.num_art AND
M.num_cmd=L.num_cmd AND num_cli=6;

SELECT SUM(qte*prix) Total FROM article NATURAL JOIN


commande NATURAL JOIN ligne_cmd WHERE num_cli=6;
41- Donner le total des achats par clients ?
SELECT num_cli, SUM(qte*prix) Total FROM article A,
commande M, ligne_cmd L WHERE A.num_art=L.num_art AND
M.num_cmd=L.num_cmd GROUP BY num_cli;

SELECT num_cli, SUM(qte*prix) Total FROM article NATURAL


JOIN commande NATURAL JOIN ligne_cmd GROUP BY
num_cli;
Les Vues
1 Définition

Est une vision logique des données contenues dans une ou plusieurs
tables. Elle est considérée comme une table virtuelle qui n’a pas
d’existence propre, aucune donnée ne lui est associée et sa description est
stockée sous la forme d’une requête.
2 Utlité
•Confidentialité
Les utilisateurs n’ont le droit d’accéder qu’aux vues (Vue sur la table Employé
destinée aux employés ne sélectionne pas la colonne Salaire contrairement à la
vue destinée aux chefs de service.)

•Cacher la complexité des données aux utilisateurs


Vue simplifiée des données
Simplifier les requêtes des utilisateurs non spécialistes

•Présenter différentes perspectives sur les données aux


utilisateurs
Renommage des colonnes

•Requêtes complexes
Qui ne peuvent être faites sans vues
Qui sont fréquemment réalisées
3 Syntaxe
CREATE [OR REPLACE] VIEW nom_vue [ ( nv_nom_col)*] AS subquery
[WITH CHECK OPTION [CONSTRAINT nom_contrainte] ]
[WITH READ ONLY];
Exemple

CREATE OR REPLACE VIEW Petit_pays


AS SELECT * FROM Pays WHERE surface < 100
WITH CHECK OPTION CONSTRAINT CK_Petit_pays;
Exemple Vue (Confidentialité)
Employe (Numero, Nom, Prenom, Adresse, Num_service, Salaire,
performance)

Create view Information_me_concernant Chaque utilisateur peut


As select * visualiser un seul tuple de
From employe la relation: celui qui le
Where upper(nom) = upper (user) concerne

GRANT SELECT ON Information_me_concernant


TO public

Vous aimerez peut-être aussi