Vous êtes sur la page 1sur 8

http://www.brikoboutikstt.fr.

st

BTS CGO1 P10 Chap 5-4

CHAP 5-4

COMPLEMENT SUR LES REQUETES SELECTION

I/ Requtes imbriques
Une requte imbrique consiste inclure une requte comme valeur dune condition dans une clause
WHERE. On utilise loprateur IN (dans)
Principe :
SELECT attribut1, attribut2
WHERE attributx in (select FROM WHERE)
Lutilisation de requtes imbriques permet de runir plusieurs requtes en une seule
Attention : le rsultat de la requte ne doit comporter quun seul champ
Exemple : Le bibliothcaire dAubencheul au Bac souhaite connatre les liens de parent pouvant exister
au sein des adhrents.
Soit le MCD suivant
0,n
parent
ADHERENT
NAdh
Lien_affiliation
NomAdh
PrenAdh
0,1
Enfant
RueAdh
VilleAdh
Le schma de la relation est le suivant
ADHERENT(NAdh, NomAdh, PrenAdh, RueAdh, VilleAdh, #NAdhParent)
Rdigez la requte SQL permettant de connatre le prnom et le nom des parents ayant des enfants
SELECT PrenAdh, nomAdh
FROM ADHERENT
WHERE NAdh in (select NumAdhParent from ADHERENT)
Rsultat :
PrenAdh

NomAdh

NAdh

Myriam

CROFT-LARA

Virginie

GINOLA

14

Mylne

JULIANA

18

Alexandre KILOURIEN

21

Grand

22

MANITOU

F. REDONNET

Page 1/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

II/ Jointures externes


Situation : Vous disposez prsent du SLD relationnel complet relatif la gestion de la bibliothque
dAubencheul au Bac (la base de donnes correspondante sappelle bibliotheque.mdb)
GENRE(CodeGenre, LibelleGenre)
AUTEUR(NAuteur, PrenAut, NomAut)
EDITEUR(NEditeur, NomEditeur)
ADHERENT(NAdh, NomAdh, PrenAdh, RueAdh, VilleAdh, #NAdhParent)
EMPRUNT(#NAdh, #NLivre, #DateEmprunt, DateRetour)
LIVRES(NLivre, TitreLivre, annee, #CodeGenre, #NEditeur, #NAuteur)
On voudrait avoir la liste des livres (titres) complte et, pour les livres emprunts les numros des
adhrents les ayants emprunts.
1) quelles sont les tables concernes par la requte ?
EMPRUNT et LIVRES
2) Une jointure simple (appel aussi quijointure) permet elle de rpondre la requte ?
LIVRES
X
X
X
Y
Y

EMPRUNT
quijointure
Champ de
jointure : NLivre

X
X
X

Rsultat
X
X
X

Seules les lignes de la table livre pour lesquels NLivre a une valeur identique dans EMPRUNT et
LIVRES seront repris
La solution est donc de faire une jointure externe :
En QBE :

Double clic sur la jointure

F. REDONNET

Page 2/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

La table LIVRE est la table pre et constitue ainsi la table de gauche alors que la table emprunt et la
table Fils et est donc considre comme table de droite
On parlera donc ici de jointure externe gauche
En SQL la syntaxe est la suivante :
SELECT DISTINCT TitreLivre, NAdh
FROM LIVRES LEFT JOIN EMPRUNT ON LIVRES.NLivre = EMPRUNT.NLivre;

Table pre
( gauche )

Table fils
( droite )

Exemple 2 : jointure externe droite :


On veut afficher le titre des livres emprunts
SELECT DISTINCT TitreLivre
FROM LIVRES RIGHT JOIN EMPRUNT ON LIVRES.NLivre = EMPRUNT.NLivre;
Remarque : comme les numros de livre figurant dans la table emprunt sont inclus dans la table livre, une
quijointure aurait produit exactement le mme rsultat.
SELECT DISTINCT TitreLivre
FROM LIVRES
WHERE LIVRES.NLivre = EMPRUNT.NLivre;

III/ Les oprations ensemblistes


A/ Le produit cartsien
Il consiste associer chaque enregistrement dune relation A avec chaque enregistrement dune relation B
Relation A
Relation B

A
B

X
Y
Z

Produit cartsien :

XA
XB
YA
YB
ZA
ZB

F. REDONNET

Page 3/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

Le nombre de n-uplets obtenus sobtient en multipliant le nombre de n-uplets des diffrentes relations
sources.
Pour raliser un produit cartsien, il suffit de faire une projection avec au moins deux tables mais sans
dfinir de jointure.
Exemple ( partir de la base GESNOTES.MDB)
Le SLD relationnel est le suivant :
SLD Relationnel de lapplication GESNOTES
EPREUVE(Code preuve, Dsignpreuve, coeff)
ZONE(CodeZone, libellZone)
CANDIDAT(Num candidat, Non candidat, #CodeEtab)
ETABLISSEMENT(Codetab, Nomtab, #CodeZone)
NOTATION(#Codepreuve+#NumCandidat, note)

Afin de prparer des bordereaux de saisie de notes, on souhaiterait disposer de la liste des candidats (n et
nom) et de toutes les preuves (code et nom dpreuve) quils sont susceptibles de passer :
SELECT NumCandidat, NomCandidat, Codepreuve, Dsignpreuve
FROM CANDIDAT, EPREUVE;
REMARQUE : le produit cartsien est trs utilis pour prparer la saisie dune table (comme dans
lexemple, chaque anne le service de lacadmie peut prparer de cette manire la table notation. Il ne
restera alors plus qu saisir les notes obtenues par les candidats)
B/ Lunion
Lunion consiste crer une relation C en fusionnant le contenu de deux relations A et B
Les relations A et B doivent avoir une structure identique
Union
a1
a4

a2

a3
a5

Relation A

xy
z

b1 b2
b3
b4
Relation B

Notation en SQL :
Slection A UNION Selection B
Remarque : ACCESS ne gre pas lunion en QBE.
Exemple :
On souhaite avoir la liste des candidats (numcandidat, nom candidat et code tab) provenant des
tablissements scolaires 330 et 350 :

F. REDONNET

Page 4/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

En SQL
SELECT numcandidat, nomcandidat, codetab
FROM CANDIDAT
Where codetab=330
UNION
SELECT numcandidat, nomcandidat, codetab
FROM CANDIDAT
Where codetab=350;
Proposer une autre solution plus rapide :
SELECT numcandidat, nomcandidat, codetab
FROM CANDIDAT
Where codetab=330 OR Codetab=350

C/ Lintersection
Elle consiste retenir les enregistrements figurant la fois dans la relation A et dans la relation B. Les
relations doivent avoir une structure identique
INTERSECTION

a1
a4

a2

a3
a5

Relation A

xy
z

b1 b2
b3
b4
Relation B

Notation SQL :
Slection A INTERSECT Slection B
Exemple : On veut obtenir le nom des candidats ayant eu moins de 10 lpreuve 3 et lpreuve 6
En SQL :
SELECT Nomcandidat, codepreuve
FROM CANDIDAT, NOTATION
WHERE codepreuve=3 and note<10
and CANDIDAT.numcandidat=NOTATION.Numcandidat
INTERSECT
SELECT Nomcandidat, codepreuve
FROM CANDIDAT, NOTATION
WHERE codepreuve=6 and note<10
and CANDIDAT.numcandidat=NOTATION.Numcandidat;
Sachant quAccess ne connat pas la clause INTERSECT, la solution est la suivante en QBE :
F. REDONNET

Page 5/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

La table NOTATION est reprise deux fois (NOTATION_1 reprsente un alias)


On est oblig de recourir un alias car on ne peut pas poser la condition suivante :
NOTATION.Codepreuve=3 AND NOTATION.Codepreuve=6, un codepreuve ne peut pas tre
simultanment gal 3 et 6

Le rsultat est alors le suivant :


NomCandidat NOTATION.Codepreuve NOTATION.Note NOTATION_1.Codepreuve NOTATION_1.Note
GERS

ROSI

Solution propose par Serge Vial Acadmie de Grenoble

F. REDONNET

Page 6/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

D/ La diffrence
Elle consiste slectionner les lignes figurant dans une relation A mais pas dans une relation B.
La structure des relations doit tre identiques
DIFFERENCE

a1
a4

a2

a3
a5

Relation A

xy
z

b1 b2
b3
b4
Relation B

Notation SQL :
Selection A MINUS Selection B
Les relations doivent avoir la mme structure. Cet oprateur nest pas reconnu dans ACCESS
Exemple :
A partir de la base de donnes gesnotes.MDB, on veut connatre la liste des lves (nom) nayant pas eu
de notes une preuve
1) On slectionne tous les
SELECT Nomcandidat
candidats
FROM CANDIDAT
MINUS
SELECT DISTINCT NomCandidat
FROM CANDIDAT
WHERE CANDIDAT.NumCandidat=NOTATION.NumCandidat
2)On slectionne tous les candidats ayant
pass au moins une preuve

La diffrence entre 1 et 2 donne bien les candidats nayant aucune note


Autre version dans ACCESS
SELECT Distinct NomCandidat
FROM NOTATION, CANDIDAT
WHERE CANDIDAT.Numcandidat NOT IN (SELECT NumCandidat
FROM NOTATION
WHERE CANDIDAT.NumCandidat=NOTATION.NumCANDIDAT);
1)On slectionne tous
les candidats

F. REDONNET

2) On fait une jointure sur le numro de candidat


partir dune requte imbrique permettant de
connatre les candidats ayant pass lexamen.
Loprateur NOT permet de faire la diffrence et
dobtenir ainsi les candidats nayant pas de note

Page 7/8

http://www.brikoboutikstt.fr.st

BTS CGO1 P10 Chap 5-4

APPLICATION :
A partir de la base de donnes BIBLIOTHEQUE.MDB et du modle relationnel correspondant, formulez
sur papier puis dans access les requtes SQL permettant dobtenir les rponses suivantes :
R1
R2
R3

Quels sont les livres (titres) qui nont jamais t emprunts ?


Quels sont les auteurs nayant aucun livre dans la base de donnes
A quels dates les livres A travers le temps et Zro absolus ont il t
emprunts ?
R4
Quels sont les livres ayant t emprunts la fois par Eric JULIANA et
Alexia KILOURIEN ? (A faire directement en QBE dans ACCESS)
R5
Pour la priode du 01/01/02 au 31/05/02 quels sont les journes o aucun
emprunt de livres na t ralis ?
REVISIONS SUR LES REQUETES OPERATIONS
R6
Quel est le nombre de livres emprunts par chaque adhrent
R7
Quels sont les adhrents ayant emprunt au moins deux fois le mme livre
R8
Le livre En pleine lumire a t dgrad. On voudrait connatre le nom de
chaque emprunteur ainsi que la date (rsultats tris par date)
R9
Quels sont les emprunteurs ayant conserv un ouvrage plus de 10 jours ?
R10
Pour chaque genre de roman, combien y a til de livre au total

F. REDONNET

Page 8/8