You are on page 1of 58

1. Le langage SQL-DDL 3.1 Jointures 3.

5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3. LE LANGAGE SQL DML (2)

Version 2 - Janvier 2012

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


de l'ouvrage Bases de donnes, J-L Hainaut, Dunod 2009.

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 1
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3. LE LANGAGE SQL DML (2)


Contenu

3.1 Les jointures


3.2 Oprateurs ensemblistes
3.3 Structures cycliques
3.4 Donnes groupes
3.5 Ordre et interprtation
3.6 Modification des donnes
3.7 Modification des structures

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 2
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 3
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures

La jointure permet de produire une table constitue de donnes


extraites de plusieurs tables :

colonne commune

NCOM DATECOM NCLI NOM LOCALITE

30178 21/12/2008 K111 VANBIST Lille


30179 22/12/2008 C400 FERARD Poitiers
30182 23/12/2008 S127 VANDERKA Namur
30184 23/12/2008 C400 FERARD Poitiers
30185 2/01/2009 F011 PONCELET Toulouse
30186 2/01/2009 C400 FERARD Poitiers
30188 3/01/2009 B512 GILLET Toulouse

table COMMANDE table CLIENT

select NCOM, DATECOM, CLIENT.NCLI, NOM, LOCALITE


from COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 4
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Structure d'une requte de jointure

NCOM DATECOM NCLI NOM LOCALITE

30178 21/12/2008 K111 VANBIST Lille


30179 22/12/2008 C400 FERARD Poitiers
30182 23/12/2008 S127 VANDERKA Namur
30184 23/12/2008 C400 FERARD Poitiers
30185 2/01/2009 F011 PONCELET Toulouse
30186 2/01/2009 C400 FERARD Poitiers
30188 3/01/2009 B512 GILLET Toulouse

prfixe ncessaire car ambiguit

select NCOM , DATECOM, CLIENT.NCLI, NOM, LOCALITE


from COMMANDE, CLIENT plusieurs tables

where COMMANDE.NCLI = CLIENT.NCLI

condition de jointure

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 5
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Variantes

select CLIENT.NCLI, NOM, DATECOM, NPRO


from CLIENT, COMMANDE, DETAIL jointure de 3 tables
where CLIENT.NCLI = COMMANDE.NCLI
and COMMANDE.NCOM = DETAIL.NCOM;

select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE


from COMMANDE, CLIENT condition de jointure
where COMMANDE.NCLI = CLIENT.NCLI +
and CAT = 'C1' conditions de slection
and DATECOM < '23-12-2009';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 6
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Produit relationnel

select NCOM, CLIENT.NCLI, DATECOM, NOM, ADRESSE pas de condition


from COMMANDE, CLIENT; de jointure !

Produit relationnel :
chaque ligne de COMMANDE est couple avec chaque ligne de CLIENT

requte valide mais d'utilit rduite

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 7
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Notion de ligne clibataire

La requte :

select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE


from COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI;

. . . ignore les lignes de CLIENT


qui n'ont pas de lignes correspondantes dans COMMANDE

Ces lignes de CLIENT sont dites clibataires :

select '--', NCLI, '--', NOM, LOCALITE


from CLIENT
where not exists (select * from COMMANDE
where NCLI = CLIENT.NCLI);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 8
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Sous-requtes ou jointures ?

Peut-on remplacer une sous-requte 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';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 9
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Sous-requtes ou jointures ?

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';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 10
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Sous-requtes ou jointures ?

La sous-requte permet de formuler


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

La jointure permet de formuler


une condition d'association

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 11
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Valeurs drives dans une jointure

select NCOM, D.NPRO, QCOM*PRIX


from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO;

select 'Montant commande 30184 = ', sum(QCOM*PRIX)


from DETAIL D, PRODUIT P
where D.NCOM = '30184'
and D.NPRO = P.NPRO;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 12
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Jointures gnralises

select distinct PRODUIT,VILLE,PRIX


