0% ont trouvé ce document utile (0 vote)
124 vues31 pages

Requêtes SQL pour gestion de données

Ce document décrit un schéma de base de données représentant les livraisons entre usines, produits et fournisseurs. Il contient ensuite plusieurs requêtes SQL à formuler sur cette base en réponse à des questions sur les données.

Transféré par

bihmanos
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
124 vues31 pages

Requêtes SQL pour gestion de données

Ce document décrit un schéma de base de données représentant les livraisons entre usines, produits et fournisseurs. Il contient ensuite plusieurs requêtes SQL à formuler sur cette base en réponse à des questions sur les données.

Transféré par

bihmanos
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Requtes SQL

Exercices corrigs
Frdric Gava (MCF)
gava@[Link]
LACL, btiment P2 du CMC, bureau 223
Universit de Paris XII Val-de-Marne
61 avenue du Gnral de Gaulle
94010 Crteil cedex

Exercice 1

Les livraisons, la BD
Soit la base relationnelle de donnes PUF de schma :
U(NumU, NomU, VilleU)
P(NumP, NomP, Couleur, Poids)
F(NumF, NomF, Statut, VilleF)
PUF(NumP, NumU, NumF, Quantit)

dcrivant le fait que (avec des DF videntes) :


U : une usine est dcrite par son numro NumU, son nom NomU et la ville
VilleU o elle est situe
P : un produit est dcrit par son numro NumP, son nom NomP, sa couleur et
son poids
F : un fournisseur est dcrit par son numro NumP, son nom NomF, son statut
(sous-traitant, client) et la ville VilleF o il est domicili
PUF : le produit de numro NumP a t dlivr lusine de numro NumU par
le fournisseur de numro NumF dans une quantit donne
3/10

Exprimez en SQL (1)


1) Ajouter un nouveau fournisseur avec les attributs de votre choix
2) Supprimer tous les produits de couleur noire et de numros compris
entre 100 et 1999
3) Changer la ville du fournisseur 3 par Toulouse
4) Donnez le numro, le nom, la ville de toutes les usines
5) Donnez le numro, le nom, la ville de toutes les usines de Paris
6) Donnez les numros des fournisseurs qui approvisionnent lusine de
numro 2 en produit de numro 100
7) Donnez les noms et les couleurs des produits livrs par le
fournisseur de numro 2
8) Donnez les numros des fournisseurs qui approvisionnent lusine de
numro 2 en un produit rouge
9) Donnez les noms des fournisseurs qui approvisionnent une usine de
Paris ou de Crteil en produit rouge
10) Donnez les numros des produits livrs une usine par une
4/10
fournisseur de la mme ville

Exprimez en SQL (2)


11) Donnez les numros des produits livrs une usine de Paris par un
fournisseur de Paris.
12) Donnez les numros des usines qui ont au moins un fournisseur qui
nest pas de la mme ville
13) Donnez les numros des fournisseurs qui approvisionnent la fois
des usines de numros 2 et 3
14) Donnez les numros des usines qui utilisent au moins un produit
disponible chez le fournisseur de numro 3 (cest--dire un produit
que le fournisseur livre mais pas ncessairement cette usine)
15) Donnez le numro du produit le plus lger (les numros si plusieurs
produits ont ce mme poids)
16) Donnez le numro des usines qui ne reoivent aucun produit rouge
dun fournisseur parisien
17) Donnez les numros des fournisseurs qui fournissent au moins un
produit fourni par au moins un fournisseur qui fournit au moins un
produit rouge
5/10

Exprimez en SQL (3)


18) Donnez tous les triplets (VilleF, NumP, VilleU) tels quun
fournisseur de la premire ville VilleF approvisionne une
usine de la deuxime ville VilleU avec un produit NumP
19) Mme question que prcdemment mais sans les triplets
o les deux villes sont identiques
20) Donnez les numros des produits qui sont livrs toutes
les usines de Paris
21) Donnez les numros des fournisseurs qui approvisionnent
toutes les usines avec un mme produit
22) Donnez les numros des usines qui achtent au
fournisseur de numro 3 tous les produits quil fournit
23) Donnez les numros des usines qui sapprovisionnent
uniquement chez le fournisseur de numro 3
6/10

Exercice 2

La socit Gavasoft
Soit les relations suivantes de la socit Gavasoft
Emp(NumE, NomE, Fonction, NumS, Embauche, Salaire, Comm,
NumD)
NomD
Lieu
Dept(NumD, NomD, Lieu) NumD
1
Droit
Creil
Exemple
2

