Vous êtes sur la page 1sur 41

1. Le langage SQL-DDL 2.1 Introduction 2.

5 Les fonctions agrgatives


2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2. LE LANGAGE SQL DML (1)

Version 2 - Janvier 2012


modifi le 18/9/2013

Support du chapitre 7, Le langage SQL DML (1)


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 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2. LE LANGAGE SQL DML (1)


Contenu

2.1 Introduction
2.2 Extraction simple
2.3 Conditions plus complexes
2.4 Donnes extraites et donnes drives
2.5 Les fonctions agrgatives
2.6 Les sous-requtes
2.7 Les quantificateurs ensemblistes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 2
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.1 Introduction

Le sous-langage DML de SQL permet de consulter le contenu


des tables et de les modifier. Il comporte 4 verbes.

La requte select extrait des donnes des tables

La requte insert insre de nouvelles lignes dans une table

La requte delete supprime des lignes d'une table

La requte update modifie les valeurs de colonnes de lignes


existantes

Chapitres 2 et 3 : tude limite SQL2

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 3
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.1 Introduction

Ce chapitre tudie la requte select oprant sur une seule table

Toute requte select renvoie un rsultat sous la forme d'une


table

En principe, une requte select peut oprer sur le rsultat d'une


autre requte select; vrai en SQL3 mais limit en SQL2

SQL est un langage imparfait, mais c'est tout ce dont on


dispose : quand on n'a pas ce que l'on aime, il faut aimer ce
que l'on a !

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 4
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.2 Extraction simple

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 5
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.2 Extraction simple

select NCLI, NOM, LOCALITE


from CLIENT;

NCLI NOM LOCALITE

B062 GOFFIN Namur


B112 HANSENNE Poitiers
B332 MONTI Genve
B512 GILLET Toulouse
C003 AVRON Toulouse
C123 MERCIER Namur
C400 FERARD Poitiers
D063 MERCIER Toulouse
F010 TOUSSAINT Poitiers
F011 PONCELET Toulouse
F400 JACOB Bruxelles
K111 VANBIST Lille
K729 NEUMAN Toulouse
L422 FRANCK Namur
S127 VANDERKA Namur
S712 GUILLAUME Paris

select *
* = liste des colonnes
from CLIENT;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 6
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.2 Extraction simple

select NCLI, NOM


from CLIENT
where LOCALITE = 'Toulouse';

NCLI NOM

B512 GILLET
C003 AVRON
D063 MERCIER
F011 PONCELET
K729 NEUMAN

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 7
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.2 Extraction simple

select LOCALITE
from CLIENT
where CAT = 'C1';

LOCALITE

Poitiers
Namur
Poitiers
Namur
Namur

select distinct LOCALITE


from CLIENT
where CAT = 'C1';

LOCALITE

Namur
Poitiers

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 8
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.3 Conditions plus complexes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 9
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.3 Conditions plus complexes - les valeurs null

select NCLI
from CLIENT null ne peut tre compar rien,
mme pas lui-mme !
where CAT = null;

NCLI

select NCLI
from CLIENT
where CAT is null;

NCLI

D063
K729

select NCLI
from CLIENT
where CAT is not null;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 10
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.3 Conditions plus complexes - in et between

select NCLI
from CLIENT
where CAT in ('C1','C2','C3');

select NCLI
from CLIENT
where LOCALITE not in ('Toulouse','Breda');

select NCLI
from CLIENT
where COMPTE between 1000 and 4000;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 11
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.3 Conditions plus complexes - Les masques

select NCLI
'_' = un caractre
from CLIENT
quelconque
where CAT like 'B_';
masques
select NPRO
'%' = une chane
from PRODUIT quelconque
where LIBELLE like '%SAPIN%';

Un masque dfinit une famille de chanes de caractres :

'B_' 'B1' '%SAPIN%' 'PL. SAPIN 200x20x2'


'Bd' 'Boite en SAPIN'
'B ' 'SAPIN VERNI'

'B_' 'xB' '%SAPIN%' 'Boite en Sapin'


'B' 'Achetez S A P I N !'
'B12'

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 12
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.3 Conditions plus complexes - Combinaisons logiques

select NOM, ADRESSE, COMPTE


from CLIENT
where LOCALITE = 'Toulouse' and COMPTE < 0;

