Exercice sur les vues¶
Soit la table Employes suivante :
create table EMPLOYE (
noEmploye number(4)
constraint EMPLOYE_PK primary key
constraint EMPLOYE_EMPNO_CK check(noEmploye > 7000),
nomEmploye varchar2(25)
constraint EMPLOYE_EMPNOM_NN not null,
jobEmploye varchar2(15)
constraint EMPLOYE_JOB_CK check (jobEmploye in ('Secretaire','Vendeur','Manager', 'Vendeur','Analyste','President', 'Programmeur')),
superviseurEmploye number(4)
constraint EMPLOYE_SUPERV_RF references EMPLOYE(noEmploye),
dateEngagement date,
salaireEmploye number(9,2)
constraint EMPLOYE_SAL_CK check (salaireEmploye > 0),
commissionEmploye number(7,2),
deptEMploye number
constraint EMPLOYE_DEPNO_RF references DEPARTEMENT(noDepartement));
| Nom | NULL ? | Type |
|---|---|---|
| NOEMPLOYE | NOT NULL | NUMBER(4) |
| NOMEMPLOYE | NOT NULL | VARCHAR2(25) |
| JOBEMPLOYE | VARCHAR2(15) | |
| SUPERVISEUREMPLOYE | NUMBER(4) | |
| DATEENGAGEMENT | DATE | |
| SALAIREEMPLOYE | NUMBER(9,2) | |
| COMMISSIONEMPLOYE | NUMBER(7,2) | |
| DEPTEMPLOYE | NUMBER |

Énoncés¶
Écrire les instruction SQL.
-
Créer une vue qui extrait tous les champs pour les employés ayant la job de Président
Réponse
create or replace view vueBOSS as select * from employe where upper(jobEMploye) LIKE 'PR_SIDENT'; -
Afficher le contenu de la vue et de la table employe
Réponse
select * from vueBOSS; --un seul resultat elect * from employe; --14 employes -
Est-ce que l'instruction suivante est valide ?
insert into vueBoss values (9999,'Coco','Vendeur',7902,to_date('23/10/2025','dd/mm/yyyy'),2009,45,20);Réponse
Oui :
- La vue n'a aucune jointure de table
- La vue n'a aucune donnée groupée ni d'agrégat
- Les lignes insérées répondent aux contraintes de la table d'origine
- Les lignes insérées possèdent autant de valeurs que de champs dans la vue
Résultat : 1 ligne insérée
-
Créer une vue qui retourne le numéro et le nom d'employe pour les employes dont le nom de famille est "WARD"
Réponse
create or replace view vueWard as select noEmploye,nomEmploye from employe where upper(nomEmploye)='WARD'; -
Afficher les résultats de la vue
Réponse
select * from vueWard; --un seul resultat -
Quel sera le résultat des instructions suivantes :
--Insertion d'un numéro et nom d'employe insert into vueWard values(9998,'Test'); --Insertion des données complètes d'un employe insert into vueWard values (9997,'Coco','Vendeur',7902,to_date('23/10/2025','dd/mm/yyyy'),2009,45,20,3);Réponse
Instruction 1 : 1 ligne insérée, car tous les autres champs de la table peuvent être nuls
Instruction 2 : Erreur : trop de données pour le nombre de colonnes de la vue
-
Quel sera le résultat de l'instruction suivante ?
update vueWard set nomEmploye='Fox' where noEmploye=7522;Réponse
0 ligne mise à jour : cet employé ne fait pas partie de la vue
-
Quel sera le résultat de l'instruction suivante ?
update vueWard set nomEmploye='Fox' where noEmploye=7521;Réponse
1 ligne mise à jour
-
Quel sera le résultat de l'instruction suivante ?
select * from vueWard;Réponse
Aucun résultat : le seul employé avec le nom Ward a été modifié au numéro 8
-
Quel sera le résultat de l'instruction suivante ?
delete from vueWard where noEMploye=7521;Réponse
0 ligne supprimé, 7521 ne fait plus partie de la vue
-
Créer la vue qui retourne le numéro d'employé, le nom d'employé, le numéro de superviseur et le nom de superviseur pour chaque employé ayant un superviseur.
Réponse
create or replace view vueSuperviseur as select employe.noEmploye, employe.nomEmploye as "employe", employe.superviseurEmploye, superviseur.nomEmploye as "superviseur" from employe inner join employe superviseur on employe.superviseurEmploye=superviseur.noEmploye; -
Combien de résultats seront extraits dans la vue ?
Réponse
14 employés ayant un superviseur
-
Est-ce que l'instruction suivante est valide ?
insert into vueSuperviseur values(9888,'Savard',7900,'James');Réponse
Erreur : on ne peut modifier plus d'une table et la jointure ajoute une deuxième table
-
Quel sera le résultat de l'instruction suivante ?
update vueSuperviseur set "employe"='Brown' where noEmploye=9999;Réponse
Une ligne mise à jour (car on ne modifie que la table principale)
-
Quel sera le résultat de l'instruction suivante ?
delete from vueSuperviseur where noEmploye=9999;Résultat
1 ligne supprimée, car on ne modifie que la table principale