Aller au contenu

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

données

Énoncés

Écrire les instruction SQL.

  1. 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';
    
  2. Afficher le contenu de la vue et de la table employe

    Réponse
    select * from vueBOSS;  --un seul resultat
    elect * from employe;  --14 employes
    
  3. 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

  4. 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';
    
  5. Afficher les résultats de la vue

    Réponse
    select * from vueWard;  --un seul resultat
    
  6. 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

  7. 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

  8. Quel sera le résultat de l'instruction suivante ?

    update vueWard set nomEmploye='Fox' where noEmploye=7521; 
    
    Réponse

    1 ligne mise à jour

  9. 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

  10. 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

  11. 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;
    
  12. Combien de résultats seront extraits dans la vue ?

    Réponse

    14 employés ayant un superviseur

  13. 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

  14. 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)

  15. 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