from VENTE V, IMPLANTATION I
where V.CHAINE = I.CHAINE;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 13
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Interprtation du rsultat d'une jointure

Une ligne de CLIENT reprsente un client.


Une ligne de COMMANDE reprsente une commande.

Que reprsente chaque ligne de la jointure CLIENT * COMMANDE :

select C.NCLI, NOM, LOCALITE


from CLIENT C, COMMANDE M
where M.NCLI = C.NCLI;

un client ?
un client qui a pass une commande ?
une commande ?

Autre formulation : il y autant de lignes dans le rsultat quil y a


de clients ?
de clients qui ont pass des commandes ?
de commandes ?

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 14
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Interprtation du rsultat d'une jointure

select *
from TA, TB
where TA.IA = TB.RA;


TB

Le rsultat d'une jointure FK/Id reprsente les entits


de la table de la cl trangre

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 15
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.1 Les jointures - Interprtation du rsultat d'une jointure

select COMMANDE.NCOM,DATECOM,NCLI
from COMMANDE,DETAIL
where COMMANDE.NCOM = DETAIL.NCOM;

select D.NCOM,D.NPRO,LOCALITE,LIBELLE
from CLIENT CLI,COMMANDE COM,DETAIL D,PRODUIT P
where CLI.NCLI = COM.NCLI
and COM.NCOM = D.NCOM
and D.NPRO = P.NPRO;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 16
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes

union ()
Pas de problmes pour deux ensembles.
intersection ()
Mais qu'en est-il pour deux tables ?

diffrence (-)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 17
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes - Les ensembles

Oprateurs 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
JACOB

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 18
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes - Les multi-ensembles

Oprateurs 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

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 19
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes - Les multi-ensembles

Oprateurs 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

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 20
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes - Expressions complexes

Les oprateurs peuvent tre combins (ex. diffrence symtrique)


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)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 21
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.2 Oprations ensemblistes - Jointure externe

Exemple pratique : la jointure externe

select NCOM, CLIENT.NCLI, DATECOM, NOM, LOCALITE


from COMMANDE, CLIENT
where COMMANDE.NCLI = CLIENT.NCLI
union
select null as NCOM, NCLI, null as DATECOM, NOM, LOCALITE
from CLIENT
where not exists (select * from COMMANDE
where NCLI = CLIENT.NCLI);

En SQL3, il existe un oprateur spcifique (left | right outer join)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 22
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques

Une table peut-elle se rfrencer elle-mme ?

Comment utiliser une telle table ?

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 23
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure directe

p1 p2

p4 p3 p8

p6 p5

p7

create table PERSONNE ( NPERS char (4) not null,


NOM char(25) not null,
RESPONSABLE char (4),
primary key (NPERS),
foreign key (RESPONSABLE)
references PERSONNE);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 24
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure directe

Associer chaque subordonn


le numro et le nom de son responsable :
select S.NPERS, R.NPERS, R.NOM
from PERSONNE S, PERSONNE R
where S.RESPONSABLE = R.NPERS;

Associer chaque personne de nom 'Dupont'


le numro et le nom de son responsable :
select S.NPERS, R.NPERS, R.NOM
from PERSONNE S, PERSONNE R
where S.RESPONSABLE = R.NPERS
and S.NOM = 'Dupont'
union
select NPERS, '--', '--'
from PERSONNE
where RESPONSABLE is null and NOM = 'Dupont';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 25
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure directe

En SQL2, il n'est pas possible de retrouver en une seule requte


tous les responsables (ou les subordonns) directs et indirects
d'une personne.

En SQL3 : on pourra utiliser une requte rcursive.

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 26
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure indirecte

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 27
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure indirecte

create table PRODUIT ( NPRO char(4) not null primary key,


LIBELLE char(25) not null,
PRIX_U char(4),
POIDS_U char(4));

create table COMPOSITION ( COMPOSE char(4) not null references PRODUIT,


COMPOSANT char(4) not null references PRODUIT,
QTE decimal(4) not null,
primary key (COMPOSE,COMPOSANT));

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 28
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure indirecte

