Vous êtes sur la page 1sur 7

Licence : Génie logiciel FST ERRACHIDIA

Bases de données avancées-Module I618


TD4 : Langage SQL
Exercice 1 :
Soit le schéma de base de données relationnel suivant :
Agence (numAgence, nom,ville)
Client (numClient, nom, ville)
Compte (numCompte, #numAgence, #numClient, solde)
Emprunt (numEmprunt, #numAgence, #numClient, montant)
A. Écrire les requêtes suivantes en SQL :
1. Les noms et les villes des Agences.
2. Les montants des emprunts.
3. Liste des clients ayant la ville = “Rabat”.
4. Les numéros des emprunts ayant un montant supérieur à 1200.
5. Les noms des clients qui habitant “Azrou”.
6. Les montants des emprunts des clients numéro 12 et 13.
B. Écrire les requêtes suivantes en SQL :
1. Le nombre des clients.
2. Le montant maximum des emprunts.
3. Le montant minimum des emprunts.
4. La moyenne des soldes des Comptes.
5. La liste des agences ayant des comptes-clients.
6. Les Clients ayant un compte à une agence à Rabat.
7. Nombre de clients habitant “Azrou”.
Exercice 2 :
Vous travaillez dans une agence immobilière qui a mis en place un modèle relationnel afin
de gérer son portefeuille client. Le modèle relationnel est le suivant :
Client (codeclt, nomClt, prenomClt, villeClt)
Representant (codeRep, nomRep, prenomRep)
Appartement (ref, superficie, prix, #codeRep, #codeClt)
On considère que les types des attributs sont :
• codeClt, nomClt, prenomClt, villeClt, codeRep, nomRep, prenomRep, ref :
chaines de 30 caractères.
• superficie, prix : entier de 15 chiffres.
1. Écrire les requêtes SQL nécessaires à la création de la Base de Données décrites ci-dessus,
tout en respectant le type et la longueur donnée ci-dessus pour les différents attributs, et en
spécifiant les contraintes clés primaires et clés étrangères.
2. Écrire les commandes nécessaires à l’insertion des extensions suivantes pour chaque table
de la base de données
Client Representant
codeClt nomClt prenomClt villeClt codeRep nomRep prenomRep
C1 Alaoui Samir Tanger R1 Khaldi Jaouad
C2 Hammouri Rachid Tetouan R2 Asri Hamid
C3 Dehbi Kamal El Houceima R3 Touati Rachid
C4 Chaoui Khalid Taza R4 Redouani Ismail
Appartement
ref superficie prix codeRep codeClt
A1 500 50 R2 C1
A2 700 150 R3 C1
A3 900 200 R2 C3
A4 650 175 R1 C2

Pr // A.BAATAOUI 1/3
Licence : Génie logiciel FST ERRACHIDIA

1. L’agent immobilier souhaite avoir un certain nombre d’informations, effectuer les requêtes
SQL nécessaires afin de satisfaire l’agent immobilier.
a. La liste des représentants.
b. Les différentes villes des clients.
c. Le nombre de client.
d. Les informations du client de code C2.
e. Le maximum des prix des appartements.
f. Le minimum des prix des appartements.
g. La liste des clients classés par ordre alphabétique de leurs prénoms.
h. La liste des appartements situés gérés par Chaoui Hamid.
i. La moyenne par superficie des prix des appartements.
j. Le nombre d’appartements dont la superficie est supérieur à 700.
Exercice 3 :
Soit les relations suivantes de la société GAVASOFT :
Emp(numE, nomE, Fonction, Embauche, Salaire, Comm,#numD)
Dept(numD, nomD, Lieu)
Exemple : Soit les extensions suivantes pour chaque table :
Emp
nomE Fonction Embauche Salaire Comm numD Dep
Anas Président 10/10/1979 10000 NULL NULL numD nomD Lieu
Amine Doyen 01/10/2006 5000 NULL 1 1 Droit Fes
Saber Stagiaire 01/10/2006 0 NULL 1 2 Commerce rabat
Med Commercial 01/10/2006 5000 100 2

• numD, Salaire, Comm : entier de 20 chiffres


• nomD, Lieu, nomE, Fonction : chaine de 30 caractères (au maximum).
• Embauche : date
3. Écrire les requêtes SQL nécessaires à la création de la Base de Données décrites ci-dessus,
tout en respectant le type et la longueur donnée ci-dessus pour les différents attributs, et en
spécifiant les contraintes clés primaires et clés étrangères.
4. Écrire les commandes nécessaires à l’insertion des extensions suivantes pour chaque table
de la base de données.
5. Écrire les requêtes suivantes en langage SQL :
a. Donner la liste des employés ayant une commission (Comm) (non NULL) classé par
commission décroissante
b. Donner les noms des personnes embauchées depuis le 01-09-2006
c. Donner la liste des employés travaillant à Créteil
d. Donner la moyenne des salaires.
e. Donner le nombre de commissions non NULL.
f. Donner la liste des employés gagnant plus que la moyenne des salaires de l’entreprise E
Exercice 4 :
La base de données d’une bibliothèque est constituée des relations suivantes.
Auteur(codeAuteur, nomAuteur, prenomAuteur)
Contenant la liste des auteurs. 

Livre(numLivre, isbn, titre, editeur, dateEdition)
Contenant la liste des livres (l’attribut isbn est aussi une cléf de la relation). 

Ecrit(codeAuteur, numLivre)
Associant à chaque auteur les livres qu’il a écrits. 

Exemplaire(numLivre, numExempl, etat, dateAcq)

Pr // A.BAATAOUI 2/3
Licence : Génie logiciel FST ERRACHIDIA

Contenant la liste des exemplaires des livres de la bibliothèque. 



Emprunteur(numInscri, nomEmpr, prenomEmpr, adresseEmpr)
Contenant la liste des emprunteurs. 

Emprunt(numLivre, numExempl, numInscri, dateEmpr)
Contenant la liste des emprunts en cours.

6. Donner les instructions SQL de création des tables de cette base de données.
7. Exprimer les requêtes suivantes en SQL.
a. Rechercher le titre des livres écrits par « Alami Rachid ».
b. Rechercher les numéros, nom et prénom des emprunteurs qui ont en prêt un exemplaire
du livre numéro 10.
c. Rechercher le nombre d’emprunts en cours.
d. Pour chaque livre, rechercher son numéro, son titre et le nombre de ses exemplaires en
cours de prêt.
e. Rechercher le numéro et le titre des livres de la bibliothèque édités depuis le 1 septembre
2003.
f. Rechercher le nom, le prénom et le code des auteurs ayant écrit le plus de livres de la
bibliothèque.
g. Rechercher le numéro et le titre des livres disponibles (c-à-d dont au moins un exemplaire
n’est pas emprunté, d’abord sélectionner des numéros de livres d’exemplaires qui n’ont
pas été emprunte).
h. Rechercher le numéro et le titre des livres dont tous les exemplaires sont empruntés
(Rechercher les identifiants de livres disponibles, Chercher les livres qui ne sont pas
présents dans la table précédente).
i. Rechercher le numéro et le titre des livres disponibles (c-à-d dont au moins un exemplaire
n’est pas emprunté) édités après le 1 septembre 2003 dont le titre contient le mot
”motivation”. 

Exercice 5 :
Soit une base de données relationnelle permettant de gérer les déroulements des spectacles
vivants ainsi que les compagnies d'artistes :
Spectacle(idSpectacle, titre, categorie, ageMin, duree, #idCompagnie) 

Salle(idSalle, nom, adresse, nombrePlaces) 

Derouler(#idSpectacle, #idSalle, ddate, heure, nombrePlacesReservées) 

Compagnie(idCompagnie, nom, adresse) 

Artiste(idArtiste, nom, prenom, #idCompagnie) 

Participer(#idArtiste, #idSpectacle) 

Les clés primaires sont soulignées ; les clés étrangères sont précédées par le symbole « # ».
Pour chaque question, donner une requête en SQL en utilisant la notion des sous requêtes:
a. Donner les titres des spectacles dont la durée est supérieure à la durée moyenne.
b. Donner les noms des compagnies dont le nombre d'artistes est supérieur ou égal à 
10.
c. Donner les horaires et les lieux de présentation du mois de janvier 2011 du spectacle “Au
fil de l'eau”.
d. Donner le nom et le prénom des artistes qui ont participé à tous les spectacles de leur
compagnie.
e. Donner pour chaque spectacle son titre et le nombre de ses présentations réussies (c'est-
à-dire les présentations où la salle est complètement remplie).
f. Donner pour chaque compagnie le nom et le nombre de spectacles produits durant
l'année 2010, y compris pour les compagnies qui n'ont pas de spectacles. 


Pr // A.BAATAOUI 3/3
Licence : Génie logiciel FST ERRACHIDIA

(a) Titres ecrits par Taher Benjelloul

Auteur(code auteur, nom, prenom)
Livre(n livre, ISBN, titre, editeur, date edition) Ecrit(code
auteur, n livre)

SELECT titre
FROM Auteur NATURAL JOIN Ecrit NATURAL JOIN Livre
WHERE Nom="Benjelloul" AND prenom="Taher"
(b) Numéro, nom et prénom des emprunteurs qui ont en prêt un exemplaire du livre n◦10

Emprunteur(n inscr, nom, prenom, adresse)

Emprunt(n livre, n exemplaire, n inscr, date empr)

SELECT DISTINCT n_inscr, nom, prenom


FROM Emprunt NATURAL JOIN Emprunteur
WHERE n_livre=10

(c) Nombre d’emprunts en cours

Emprunt(n livre, n exemplaire, n inscr, date empr)

SELECT COUNT(*)
FROM Emprunt

(d) Pour chaque livre, numéro, titre et nombre d’exemplaires en prêt (I)

Livre(n livre, ISBN, titre, editeur, date edition)

Emprunt(n livre, n exemplaire, n inscr, date empr)

1. Numero et nombre d’emprunt(s) des livres empruntes au moins une fois

SELECT n_livre, COUNT(*) as n_empruntes


FROM Emprunt
GROUP BY n_livre
2. Numero et nombre d’emprunt(s) des livres qui ne sont pas empruntes

SELECT n_livre, 0 as n_empruntes


FROM Livre
WHERE n_livre NOT IN (SELECT n_livre FROM Emprunt)

(d) Pour chaque livre, numero, titre et nombre d’exemplaires en prˆet (II)

Livre(n livre, ISBN, titre, editeur, date edition) Emprunt(n livre, n exemplaire, n inscr, date
empr)

3. Union de ces deux tables

Pr // A.BAATAOUI 4/3
Licence : Génie logiciel FST ERRACHIDIA

(SELECT n_livre, COUNT(*) as n_empruntes


FROM Emprunt
GROUP BY n_livre)
UNION

(SELECT n_livre, 0 as n_empruntes


FROM Livre
WHERE n_livre NOT IN (SELECT n_livre FROM Emprunt))

(d) Pour chaque livre, num ero, titre et nombre d’exemplaires en prˆet (III)

Livre(n livre, ISBN, titre, editeur, date edition) Emprunt(n livre, n exemplaire, n inscr, date
empr)

4. NATURAL JOIN avec Livre pour r ecup erer le titre

SELECT n_livre, titre, n_empruntes


FROM
((SELECT n_livre, COUNT(*) as n_empruntes
FROM Emprunt
GROUP BY n_livre)
UNION
(SELECT n_livre, 0 as n_empruntes
FROM Livre
WHERE n_livre NOT IN (SELECT n_livre FROM Emprunt))
NATURAL JOIN Livre

(e) Num eros et titres des livres edit es depuis le 1er septembre 2003

Livre(n livre, ISBN, titre, editeur, date edition)

SELECT n_livre, titre


FROM Livre
WHERE date_edition>=’01-09-2003’

(f) Nom, pr enom et code des auteurs ayant ecrit le plus de livres dans la biblioth`eque

Auteur(code auteur, nom, prenom) Ecrit(code auteur, n livre)

SELECT code_auteur, nom, prenom


FROM Ecrit NATURAL JOIN Auteur
GROUP BY code_auteur
HAVING COUNT(*)=MAX(COUNT(*))

(g) Num ero et titre des livre encore disponibles (il reste au moins un exemplaire) (I)

Emprunt(n livre, n exemplaire, n inscr, date empr) Exemplaire(n livre, n exemplaire, etat,
date acq) Livre(n livre, ISBN, titre, editeur, date edition)

Pr // A.BAATAOUI 5/3
Licence : Génie logiciel FST ERRACHIDIA

1. S election des numeros de livres d’exemplaires qui n’ont pas ete emprunte

SELECT n_livre
FROM Exemplaire
WHERE n_livre, n_exemplaire NOT IN
(SELECT n_livre,n_exemplaire FROM Emprunt)

(g) Num ero et titre des livre encore disponible (il reste au moins un exemplaire) (II)

Emprunt(n livre, n exemplaire, n inscr, date empr) Exemplaire(n livre, n exemplaire, etat,
date acq) Livre(n livre, ISBN, titre, editeur, date edition)

2. NATURAL JOIN avec Livre pour obtenir les titres

SELECT titre, n_livre


FROM
(SELECT n_livre
FROM Exemplaire
WHERE n_livre, n_exemplaire NOT IN
(SELECT n_livre,n_exemplaire FROM Emprunt))
NATURAL JOIN Livre

(h) Num ero et titre des livres dont tous les exemplaires ont et e emprunt es (I)

Emprunt(n livre, n exemplaire, n inscr, date empr) Exemplaire(n livre, n exemplaire, etat,
date acq) Livre(n livre, ISBN, titre, editeur, date edition)

On cherche l’inverse de la question pr ec edente!
1. Rechercher les identifiants de livres


disponibles

SELECT n_livre
FROM Exemplaire
WHERE n_livre, n_exemplaire NOT IN
(SELECT n_livre,n_exemplaire FROM Emprunt)

(h) Numero et titre des livres dont tous les exemplaires ont ete empruntes (II)

Emprunt(n livre, n exemplaire, n inscr, date empr)

Exemplaire(n livre, n exemplaire, etat, date acq)

Livre(n livre, ISBN, titre, editeur, date edition)

2. Chercher les livres qui ne sont pas presents dans cette table.

SELECT titre, n_livre


FROM Livre
WHERE n_livre NOT IN
(SELECT n_livre
FROM Exemplaire
Pr // A.BAATAOUI 6/3
Licence : Génie logiciel FST ERRACHIDIA

WHERE n_livre, n_exemplaire NOT IN


(SELECT n_livre,n_exemplaire FROM Emprunt))

(i) Num ero et titre des livres disponibles edit es apr`es le 1er septembre 2003 dont le
titre contient le mot motivation.

Emprunt(n livre, n exemplaire, n inscr, date empr) Exemplaire(n livre, n exemplaire, etat,
date acq) Livre(n livre, ISBN, titre, editeur, date edition)

Encore tr`es semblable `a (g)...

SELECT titre, n_livre


FROM
((SELECT n_livre
FROM Exemplaire
WHERE n_livre, n_exemplaire NOT IN
(SELECT n_livre,n_exemplaire FROM Emprunt))
NATURAL JOIN Livre)
WHERE date_edition>’01-09-2003’
AND titre LIKE ’%motivation%’

Pr // A.BAATAOUI 7/3

Vous aimerez peut-être aussi