Commerce

Boston

NomE

Fonction

NumS Embauche

Salaire Comm

NumD

Gava

Prsident

NULL 10/10/1979

10000

NULL

NULL

Guimezanes Doyen

01/10/2006

5000

NULL

Toto

Stagiare

01/10/2006

NULL

Al-Capone

Commercial

01/10/2006

5000

100

8/10

Exprimez en SQL (4)


1) Donnez la liste des employs ayant une
commission (non NULL) class par commission
dcroissante
2) Donnez les noms des personnes embauches
depuis le 01-09-2006
3) Donnez la liste des employs travaillant Crteil
4) Donnez la liste des subordonns de "Guimezanes"
5) Donnez la moyenne des salaires
6) Donnez le nombre de commissions non NULL
7) Donnez la liste des employs gagnant plus que la
moyenne des salaires de lentreprise
9/10

Exercice 3

Une mdiathque (1)


On considre le schma relationnel suivant qui modlise une
application sur la gestion de livres et de disques dans une mdiathque
Les disques :
Disque(CodeOuv, Titre, Style, Pays, Anne, Producteur)
Cette relation regroupe un certain nombre dinformations sur un disque : le code
douvrage CodeOuv qui est la cl de la relation, le titre, le style (Jazz, Rock
etc.), le pays, lanne de sortie et le producteur (par exemple Barclay) ; ces
informations sont gnrales et pour un enregistrement de la relation Disque, on
aura aura n>1 enregistrements dans la relation E_Disque correspondant aux
exemplaires de ce disque possds par la mdiathque

Les exemplaires :
E_Disque(CodeOuv, NumEx, DateAchat, Etat)
Cette relation contient un enregistrement pour chaque exemplaire de disque
possd par la mdiathque ; chaque exemplaire est identifi par son code
(CodOuv) et un numro dexemplaire (NumEx) ; on trouve galement la date
dachat et ltat du disque (intact, abm etc.)
11/10

Une mdiathque (2)


Les livres :
Livre(CodeOuv, Titre, Editeur, Collection)
Cette relation regroupe un certain nombre dinformations sur un
livre : le code de louvrage (CodeOuv) qui est la cl de la relation,
le titre, le genre (par exemple polar ou SF), lditeur (par exemple
Glnat) et la collection (par exemple livre de poche ) ; ces
information sont gnrales et pour un enregistrement de la relation
Livre, on aura n>1 enregistrement dans la relation E_Livre
correspondant aux exemplaires de ce livre possds par la
mdiathque

Les exemplaires :
E_Livre(CodeOuv, NumEx, DateAchat, Etat)
Cette relation contient un enregistrement pour chaque exemplaire de livre
possd par la mdiathque ; chaque exemplaire est identifi par son code
(CodOuv) et un numro dexemplaire (NumEx) ; on trouve galement la date
dachat et ltat du livre (intact, abm etc.)
12/10

Une mdiathque (3)


Les auteurs :
Auteurs(CodeOuv, Identit)
Chaque enregistrement de cette relation correspond lun des
auteurs dun ouvrage particulier (livre ou disque) ; lattribut
Identit peut avoir pour valeur un nom de personne (par exemple
Isaac Asimov) ou un nom de groupe (par exemple Noir Dsir)

Les abonns :
Abonne(NumAbo, Nom, Prnom, Rue, Ville, CodeP, Tlphone)
Cette relation regroupe les informations sur les abonnes de la
mdiathque : NumAbo qui identifie tout abonn de manire
individuelle, le nom, le prnom de labonn, son adresse et son
numro de tlphone
13/10

Une mdiathque (4)


Les prts :
Prt(CodeOuv, NumEx, DisqueOuLivre, NumAbo, DatePret)
Cette relation contient un enregistrement par prt effectu ; pour
chaque prt, on trouve lidentifiant du livre ou du disque (code
ouvrage et numro dexemplaire), le numro de labonn
effectuant le prt, un attribut explicitant si le prt est celui dun
livre ou dun disque ( D pour un disque et L pour un livre)
et enfin la date du prt ; cette relation ne contient des informations
que pour les prts en cours cest--dire pour les emprunts non
encore rendus

Le Personnel :
Personnel(NumEmp, Nom, Prnom, Adresse, Fonction, Salaire)
Cette relation contient un enregistrement par employ de la
mdiathque ; chaque employ est identifi par un numro et pour
chaque employ, la relation donne son nom, son prnom, son
adresse, sa fonction et son salaire annuel
14/10