table PRODUIT
P1 P5

table COMPOSITION
2 1 2 2 7

P2 P3 P4 P6
3.5

8 2 5 4 5 5

P7 P8 P9 P10
8 5

2 4 3
P11 P12
0.5 1.7
PRIX_U

Structure typique d'une nomenclature de produits


ou Bill of material (BoM)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 29
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.3 Les structures cycliques - Structure indirecte

Donner la composition du produit 'p4'

select H.NPRO,H.LIBELLE,C.QTE,B.NPRO,B.LIBELLE
from PRODUIT H, COMPOSITION C, PRODUIT B
where C.COMPOSE = H.NPRO
and C.COMPOSANT = B.NPRO
and H.NPRO = 'p4';

H.NPRO H.LIBELLE C.QTE B.NPRO B.LIBELLE

p4 B-122 4 p8 G-993
p4 B-122 5 p9 F-016
p4 B-122 5 p10 J-500

PRODUIT compos (Haut) PRODUIT composant (Bas)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 30
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 31
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Principe

le groupe des clients de Genve

le groupe des clients de Namur

le groupe des clients de Poitiers

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 32
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Principe

select LOCALITE,
count(*) as NOMBRE_CLIENTS,
avg(COMPTE) as MOYENNE_COMPTE
from CLIENT
group by LOCALITE;

LOCALITE NOMBRE_CLIENTS MOYENNE_COMPTE

Bruxelles 1 0.00 le groupe des clients de Genve


Geneve 1 0.00
Lille 1 720.00
Namur 4 -2520.00 le groupe des clients de Namur
Paris 1 0.00
Poitiers 3 533.33
Toulouse 5 -2530.00 le groupe des clients de Poitiers

On s'intresse aux localits et non plus aux clients

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 33
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Slection de groupes

select LOCALITE, count(*), avg(COMPTE)


from CLIENT
group by LOCALITE
having count(*) >= 3;

LOCALITE count(*) avg(COMPTE)

Namur 4 -2520.00
Poitiers 3 533.33
Toulouse 5 -2530.00

select NCLI, count(*)


from COMMANDE
group by NCLI
having count(*) >= 2;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 34
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Slection de lignes et de groupes

select NCLI, count(*)


from COMMANDE
where NCOM in ( select NCOM
from DETAIL
where NPRO = 'PA45')
group by NCLI
having count(*) >= 2;

slection des lignes

slection des groupes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 35
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Groupes dans une jointure

select M.NCLI, count(*), sum(QCOM)


from COMMANDE M, DETAIL D
where M.NCOM = D.NCOM
and NPRO = 'PA45'
group by M.NCLI
having count(*) >= 2;

select 'Montant d par ',C.NCLI,' = ',sum(QCOM*PRIX)


from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where LOCALITE = 'Poitiers'
and M.NCLI = C.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by M.NCLI;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 36
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Liste select et critre de groupement

[*]
select P.NPRO, QSTOCK - sum(D.QCOM) as SOLDE
from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
group by P.NPRO;

select P.NPRO, QSTOCK - sum(D.QCOM) as SOLDE


from DETAIL D, PRODUIT P
where D.NPRO = P.NPRO
group by P.NPRO, QSTOCK;

NPRO SOLDE

CS262 -15
CS464 -135
PA45 535
PA60 -1
PH222 690
PS222 620

[*] sauf en MySQL, mais il n'y a pas de quoi en tre fier !

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 37
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Composition du critre de groupement

select LOCALITE,P.NPRO,sum(QCOM*PRIX) as Montant


from CLIENT C, COMMANDE M, DETAIL D, PRODUIT P
where M.NCLI = C.NCLI
and M.NCOM = D.NCOM
and D.NPRO = P.NPRO
group by LOCALITE, P.NPRO;

select substring(CAT from 1 for 1) as CAT, count(*) as N


from CLIENT
group by substring(CAT from 1 for 1);

CAT N

null 2
B 8
C 6

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 38
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Composition du critre de groupement

