TD 3
: Jointure et requêtes imbriquées
Exercice 1
Soit la base de données suivante :
Départements ( DNO, DNOM, DIR, VILLE)
Employés ( ENO, ENOM, PROF, DATEEMB, SAL, COMM, #DNO)
Donnez le ou les emplois ayant le salaire moyen le plus bas, ainsi que ce salaire moyen
SELECT PROF FROM Employes GROUP BY PROF
HAVING AVG(SAL)=(SELECT AVG(SAL) as moy FROM Employes
GROUP BY PROF ORDER BY moy ASC)
Exercice 2 :
On considère la base de données BD_AIR_Italie suivante :
PILOTE (NUMPIL, NOMPIL, VILLE, SALAIRE)
AVION (NUMAV, NOMAV, CAPACITE, VILLE)
VOL (NUMVOL, #NUMPIL, #NUMAV, VILLE_DEP, VILLE_ARR, H_DEP, H_ARR)
Quels sont les numéros des pilotes qui ne sont pas en service ?
SELECT NUMPIL FROM PILOTE WHERE NUMPIL NOT IN (SELECT DISTINCT NUMPIL FROM VOL)
Quels sont les vols effectués par un avion qui n’est pas localisé à Milano ?
SELECT DISTINCT [Link] FROM VOL V, AVION A WHERE [Link]=[Link] AND [Link] !=’Milano’
Exercice 3:
a. Afficher la somme des achats effectués pour chaque client
b. Ajouter +1 au prix d’achat du client ‘Dupont’
a) SELECT idclient, SUM(prix) from achats
NATURAL JOIN client
GROUP BY (idclient);
b) UPDATE achat,client
SET priw = prix +1
WHERE ([Link] = "dupont" )AND( [Link] = [Link] );
TD 3 : Jointure et requêtes imbriquées
Soit la base suivante :
auteur(idauteur, nom, prenom)
ouvrage(idouvrage, ISBN, titre, editeur, dateedition)
ecrire(#idauteur, #idouvrage)
exemplaire(#idouvrage, idexemplaire, etat, dateacq)
inscrit(idinscrit, nom, prenom, adresse)
emprunt(#idauteur, #idexemplaire, #idinscrit, dateemprunt, daterestitution)
a) Rechercher le numéro et le titre des livres disponibles (c.-à-d. dont au moins un
exemplaire n’est pas emprunté).
b) Rechercher le numéro et le titre des livres dont tous les exemplaires sont empruntés.
c) 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".
(SELECT id_ouv, COUNT(*) as n_empruntes
FROM emprunt
GROUP BY id_ouv)
(SELECT id_ouv, 0 as n_empruntes
FROM ouvrage
WHERE id_ouv NOT IN (SELECT id_ouv FROM emprunt));
g)
SELECT titre, id_ouv
FROM
(SELECT id_ouv
FROM exemplaire
WHERE id_ouv, id_exmp NOT IN
(SELECT id_ouv, id_exmp FROM emprunt))
NATURAL JOIN ouvrage;
h)
SELECT titre, id_ouv
FROM ouvrage
WHERE id_ouv NOT IN
(SELECT id_ouv
TD 3 : Jointure et requêtes imbriquées
FROM exemplaire
WHERE id_ouv, id_exmp NOT IN
(SELECT id_ouv,id_exmp FROM Emprunt));