Une mdiathque (5)


Traduisez en SQL les question suivantes :
1) Quel est le contenu de la relation Livre ?
2) Quels sont les titres des romans dits par Gava-Editor
?
3) Quelle est la liste des titres que lon retrouve la fois
comme titre de disque et titre de livre ?
4) Quelle est lidentit des auteurs qui ont fait des disques
et crit des livres ?
5) Quels sont les diffrents style de disques proposs ?
6) Quel est le salaire annuel des membres du personnel
gagnant plus de 20000 euros en ordonnant le rsultat
par salaire descendant et nom croissant ?
15/10

Une mdiathque (6)


Suite :
7) Donnez le nombre de prts en cours pour chaque famille en
considrant quune famille regroupe des personnes de mme
nom et possdant le mme numro de tlphone ?
8) Quel est le code du disque dont la mdiathque possde le plus
grand nombre dexemplaire ?
9) Quels sont les diteurs pour lesquels lattribut Collection na pas
t renseign ?
10) Quels sont les abonns dont le nom contient la chane
ALDO et habitant en Isre ?
11) Quel est le nombre de prts en cours ?
12) Quels sont les salaires minimum, maximum et moyen des
employs exerant une fonction de bibliothcaire ?
13) Quel est le nombre de genres de livres diffrents ?
14) Quel est le nombre de disque achet en 1998 ?
16/10

Une mdiathque (7)


Suite :
15) Quel est le salaire annuel des membres du personnel gagnant
plus de 20000 euros ?
16) Quel est le nom, prnom et ladresse des abonns ayant
emprunt un disque le 12/01/2006 ?
17) Quels sont les titres des livres et des disques actuellement
emprunts par Frdric Gava ?
18) Quels sont les titres des ouvrages livres policiers ou disques de
Jazz emprunts par Frdric Gava ?
19) Quel est lidentit des auteurs qui nont crit que des romans
policiers (genre=policier) ?
20) Quel sont les codes des ouvrages des livres pour lesquels il y a
au moins un exemplaire emprunt et au moins un exemplaire
disponible ?
17/10

Correction exercice 1

Les livraisons (1)


1)
2)
3)
4)
5)
6)
7)

INSERT INTO F VALUES (45, Alfred, Sous-traitant,


Chalon)
DELETE P WHERE Np>=100 AND Np<=199 AND
Couleur=Noire
UPDATE F SET Ville=Nice WHERE Nf=1
SELECT * FROM U
SELECT * FROM U WHERE Ville="Crteil"
SELECT Nf FROM PUF WHERE Nu=1 AND Np=1
SELECT DISTINCT NomP, Couleur FROM P, PUF
WHERE [Link]=[Link] AND Nf=1
Ou bien SELECT NomP, Couleur FROM P
WHERE Np IN (SELECT Np FROM PUF WHERE
NF=1)
19/10

Les livraisons (2)


SELECT DISTINCT Nf FROM PUF, P WHERE
Couleur="Rouge" AND [Link]=[Link] AND Nu=1
Ou bien SELECT DISTINCT Nf FROM PUF WHERE Np IN
(SELECT Np FROM P WHERE Couleur="Rouge") AND
Nu=1
9) SELECT NomF FROM PUF, P, F, U WHERE
Couleur=Rouge AND [Link]=[Link] AND [Link]=[Link] AND
[Link]=[Link] AND ([Link] IN (Paris,Crteil)
Ou bien SELECT NomF FROM F WHERE Nf IN (SELECT
Nf FROM PUF WHERE Np IN (SELECT Np FROM P
WHERE Couleur=Rouge) AND Nu IN (SELECT Nu FROM
U WHERE Ville IN (Paris, Crteil))
10) SELECT DISTINCT Np FROM PUF, F, U WHERE [Link]=[Link]
AND [Link]=[Link] AND [Link]=[Link]
8)

20/10

Les livraisons (3)


