Vous êtes sur la page 1sur 28

3.1 Jointures 3.

5 Ordre et interprétation
3.2 Opérateurs ensemblistes 3.6 Modification des données
3.3 Structures cycliques 3.7 Modification des structures
3.4 Données groupées

SQL DML LANGUAGE (2)

DML Instructions
Data Manipulation Language (langage de manipulation
de données)

Support du chapitre 8, Le langage SQL DML (2)


de l'ouvrage Bases de données, J-L Hainaut, Dunod 2009.
SQL DML LANGUAGE (2)
Contenu

Sous-Requêtes
Les quantificateurs ensemblistes : exists, not exists
Sous-Requêtes

Les sous-requêtes (également appelées requêtes


internes ou requêtes imbriquées) permettent
d'effectuer des opérations en plusieurs étapes.
Sous-Requêtes - Principes

Les numéros des clients de Namur :


select NCLI
from CLIENT
where LOCALITE = 'Namur';

NCLI

B062
C123
L422
S127
Sous-Requêtes - Principes

Les numéros des clients de Namur :


NCLI

B062
C123
L422
S127

Les numéros des commandes des clients de Namur :


select NCOM, DATECOM
from COMMANDE
where NCLI in ('C123','S127','B062','L422');
Sous-Requêtes - Principes

Les numéros des clients de Namur :


NCLI

B062
C123
L422
S127

Les numéros des commandes des clients de Namur :


select NCOM, DATECOM
from COMMANDE
where NCLI in ('C123','S127','B062','L422');

mieux :

select NCOM, DATECOM


from COMMANDE
where NCLI in (select NCLI
from CLIENT
where LOCALITE = 'Namur');
Sous-Requêtes - Principes

select *
from PRODUIT
where NPRO in
(select NPRO
from DETAIL
where NCOM in
(select NCOM
from COMMANDE
where NCLI in
(select NCLI
from CLIENT
where LOCALITE='Namur')));
Les sous-requêtes - Principes

select *
from PRODUIT
where NPRO in
(select NPRO
from DETAIL
where NCOM in
(select NCOM
from COMMANDE
where NCLI in
(select NCLI
from CLIENT
where LOCALITE='Namur')));

les clients de Namur

les commandes des clients de Namur

les détails des commandes des clients de Namur

les produits référencés par les détails des commandes des clients de Namur
Sous-requêtes - Condition d'association

Une condition in (sous-requête) correspond le plus souvent


à une condition d'association = qui sont associés à ...

select *
from T
where CT in (select CS
from S
where <condition>);

"on recherche les T qui sont associés à des S qui ..."


Sous-requêtes - Condition d'association

Remarque : symétrie des conditions d'association

select *
from COMMANDE
where NCLI in (select NCLI
from CLIENT
where LOCALITE = 'Namur');

select *
from CLIENT
where NCLI in (select NCLI
from COMMANDE
where DATECOM = '21-12-2020');

Attention format date 21-DEC-2020


ACCESS #21-12-2020#
Sous-requêtes - Condition d'association

Forme négative des conditions d'association

Quelles sont les commandes qui ne spécifient pas le produit PA60


= qui ne sont pas associées à un détail spécifiant PA60.
Sous-requêtes - Condition d'association

Forme négative des conditions d'association

Quelles sont les commandes qui ne spécifient pas le produit PA60


= qui ne sont pas associées à un détail spécifiant PA60.

select NCOM, DATECOM, NCLI


from COMMANDE
where NCOM not in (select NCOM
from DETAIL
where NPRO = 'PA60');

ensemble des numéros


des commandes de PA60
Sous-requêtes - Condition d'association

Forme négative des conditions d'association

Quelles sont les commandes qui ne spécifient pas le produit PA60


= qui ne sont pas associées à un détail spécifiant PA60.

select NCOM, DATECOM, NCLI


from COMMANDE
where NCOM not in (select NCOM
from DETAIL
where NPRO = 'PA60');

ensemble des numéros


des commandes de PA60

select NCOM, DATECOM, NCLI

 from COMMANDE
where NCOM in (select NCOM
from DETAIL
where NPRO <> 'PA60');
Les quantificateurs ensemblistes
Quantificateurs ensemblistes - exists, not exists

exists ET not exists

Le prédicat exists(E), où E est une sous-requête, est true


si l’ensemble désigné par E n’est pas vide.

quels sont les produits pour lesquels il existe au moins un détail ?


Quantificateurs ensemblistes - exists, not exists

exists ET not exists

Le prédicat exists(E), où E est une sous-requête, est true


si l’ensemble désigné par E n’est pas vide.

quels sont les produits pour lesquels il existe au moins un détail ?

select NPRO, LIBELLE


from PRODUIT P
where exists (select *
from DETAIL
where NPRO = P.NPRO);

Le prédicat not exists(E), est true si l’ensemble désigné par E