select NOM, ADRESSE, COMPTE


from CLIENT
where COMPTE > 0
and (CAT = 'C1' or LOCALITE = 'Paris')

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 13
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.4 Donnes extraites et donnes drives

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 14
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.4 Donnes extraires et donnes drives - expressions de calcul

select 'TVA de ', NPRO, ' = ',0.21*PRIX*QSTOCK


from PRODUIT
where QSTOCK > 500;

TVA de NPRO = 0,21*PRIX*QSTOCK

TVA de CS264 = 67788


TVA de PA45 = 12789
TVA de PH222 = 37770.6
TVA de PS222 = 47397

select NPRO as Produit, 0.21*PRIX*QSTOCK as Valeur_TVA


from PRODUIT
where QSTOCK > 500;

Produit Valeur_TVA

CS264 67788
PA45 12789
PH222 37770.6
PS222 47397

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 15
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.4 Donnes extraires et donnes drives - Fonctions SQL

Les fonctions SQL

Outre les 4 oprations arithmtiques, SQL offre une large gamme de fonctions

Chanes de caractres
trim(both ' ' from ADRESSE)||' '||upper(LOCALITE)
position('NEUVE' in upper(ADRESSE)) > 0
upper(ADRESSE) like '%'||upper(LOCALITE)||'%'

Conversion de type
cast(DATECOM as char(12))
CLI.COMPTE - cast(QCOM*PRIX as decimal(9,2))

Fonctions temporelles
extract(year from DATECOM) + 1
extract(hour from current_time) > 18

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 16
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.4 Donnes extraires et donnes drives - Fonctions SQL

Fonction de slection
select NCLI,
case substring(CAT from 1 for 1)
when 'A' then 'bon'
when 'B' then 'moyen'
when 'C' then 'occasionnel'
else 'inconnu'
end, LOCALITE
from CLIENT;

Registres du systme
current_user : identification de lutilisateur courant ;
current_date : date courante ;
current_time : instant courant ;
current_timestamp : date + instant courant.

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 17
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.5 Les fonctions agrgatives (statistiques)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 18
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.5 Les fonctions agrgatives (statistiques)

select 'Namur',avg(COMPTE) as Moyenne,


max(COMPTE)-min(COMPTE) as Ecart_max,
count(*) as Nombre
from CLIENT
where LOCALITE = 'Namur';

Namur Moyenne Ecart_max Nombre le rsultat ne comprend


Namur -2520 4580 4
qu'une seule ligne

select sum(QSTOCK*PRIX)
from PRODUIT
where LIBELLE like '%SAPIN%';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 19
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.5 Les fonctions agrgatives (statistiques)

Attention aux valeurs dupliques


select count(NCLI)
from COMMANDE;

count(NCLI)

select distinct count(NCLI)


from COMMANDE;

count(NCLI)

select count(distinct NCLI)


from COMMANDE;

count(NCLI)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 20
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.5 Les fonctions agrgatives (statistiques)

select count(NCLI) as Numeros,


count(NOM) as Noms,
count(LOCALITE) as Localites,
count(CAT) as Categories
from CLIENT;

Numeros Noms Localites Categories

16 16 16 14

select count(distinct NCLI) as Numeros,


count(distinct NOM) as Noms,
count(distinct LOCALITE) as Localites,
count(distinct CAT) as Categories
from CLIENT;

Numeros Noms Localites Categories

16 15 7 4

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 21
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.5 Les fonctions agrgatives (statistiques)

Attention aux ensembles vides

select count(*) as Nombre, sum(COMPTE) as Somme,


max(CAT) as Max
from CLIENT
where LOCALITE = 'Alger';

Nombre Somme Max

0 <null> <null>

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 22
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 23
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Principe

Les numros des clients de Namur :


select NCLI
from CLIENT
where LOCALITE = 'Namur';

NCLI

B062
C123
L422
S127

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 24
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Principe

Les numros des clients de Namur :


NCLI

B062
C123
L422
S127

Les numros 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');

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 25
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Principe

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

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 26
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Principe

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 dtails des commandes des clients de Namur

les produits rfrencs par les dtails des commandes des clients de Namur

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 27
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Condition d'association

Une condition in (sous-requte) correspond le plus souvent