11) SELECT DISTINCT Np FROM PUF, F, U WHERE [Link]=[Link]
AND [Link]=[Link] AND [Link]=[Link] AND [Link]=Paris
Ou bien SELECT DISTINCT Np FROM PUF WHERE Nf IN
(SELECT Nf FROM F WHERE Ville=Paris) AND Nu IN
(SELECT Nu FROM U WHERE Ville=Paris)
12) SELECT DISTINCT [Link] FROM PUF, F, U WHERE
[Link]=[Link] AND [Link]=[Link] AND [Link]<>[Link]
Ou bien SELECT DISTINCT Nu FROM PUF WHERE
Nf=ANY(SELECT Nf FROM F, U WHERE [Link]=[Link] AND
[Link]=[Link] AND [Link]<>[Link])
13) SELECT DISTINCT [Link] FROM PUF First, PUF Second
WHERE [Link]=[Link] AND [Link]=1 AND [Link]=2
Ou bien SELECT DISTINCT Nf FROM PUF WHERE Nf IN
(SELECT Nf FROM PUF WHERE Nu=1) AND Nu=2
14) SELECT DISTINCT Nu FROM PUF WHERE Np IN (SELECT
Np FROM PUF WHERE Nf=3)
21/10

Les livraisons (4)


15) SELECT Np FROM P WHERE Poids IN (SELECT MIN(Poids)
FROM P)
Ou bien SELECT Np FROM P p1 WHERE NOT EXISTS
(SELECT * FROM P WHERE [Link]>Poids)
16) SELECT Nu FROM U WHERE Nu NOT IN (SELECT Nu FROM
PUF, F, P WHERE [Link]=[Link] AND [Link]=[Link] AND
Couleur=Rouge AND Ville=Paris)
17) SELECT DISTINCT [Link] FROM PUF, PUF PUF1, PUF PUF2,
P WHERE Couleur=Rouge AND [Link]=[Link] AND
[Link]=[Link] AND [Link]=[Link]
Ou bien SELECT DISTINCT Nf FROM PUF WHERE Np IN
(SELECT Np FROM PUF WHERE Nf IN (SELECT Nf FROM
PUF WHERE Np IN (SELECT Np FROM P WHERE
Couleur=Rouge)))
18) SELECT DISTINCT [Link], Np, [Link] FROM PUF, U, F
WHERE [Link]=[Link] AND [Link]=[Link]
22/10

Les livraisons (5)


19) SELECT DISTINCT [Link], NP, [Link] FROM PUF, U, F
WHERE
[Link]<>[Link]
AND
[Link]=[Link]
AND
[Link]=[Link]
20) SELECT Np FROM PUF WHERE NOT EXISTS(SELECT Nu
FROM U WHERE NOT EXISTS (SELECT * FROM PUF WHERE
NOT (Ville=Paris) OR ([Link]=[Link] AND [Link]=[Link]))
21) SELECT NF FROM PUF WHERE NOT EXISTS (SELECT Nu
FROM U WHERE NOT EXISTS (SELECT * FROM PUF PUF1
WHERE
[Link]=[Link]
AND
[Link]=[Link]
AND
[Link]=[Link]))
SELECT Nf FROM F WHERE EXISTS (SELECT Np FROM P
WHERE NOT EXISTS (SELECT Nu FROM U WHERE NOT
EXISTS (SELECT * FROM PUF WHERE [Link]=[Link] AND
[Link]=[Link] AND [Link]=[Link])))
23) SELECT Nu FROM U WHERE Nu NOT IN (SELECT Nu FROM
PUF WHERE Nf<>3)
23/10

Correction exercice 2

La socit Gavasoft
1)

2)
3)
4)
5)
6)
7)

SELECT Nom, Comm "Commission" FROM Emp WHERE


Comm IS NOT NULL AND Comm!=0 ORDER BY Comm
DESC
SELECT Nom, Embauche, N_Dept FROM Emp WHERE
Embauche > 01/10/2006
SELECT Nom, Embauche, N_Dept FROM Emp, Dept
WHERE Emp.N_Dept=Dept.N_Dept AND Lieu="Crteil"
SELECT [Link] "Nom", Lieu FROM Emp a, Emp b WHERE
[Link]=[Link] AND [Link]="Gava"
SELECT AVG(Salaire) Moyenne des salaires FROM Emp
SELECT COUNT(Comm) Nb. Commissions non-Null
FROM Emp WHERE Comm IS NOT NULL
SELECT Nom, Fonction, Salaire FROM Emp WHERE
Salaire>(SELECT AVG(Salaire) FROM Emp)
25/10

Correction exercice 3

Une mdiathque (6)


1)

SELECT * FROM Livre


Dans ce premier exemple, notons lutilisation du symbole * pour spcifier que
lon souhaite conserver dans le rsultat tous les attributs de la relation Livre

2)