est vide.
Quantificateurs ensemblistes – Sous-Requêtes

Deux expressions d'une condition d'association

select *
from CLIENT
where NCLI in (select NCLI
from COMMANDE
where DATECOM = '12-09-2020');

select *
from CLIENT C
where exists (select *
from COMMANDE M
where M.NCLI = C.NCLI
and DATECOM = '12-09-2020');
SQL DML LANGUAGE (2)
Contenu

Création de tables
Opérateurs ensemblistes
UNION, INTERSECT and EXCEPT

Hélas, INTERSECT and EXCEPT ne sont pas implémentés


dans tous les SGBBR
REQUETE DE SELECTION AVEC CREATION D'UNE
NOUVELLE TABLE

Il est possible d'enregistrer la table résultant d'une requête en


complétant l'ordre SELECT de la manière suivante :
Opérateurs ensemblistes

union ()
Pas de problèmes pour deux ensembles.
intersection ()
Mais qu'en est-il pour deux tables ?

différence (-)
3.2 Opérations ensemblistes - Les ensembles

Opérateurs ensemblistes entre 2 tables sans doublons


T1 T2 T1 T2
NOM NOM AVRON
GILLET JACOB
GILLET MONTI MERCIER
AVRON NEUMAN PONCELET MONTI
MERCIER JACOB NEUMAN
PONCELET MERCIER
NEUMAN AVRON

select NOM select NOM select NOM


from T1 from T1 from T1
union intersect except
select NOM select NOM select NOM
from T2 from T2 from T2

NOM NOM NOM


GILLET AVRON GILLET
AVRON MERCIER PONCELET
MERCIER NEUMAN
PONCELET
NEUMAN
MONTI Access : utiliser Opérateurs Exists
JACOB
pour INTERSECTION et not exists POUR
DIFFERENCE
3.2 Opérations ensemblistes - Les multi-ensembles

Opérateurs ensemblistes entre 2 tables avec doublons


T1 T2 T1 T2
NUM NUM 34 34
12 93
12 93 12 12
34 12 27 12 12 49
27 34
12 12
12 49

select NUM select NUM select NUM select NUM


from T1 from T1 from T1 from T2
union intersect except except
select NUM select NUM select NUM select NUM
from T2 from T2 from T2 from T1

NUM NUM NUM NUM


12 34 27 93
34 12 49
27
93
49
Access : utiliser Opérateurs Exists
ou In pour INTERSECTION et not
exists ou not in POUR DIFFERENCE
3.2 Opérations ensemblistes - Les multi-ensembles

Opérateurs multi-ensemblistes entre 2 tables avec doublons


T1 T2 T1 T2
NUM NUM 34 34
12 93
12 93 12 12
34 12 27 12 12 49
27 34
12 12
12 49

select NUM select NUM select NUM select NUM


from T1 from T1 from T1 from T2
union all intersect all except all except all
select NUM select NUM select NUM select NUM
from T2 from T2 from T2 from T1

NUM NUM NUM NUM


12 34 12 93
12 12 27 49
12 12
34
27
12
12
34
93
49
3.2 Opérations ensemblistes - Expressions complexes

Les opérateurs peuvent être combinés (ex. différence symétrique)


T1 T2 T1 T2
NOM NOM AVRON
GILLET JACOB
GILLET MONTI MERCIER
AVRON NEUMAN PONCELET MONTI
MERCIER JACOB NEUMAN
PONCELET MERCIER
NEUMAN AVRON

(select NOM
from T1
except NOM
select NOM
from T2) GILLET

union  PONCELET
JACOB
(select NOM MONTI
from T2
except
select NOM
from T1)
SOUS REQUÊTE OU JOINTURE
Sous-Requêtes ou Jointure ?

Peut-on remplacer une sous-requête par une Jointure ?

select NCOM,DATECOM
from COMMANDE
where NCLI in (select NCLI
from CLIENT
where LOCALITE = 'Poitiers');

=
select NCOM,DATECOM
from COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI
and LOCALITE = 'Poitiers';
Sous-Requêtes ou Jointure ?

Mais ...

select NCOM, DATECOM, NCLI


from COMMANDE
where NCOM not in ( select NCOM
from DETAIL
where NPRO = 'PA60');


select distinct COMMANDE.NCOM, DATECOM, NCLI
from COMMANDE, DETAIL
where COMMANDE.NCOM = DETAIL.NCOM
and NPRO <> 'PA60';


select distinct COMMANDE.NCOM, DATECOM, NCLI
from COMMANDE, DETAIL
where COMMANDE.NCOM <> DETAIL.NCOM
and NPRO = 'PA60';
Sous-Requêtes ou Jointure ?

La sous-requête permet de formuler


• une condition d'association (in)
• une condition de non-association (not in)

La jointure permet de formuler


• une condition d'association

Vous aimerez peut-être aussi