Académique Documents
Professionnel Documents
Culture Documents
M1 Gestion
Alain Berro
Exemple
Client NumCli NomCli RueCli CPCli VilleCli
C1 TOTO Rue Banc 31000 Toulouse
C2 TITI Rue Deux 31700 Saint Gaudens
C3 TOTO Rue Gir 33000 Bordeaux
C4 LULU Rue Bis 64000 Pau
C5 TATA Rue Elle 31500 Toulouse
Produit NumProd Desig PU
LigneF NumFact# NumProd# Qte
P1 Veste T50 300 F1 P1 1
P2 Pantalon T40 45 F1 P2 2
P3 Chemise T40 45 F1 P3 1
P4 Chaussure T43 75 F1 P4 2
P5 Veste T52 300 F2 P1 1
F3 P2 2
Livrer NumFact# NumLiv# NumProd# DateLiv
F3 1 P2 12/01/2002 F3 P3 3
F2 2 P1 28/01/2002 F4 P3 35
F3 2 P3 15/02/2002
Facture NumFact DateF NumCli#
F1 02/01/2002 C1
Livreur NumLiv RaisonSoc Tel
F2 15/01/2002 C2
1 Rapid-Liv 0562262626 F3 28/01/2002 C1
2 ExpressLiv 0531323334 F4 05/02/2002 C3
2
Fonctions d’agrégation en SQL
• Définition
– Les fonctions d’agrégation dans le langage SQL
permettent d’effectuer des opérations statistiques sur
un ensemble de valeurs d’un même attribut (colonne).
– Count : compte le nombre de valeurs non vides d’une colonne
– Sum : additionne les valeurs d'une colonne
– Avg : effectue la moyenne des valeurs d'une colonne
– Min : renvoie la plus petite valeur d'une colonne
– Max : renvoie la plus grande valeur d'une colonne
– Exemples
• Quel est le nombre de clients ?
SELECT Count (NumCli)
FROM Client ;
• Quel est le plus petit prix de produit ?
3
Partition d’ensemble en SQL
• Clause GROUP BY (regroupement)
– Principe
• Permet de créer des partitions d'ensembles et ainsi de
pouvoir faire des calculs sur chaque partie de la partition.
• S’utilise après une clause WHERE.
– Exemples
• Pour chaque client, combien de commandes/factures a-t-il
effectuées ?
SELECT Count (NumFact)
FROM Facture
GROUP BY NumCli ;
• Pour chaque facture, combien de produits différents ont été
commandés/facturés ?
4
Partition d’ensemble en SQL
– Remarques
• SELECT contient des fonctions d’ensembles ou des attributs
contenus dans GROUP BY.
• GROUP BY contient les attributs non calculés du SELECT
(servant au regroupement) éventuellement complétés d’une
clé primaire.
– Exemples
• Pour chaque client (numéro et nom), combien de
commandes/factures a-t-il effectuées ?
SELECT Client.NumCli, NomCli, Count (NumFact)
FROM Client, Facture
WHERE Client.NumCli = Facture.NumCli
GROUP BY Client.NumCli, NomCli ;
• Pour chaque facture (numéro et date), combien de produits
différents ont été commandés/facturés ?
5
Partition d’ensemble en SQL
• Clause HAVING
– Principe
• Introduit un critère de sélection à appliquer aux lignes d'une
partition et à non d'une relation entière.
• Se place après un GROUP BY.
– Exemple
• Quels clients ont passé au moins 2 commandes/factures ?
SELECT Count (NumFact)
FROM Facture
GROUP BY NumCli
HAVING Count (Numfact) >=2 ;
6
Partition d’ensemble en SQL
– Remarque : WHERE / HAVING
• WHERE : condition de sélection sur l’ensemble des lignes
d’une table
• HAVING : condition de sélection sur les lignes d’une partition
• Combinaison possible
7
Algèbre relationnelle
• Partition/regroupement et agrégation
– Permet de regrouper toutes les lignes d’une table qui
ont les mêmes valeurs pour certains champs, dans le
but de faire des calculs sur celles-ci (en utilisant des
fonctions d’agrégation) puis d’appliquer un critère de
sélection éventuel sur le résultat.
I
Champ(s) Champ_k
regrouper fonctionAgrég
critère
8
Algèbre relationnelle
• Partition/regroupement et agrégation
Table I a b c Regrouper les a b c
en entrée 100 oui 10 lignes d’après 100 oui 10
200 non 20 le champ c 300 non 10
300 non 10 600 non 10
400 oui 30 400 oui 30
500 non 20 200 non 20
600 non 10 500 non 20
Compter le nombre
c a de valeurs non vides
regrouper compter pour le champ a dans
Garder seulement chaque groupe
<=2
les lignes où
c compter_a
compter(a) <= 2
Table R c compter_a 10 3
résultat 30 1 30 1
20 2 20 2
9
De l’algèbre relationnelle au SQL
• Partition/regroupement et agrégation
Champ(s) Champ_k
regrouper fonctionAgrég
critère
COTOYER
SELECT
P_Nom EM_Nom
regrouper compter
12
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
COTOYER
SELECT
EM_Nom P_Nom
regrouper compter
13
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
13. Trouvez la distance totale couverte par chaque fleuve dans les
pays qu’il traverse.
TRAVERSER SELECT
F_Nom distance
regrouper somme
R
14
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
TRAVERSER SELECT
R
15
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
15. Idem 14, mais en ne considérant que les fleuves qui traversent
plus d’un pays.
TRAVERSER SELECT
R 16
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
ESPACES_MARITIMES
SELECT
EM_Nom
count
17
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
17. Idem 12, et le type de chaque espace maritime doit être affiché.
COTOYER ESP_MAR
COTOYER.EM_Nom
= ESP_MAR.EM_Nom SELECT
R1
R2
18
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
FLEUVES
FLEUVES
F_Longueur = SELECT
F_Longueur
min
F_Nom
R1
19
Exercice : BD géo
PAYS (P_Nom, P_Superficie, P_NbHabitants)
ESPACES_MARITIMES (EM_Nom, EM_Type)
FLEUVES (F_Nom, F_Longueur, P_Nom_source*, EM_Nom_jette*)
FRONTIERE (P_Nom_estfrontalier*, P_Nom_apourfrontalier*)
TRAVERSER (F_Nom*, P_Nom*, distance)
COTOYER (P_Nom*, EM_Nom*)
19. Nom des pays plus grands que la superficie moyenne des pays.
PAYS
PAYS
R1
20