SELECT Titre FROM Livre WHERE Editeur="Droit-Edition"


AND Genre="Polar"
Dans cette requte, la condition porte sur les attributs Editeur et Genre et le
rsultat retourn par la requte est la liste des titres. Il ny a en effet pas
ncessairement de liens entre les attributs retourns et ceux sur lesquels portent
la condition

3)

SELECT [Link] FROM Disque D, Livre L WHERE


[Link]=[Link]
4) SELECT [Link] FROM Disque D, Livre L, Auteur A1,
Auteur
A2
WHERE
[Link]=[Link]
AND
[Link]=[Link] AND [Link]=[Link]
27/10

Une mdiathque (7)


5)

SELECT DISTINCT Style FROM Disque


La clause DISTINCT permet de supprimer les doublons au niveau du rsultat
; par dfaut, SQL conserve les doublons pour optimiser le temps dexcution et
pour rpondre une ventuelle attente de lutilisateur

6)

SELECT Nom, Prnom, Salaire*12 AS Salaire_Annuel


FROM Personnel WHERE Salaire_Annuel>20000 ORDER
BY Salaire DESC, Nom ASC
La clause ORDER BY permet le trie du rsultat avant affichage

7)

SELECT Nom, Tlphone, COUNT(*) FROM Abonne A, Prt


P WHERE [Link]=[Link] GROUP BY Nom,
Tlphone
8) SELECT CodeOuv FROM E_Disque GROUP BY CodeOuv
HAVING COUNT(*)=(SELECT MAX(COUNT(*)) FROM
E_Disque GROUP BY CodeOuv)
9) SELECT Editeur FROM Livre WHERE Collection IS NULL
La prsence de valeurs nulles dans une relation peut tre autorise mais
rarement souhaitable car leur interprtation est ambigu
28/10

Une mdiathque (8)


10) SELECT * FROM Abonne WHERE Nom=%ALDO% AND
CodeP=38--
Certains oprateurs SQL permettent une recherche approximative pour les
attributs de type chane : le caractre de remplacement % indique la possibilit
davoir 0 ou plusieurs caractres quelconques

11) SELECT COUNT(*) FROM Prt


12) SELECT MIN(Salaire), MAX(Salaire), AVG(Salaire) FROM
Personnel WHERE Fonction= bibliothcaire
13) SELECT COUNT(DISTINCT Genre) FROM Livre
14) SELECT COUNT(*) FROM E_Disque WHERE DateAchat
BETWEEN 01-Jan-2006 AND 10-Dec-2007
15) SELECT Nom, Prnom, Salaire*12 AS Salaire_Annuel
FROM Personnel WHERE Salaire_Annuel>20000
Il est possible dutiliser les oprateur arithmtique la fois au niveau de la
clause SELECT et de la clause WHERE
29/10

Une mdiathque (9)


16) SELECT Nom, Prnom, Rue, Ville, CodeP FROM Abonne A,
Prt P, Disque D WHERE [Link]=[Link] AND
[Link]=[Link] AND DatePret=12-Jan-2006
17) (SELECT Titre FROM Abonne A, Prt P, Disque D WHERE
[Link]=[Link] AND [Link]=[Link] AND
NOM="Gava" AND Prnom="Frdric") UNION (SELECT
Titre FROM Abonne A, Prt P, Livre L WHERE
[Link]=[Link] AND [Link]=[Link] AND
NOM="Gava" AND Prnom="Frdric")
18) SELECT CodeOuv FROM Prt P, Abonne A WHERE
[Link]=[Link]
AND
Prnom="Frdric"
AND
Nom="Gava" AND CodeOuv IN (SELECT CodeOuv FROM
Livre WHERE Genre="Policier") OR CodeOuv IN (SELECT
CodeOuv FROM Disque WHERE Style="Jazz")
30/10

Une mdiathque (10)


SELECT Identit FROM Auteur A, Livre L WHERE
[Link]=[Link] AND Genre="Policier" AND
NOT ALL(SELECT Identit FROM Auteur A, Livre L
WHERE
[Link]=[Link]
AND
Genre<>"Policier")
(SELECT [Link] FROM E_Livre E, Prt P
WHERE
[Link]=[Link])
INTERSECT
(SELECT CodeOuv FROM E_Livre E WHERE NOT
EXISTS(SELECT * FROM Prt P WHERE
[Link]=[Link] AND [Link]=[Link]
31/10

Vous aimerez peut-être aussi