une condition d'association = qui sont associs ...

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

"on recherche les T qui sont associs des S qui ..."

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 28
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Condition d'association

Remarque : symtrie 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 = '12-09-2009');

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 29
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Condition d'association

Forme ngative des conditions d'association

Quelles sont les commandes qui ne spcifient pas le produit PA60


= qui ne sont pas associes un dtail spcifiant PA60.

select NCOM, DATECOM, NCLI


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

ensemble des numros


des commandes de PA60

select NCOM, DATECOM, NCLI

from COMMANDE
where NCOM in (select NCOM
from DETAIL
where NPRO <> 'PA60');

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 30
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Rfrences multiples

Rfrences multiples une mme table

Sous-requtes corrles

select NCLI, NOM, LOCALITE, COMPTE


from CLIENT as C
where COMPTE > (select avg(COMPTE)
from CLIENT
where LOCALITE = C.LOCALITE);

C est une variable qui chaque instant rfrence la ligne courante


de CLIENT dans la requte externe (on suppose qu'on examine
successivement les lignes de CLIENT)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 31
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.6 Les sous-requtes - Rfrences multiples

Condition d'association quantifie :


recherche des commandes d'au moins 3 dtails

select NCOM, DATECOM, NCLI


from COMMANDE C
where (select count(*)
from DETAIL
where NCOM = C.NCOM) >= 3;

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 32
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 33
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - exists, not exists

exists et not exists

le prdicat exists(E), o E est une sous-requte,


est vrai si l'ensemble dsign par E est non vide

quels sont les produits pour lesquels il existe au moins un dtail ?

select NPRO, LIBELLE


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

le prdicat not exists(E),


est vrai si l'ensemble dsign par E est vide

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 34
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - all, any

all et any

quelles sont les commandes qui spcifient la plus petite quantit de PA60 ?

select distinct NCOM


from DETAIL
where QCOM <= all (select QCOM
from DETAIL
where NPRO = 'PA60')
and NPRO = 'PA60';

select distinct NCOM


from DETAIL
where QCOM = (select min(QCOM)
from DETAIL
where NPRO = 'PA60')
and NPRO = 'PA60';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 35
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - all, any

all et any

quels sont les commandes qui ne spcifient pas la plus petite quantit de PA60 ?

select *
from DETAIL
where QCOM > any (select QCOM
from DETAIL
where NPRO = 'PA60')
and NPRO = PA60;

select distinct NCOM


from DETAIL
where QCOM > (select min(QCOM)
from DETAIL
where NPRO = 'PA60')
and NPRO = 'PA60';

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 36
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - Sous-requte

Deux expressions d'une condition d'association

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

select *
from CLIENT C
where exists (select *
from COMMANDE M
where M.NCLI = C.NCLI
and DATECOM = '12-09-2009');

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 37
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - pour tout

Curieusement, SQL ne permet pas


d'exprimer directement le quantificateur pour tout

la logique nous apprend que : (" x, p(x)) ($ x, p(x))

Application : quelles sont les commandes qui spcifient tous les produits ?

la COMMANDE M est retenue select NCOM from COMMANDE M


si, where
il n'existe pas not exists
de PRODUIT P, (select * from PRODUIT P
tel que where
P n'est pas dans P.NPRO not in
l'ensemble des PRODUITs (select NPRO from DETAIL
commands par M where NCOM = M.NCOM));

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 38
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

2.7 Les quantificateurs ensemblistes - pour tout

Pour terminer, un dfi pour les experts :


que signifie la requte suivante ?

select NCOM
from DETAIL
group by NCOM
having count(distinct NPRO) = (select count(*) from PRODUIT);

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 39
1. Le langage SQL-DDL 2.1 Introduction 2.5 Les fonctions agrgatives
2. Le langage SQL DML (1) 2.2 Extraction simple 2.6 Les sous-requtes
3. Le langage SQL DML (2) 2.3 Conditions plus complexes 2.7 Les quantificateurs ensemblistes
4. Le langage SQL avanc 2.4 Donnes extraites et drives

Fin du module 2

Module suivant :
3. Le langage SQL DML (2)

azerty
II. Utilisation des bases de donnes Bases de donnes J-L Hainaut 2012 40
azerty Bases de donnes J-L Hainaut 2012 41