Vous êtes sur la page 1sur 4

USDB 1– Faculté des Sciences 2019/2020

Département d’informatique

Master 1– Base de Données Avancées

TD 1 : Requêtes SQL(Rappels)

Exercice 1 : CINEMA

On considère le shéma de la base de données suivante:

 FILM (numf, titre, genre, annee, duree, budget, realisateur, salaire-real)


 DISTRIBUTION (#numf, #numa, role, salaire)
 PERSONNE (nump, prenom, nom, datenais)
 ACTEUR (numa, agent, specialite, taille, poids)

L’attribut REALISATEUR de la relation FILM est l’identifiant d’une PERSONNE. Il en est de même pour les
attributs NUMA et AGENT de la relation ACTEUR.

Donner les requêtes SQL permettant de répondre aux questions suivantes :

1. Donner la définition du schéma relationnel (exprimer les contraintes nécessaires sur les clés primaires,
les références étrangères)
2. Définir les droits d’accès suivants sur la table FILM :
- droit de MAJ pour l’utilisateur « User1 » de l’attribut budget.
-droit de consultation pour tous les utilisateurs.
3. Retrouver la liste de tous les films
4. Retrouver la liste des films dont la longueur dépasse 180 min.
5. Donner la liste de tous les genres de film.
6. Donner le nombre de films par genre.
7. Trouver le/les titre(s) et l’/les année (s) du/des film(s) le(s) plus long(s).
8. Donner le nom et le prénom des réalisateurs qui ont joué dans au moins un de leurs propres films
9. Quel est le total des salaires des acteurs du film “JOKER”.
10. Pour chaque film de « Steven Spielberg » (titre, année), donner le total des salaires des acteurs

Exercice 2 : Gestion de Projet

Soit la base de données intitulée «Gestion_Projet» permettant de gérer les projets relatifs au développement de
logiciels. Elle est décrite par la représentation textuelle simplifiée suivante :

 DEVELOPPEUR (NumDev, NomDev, AdrDev, EmailDev, TelDev)


 PROJET (NumProj, TitreProj, DateDeb, DateFin)
 LOGICIEL (CodLog, NomLog, PrixLog, #NumProj)
 REALISATION (#NumProj, #NumDev)

Ecrire les requêtes SQL permettant de:

1. Créer les tables de la base de données


2. Afficher les noms et les prix des logiciels appartenant au projet ayant comme titre « gestion de stock »,
triés dans l’ordre décroissant des prix ;
3. Aafficher le total des prix des logiciels du projet numéro 10. Lors de l’affichage, le titre de la colonne sera
« cours total du projet » ;
4. Afficher le nombre de développeurs qui ont participé au projet intitulé « gestion de stock » ;
5. Afficher les projets qui ont plus que 5 logiciels ;
6. Les numéros et noms des développeurs qui ont participés dans tous les projets ;

1/4
7. Les numéros de projets dans lesquelles tous les développeurs y participent dans sa réalisation ;

Exercice 3 : Fabrication
 Soit le schéma relationnel de la base
 CLIENT (noc, nom, adresse)
 SERVICE (nos, intitule, localisation)
 PIECE (nop, designation, couleur, poids)
 COMMANDE (#nop, #nos, #noc, quantite)

Formuler en SQL :
1. Donner pour chaque service le poids de la pièce commandée de couleur bleue la plus pesante.
2. Donner le poids moyen des pièces commandées pour chacun des services “Promotion”.
3. Donner les pièces de couleur bleue qui sont commandées par plus de trois services différents.
4. Donner le maximum parmi les totaux des quantités des pièces commandées par les différents services.

Exercice 4 : Réservation VOL


Soit le schéma relationnel de la base de données
 PILOTE (plnum, plnom, plprenom, ville, salaire)
 AVION (avnum, avnom, capacite, localisation)
 VOL (volnum, #plnum, #avnum, villedep, villearr, heuredep, heurearr)

Exprimer les requêtes suivantes en SQL.


1. Donner la définition du schéma relationnel (exprimer les contraintes nécessaires sur les clés primaires,
les références étrangères, capacité > 0, nb_passagers >0, les villes Départ et Arrivée sont connues
pour cette compagnie)
2. Définir les droits d’accès suivants sur la table AVION :
- droit de MAJ pour l’utilisateur « User1 » de la capacité d’un avion.
- tous les droits sont permis avec possibilité de transmission à d’autres utilisateurs pour « User2 »
- droit de consultation pour tous les utilisateurs.
3. En suppose que l’utilisateur « Mohamed » a un droit de MAJ sur toutes les tables avec possibilité de
transmission de droit. Supprimer lui ce privilège.
4. Liste de tous les vols.
5. Nom, prénom et ville de tous les pilotes, par ordre alphabétique.
6. Nom, prénom et salaire des pilotes dont le salaire est supérieur à 20 000 €.
7. Numéro et nom des avions localisés à Paris.
8. Villes accessibles (sans doublon) depuis Londres.
9. Caractéristiques (AVNUM, AVNOM, CAPACITE, LOCALISATION) des avions localisés dans la
même ville que le pilote de nom « Lahreche ».
10. Caractéristiques (VOLNUM, VILLEDEP, VILLEARR, HEUREDEP, HEUREARR, AVNOM,
PLNOM) du vol numéro 707.
11. Nom, prénom et numéro de vol des pilotes affectés à (au moins) un vol.
12. Numéro et nom des avions affectés à des vols (éliminer les doublons).
13. Nombre total de vols.
14. Somme des capacités de tous les avions.
15. Moyenne et écart-type des durées des voyages.
16. Capacités minimum et maximum des avions.
17. Nombre de vols par pilote (indiquer uniquement le numéro des pilotes).
18. Nombre total d’heures de vol par pilote (préciser le nom des pilotes).

N.Lahiani 2/4
A la découverte des Triggers

Exercice 1 : Gestion de Stock


On considère le schéma relationnel suivant où la clé primaire de chaque relation est soulignée et les attributs
qui forment une clé étrangère sont suivis de * :

 ABONNE (codeA, nomA, remise)


 PRODUIT (codeP, nomP, prix)
 STOCK (#codeP, quantiteS, limite)
 VENTE (#code-a, #codeP , quantiteV)
 TICKET (somme)

La table ABONNE contient une liste des clients abonnes et, pour chacun, la remise à laquelle
il a droit. La table STOCK contient l'état du stock pour chaque produit (attribut, quantité) et
la limite inférieure à partir de laquelle le magasin doit commander ce produit. La table TICKET contient la
somme partielle que le client qui est en train de passer à la caisse devra payer. Cette ligne est mise à jour au fur
et à mesure que les achats du client passe en caisse.

1. Ecrire un trigger qui met à jour la table STOCK au fur et à mesure des achats d'un client.
2. Ecrire un trigger pour que des que la remise d'un client abonne atteint 1000 dinars, celle-ci soit débitée
automatiquement de la table ticket et sa valeur remise a 100.
3. Ecrire un trigger qui met à jour la table TICKET.

Exercice 2: parc immobilier

Soit le schéma suivant :


 Immeuble(id, adrNum, adrVoie, adrCodePostal, adrVille, fibreOptique, parkingPrivatif)
 Appartement(num,#immeuble, description, loyer, superficie, terrasse, classeConso,
chauffage, placeParking, prixParking)
Clef étrangère : immeuble en référence à Immeuble(id)

 Piece ((#immeuble, appartement), num, superficie, fonction)


Clefs étrangères : (immeuble, appartement) en référence à Appartement(immeuble, num)

 Photo(num, titre, description, uri, #(immeuble, appartement))


 Clef étrangère : (immeuble, appartement) en référence à Appartement(immeuble, num)

Questions :
1. Rédiger le trigger permettant de vérifier la contrainte suivante : le prix de la place de parking d’un appartement
peut et doit être NULL si l’appartement ne possède pas de place de parking. Tester le bon fonctionnement de
votre trigger.

N.Lahiani 3/4
2. On souhaite que la contrainte suivante soit vérifiée : la superficie totale d’un appartement doit être égale à la
somme de la superficie de chacune de ses pièces. Pour ce faire, créer le trigger qui permet de mettre à jour la
superficie d’un appartement à l’insertion d’une pièce.

3. Adapter le trigger de la question 1 afin :


- de vérifier la contrainte suivante : un appartement ne peut avoir de place de parking si l’immeuble n’a pas de
parking privatif ;
- d’initialiser la superficie de l’appartement à 0 à l’insertion d’un appartement ;
- d’empêcher la modification de la superficie d’un appartement en cas de mise à jour d’un appartement.

4. En vous inspirant du trigger de la question 2, rédiger celui qui permet de mettre à jour la superficie d’un
appartement à la mise à jour d’une pièce. Rédiger également le trigger qui met à jour la superficie d’un
appartement à la suppression d’une pièce.

Rappel :

1-Permission

 GRANT privilege_name ON object_name TO {user_name | PUBLIC | role_name} [with GRANT option];


 REVOKE privilege_name ON object_name FROM {User_name | PUBLIC | Role_name}

Exemple: GRANT SELECT ON employee TO user1

2- « trigger » = déclencheur = traitement déclenché sur événement.

Usage vérification de certaines contraintes – lancement de certains traitements (ex. alerte)

 CREATE [OR REPLACE] TRIGGER nom_declencheur • sequence-trigger : BEFORE / AFTER


sequence-trigger
événement [OR événement] • événement : INSERT/ UPDATE /DELETE
ON nom_table

 Afficher un message dbms_output.put_line ()

 Trigger invalidé
RAISE_APPLICATION_ERROR (error_number, error_text) Error_number : -20001 à -20999

 ROLLBACK annule la transaction en cours et toutes les modifications effectuées lors de cette transaction.

NB :NEW permet de manipuler en lecture/écriture la ligne nouvellement insérée ou modifiée, OLD permet de
manipuler la ligne avant modification ou suppression

N.Lahiani 4/4

Vous aimerez peut-être aussi