select "de ", int(COMPTE/1000)*1000 as Min,


" ", int(COMPTE/1000)*1000 + 999 as Max,
count(*) as N
from CLIENT C
group by int(COMPTE/1000);

de Min Max N

de -9000 -8001 1
de -5000 -4001 1
de -4000 -3001 1
de -3000 -2001 2
de -2000 -1001 1
de 0 999 9
de 1000 1999 1

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 39
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.4 Les donnes groupes - Groupements multiniveaux

select LOCALITE, sum(COMPTE), count(*)


from CLIENT C, COMMANDE M
where C.NCLI = M.NCLI
group by LOCALITE;

LOCALITE sum(COMPTE) count(*)

Lille 720.00 1
Namur -4580.00 1
Poitiers 1050.00 3
Toulouse -8700.00 2

FAUX (=350)

En SQL2, impossible en une seule requte

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 40
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.5 Ordre et interprtation

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 41
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.5 Ordre et interprtation - Ordre des lignes du rsultat

select NCLI, NOM, LOCALITE


from CLIENT ordonn par
where CAT in ('C1','C2') LOCALITE
order by LOCALITE;

select * ordonn par


from CLIENT LOCALITE
puis par CAT
order by LOCALITE, CAT;

select LOCALITE, count(*) as POPULATION, sum(COMPTE)


from CLIENT ordonn par
une expression
group by LOCALITE du select
order by POPULATION desc;

select NCOM, NPRO, QCOM


from DETAIL D, PRODUIT P ordonn par
une expression
where D.NPRO = P.NPRO explicite
order by NCOM, QCOM*PRIX desc;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 42
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.5 Ordre et interprtation - Comment lire (crire) une requte ?

7 : select NCLI, count(*), sum(QCOM)


1 : from COMMANDE M, DETAIL D
2 : where M.NCOM = D.NCOM
3 : and NPRO = 'PA60'
4 : group by NCLI
5 : having count(*) >= 2
6 : order by NCLI

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 43
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes

Trois oprateurs :
Insrer des lignes
Supprimer des lignes
Modifier des lignes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 44
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Insertion de lignes

Insrer une ligne

insert into DETAIL values ('30185','PA45',12);

insert into CLIENT (NCLI,NOM,ADRESSE,COMPTE,LOCALITE)


values ('C402','BERNIER','avenue de France, 28',-2500,'Lausanne');

colonnes facultatives, valeurs par dfaut

Insrer plusieurs lignes (dans une table)

insert into CLIENT_TOULOUSE


select NCLI, NOM, ADRESSE
from CLIENT
where LOCALITE = 'Toulouse';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 45
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Suppression de lignes

delete from CLIENT


where NCLI = 'K111';

delete from DETAIL


where NPRO in (select NPRO
from PRODUIT
where QSTOCK <= 0);

delete from CLIENT


where CAT is null;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 46
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Modification de lignes

update CLIENT
set ADRESSE = '29, av. de la Magne',
LOCALITE = 'Niort'
where NCLI = 'F011';

update PRODUIT
set PRIX = PRIX * 1.05
where LIBELLE like '%SAPIN%';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 47
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Modification de lignes

update PRODUIT P
set QSTOCK = QSTOCK - (select sum(QCOM)
! from DETAIL
where NPRO = P.NPRO);

update PRODUIT P
set QSTOCK = QSTOCK - (select sum(QCOM)
from DETAIL
where NPRO = P.NPRO)
where exists (select * from DETAIL
where NPRO = P.NPRO);

En ralit, le problme sera autre : la modification chouera par violation de


la contrainte not null associe QSTOCK.
Lintgrit des donnes ne sera pas vraiment mise en danger !

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 48
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Intgrit rfrentielle

COMMANDE CLIENT
NCOM NCLI
NCLI NOM
DATECOM ADRESSE
id: NCOM id: NCLI
ref: NCLI

{NCLI} cl trangre de COMMANDE


vers CLIENT

insrer une ligne la valeur de NCLI doit tre prsente dans la


de COMMANDE colonne NCLI d'une ligne de CLIENT

modifier valeur de NCLI la nouvelle valeur de NCLI doit tre prsente


de COMMANDE dans la colonne NCLI d'une ligne de CLIENT

supprimer une ligne l'intgrit rfrentielle doit tre satisfaite plusieurs


comportements
de CLIENT aprs l'opration possibles

plusieurs
modifier valeur de NCLI l'intgrit rfrentielle doit tre satisfaite
comportements
de CLIENT aprs l'opration possibles

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 49
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Intgrit rfrentielle

COMMANDE CLIENT
NCOM NCLI
NCLI NOM
DATECOM ADRESSE
id: NCOM id: NCLI
ref: NCLI

{NCLI} cl trangre de COMMANDE vers


Comportement
CLIENT

opration refuse si lignes de COMMANDE


1. mode no action dpendantes

ligne supprime mais aussi les lignes de


2. mode cascade
COMMANDE dpendantes
supprimer
une ligne (si NCLI de COMMANDE facultative) la colonne
de CLIENT 3. mode set null NCLI des lignes dpendantes de COMMANDE est
mise null

(si default pour NCLI de COMMANDE) la colonne


4. mode set default NCLI des lignes dpendantes de COMMANDE est
mises la valeur par dfaut

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 50
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Intgrit rfrentielle

Mode bloquant (no action)


create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete no action);

create table COMMANDE ( NCOM char(12) not null,


NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on update no action);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 51
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Intgrit rfrentielle

Mode propagation (cascade)


create table COMMANDE ( NCOM char(12) not null,
NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete cascade);

create table COMMANDE ( NCOM char(12) not null,


NCLI char(10) not null,
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on update cascade);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 52
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Intgrit rfrentielle

Mode dcouplage (set null, set default)


create table COMMANDE ( NCOM char(12) not null,
NCLI char(10),
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete set null);

create table COMMANDE ( NCOM char(12) not null,


NCLI char(10),
...,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on update set null);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 53
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.6 Modification des donnes - Attention aux hirarchies de cls trangres

create table CLIENT ( NCLI char(10) not null,


primary key (NCLI) );

create table COMMANDE ( NCOM char(12) not null,


NCLI char(10) not null,
primary key (NCOM),
foreign key (NCLI) references CLIENT
on delete cascade);

create table DETAIL ( NCOM char(12) not null,


NPRO char(15) not null,
foreign key (NCOM) references COMMANDE
on delete no action);

N'y a-t-il pas contradiction ?

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 54
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.7 Modification des structures de donnes

Si la base de donnes n'est pas vide, la modification des


structures peut tre soumise des contraintes.

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 55
1. Le langage SQL-DDL 3.1 Jointures 3.5 Ordre et interprtation
2. Le langage SQL DML (1) 3.2 Oprateurs ensemblistes 3.6 Modification des donnes
3. Le langage SQL DML (2) 3.3 Structures cycliques 3.7 Modification des structures
4. Le langage SQL avanc 3.4 Donnes groupes

3.7 Modification des structures de donnes

Ajout d'une colonne : si facultative : OK


si default : OK
sinon : la table doit tre vide

Suppression d'une colonne : si pas composant d'un identifiant : OK


si pas composant d'une cl trangre : OK
sinon : d'abord supprimer l'identifiant ou cl trangre

Suppression d'une table : si pas cible d'une cl trangre : OK


sinon : d'abord supprimer la cl trangre

Ajout d'un identifiant : si table vide : OK


sinon : d'abord vrifier l'unicit des donnes

Ajout d'un cl trangre : si table vide : OK


sinon : d'abord vrifier l'intgrit rfrentielle des donnes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 56
1. Le langage SQL-DDL
2. Le langage SQL DML (1)
3. Le langage SQL DML (2)
4. Le langage SQL avanc

Fin du module 3

Module suivant :
4. Le langage SQL avanc

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 57
azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 58

You might also like