CPGE Oujda                                                                                                                                                Spé

SQL/interrogation d’une base de données

Group by/having/order by/union/intersect

GROUP BY

La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une fonction de totaux sur un groupe de résultat. Sur une table qui contient toutes les ventes d’un magasin, il est par exemple possible de liste regrouper les ventes par clients identiques et d’obtenir le coût total des achats pour chaque client.

Syntaxe

SELECT colonne1, fonction(colonne2)

FROM table

GROUP BY colonne1

Prenons en considération une table « achat » qui résume les ventes d’une boutique :

id

client

tarif

date

1

Pierre

102

2012-10-23

2

Simon

47

2012-10-27

3

Marie

18

2012-11-05

4

Marie

20

2012-11-14

5

Pierre

160

2012-12-03

Pour obtenir le coût total de chaque client en regroupant les commandes des mêmes clients, il faut utiliser la requête suivante :

SELECT client, SUM(tarif)  FROM achat  GROUP BY client

   
   
   
   

Utilisation d’autres fonctions de statistiques

Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs enregistrements, il s’agit des fonctions d’agrégations statistiques, les principales sont les suivantes :

HAVING

La condition HAVING en SQL est presque similaire à WHERE à la seule différence que HAVING permet de filtrer en utilisant des fonctions telles que SUM(), COUNT(), AVG(), MIN() ou MAX().

Syntaxe

SELECT colonne1, SUM(colonne2)

FROM nom_table

GROUP BY colonne1

HAVING fonction(colonne2) operateur valeur

Si dans la table précédente on souhaite récupérer la liste des clients qui ont commandé plus de 40€, toute commandes confondu alors il est possible d’utiliser la requête suivante :

SELECT client, SUM(tarif)

FROM achat

GROUP BY client

HAVING SUM(tarif) > 40

Résultat :

client

SUM(tarif)

Pierre

262

Simon

47

La cliente « Marie » a cumulée 38€ d’achat (un achat de 18€ et un autre de 20€) ce qui est inférieur à la limite de 40€ imposée par HAVING. En conséquent cette ligne n’est pas affichée dans le résultat.

SQL ORDER BY

La commande ORDER BY permet de trier les lignes dans un résultat d’une requête SQL.

Syntaxe

SELECT colonne1, colonne2

FROM table

ORDER BY colonne1

Par défaut les résultats sont classés par ordre ascendant, toutefois il est possible d’inverser l’ordre en utilisant le suffixe DESC après le nom de la colonne. Par ailleurs

Exemple

Pour l’ensemble de nos exemple, nous allons prendre un base « utilisateur » de test, qui contient les données suivantes :

id

nom

prenom

date_inscription

tarif_total

1

Durand

Maurice

2012-02-05

145

2

Dupond

Fabrice

2012-02-07

65

3

Durand

Fabienne

2012-02-13

90

4

Dubois

Chloé

2012-02-16

98

5

Dubois

Simon

2012-02-23

27

Pour récupérer la liste de ces utilisateurs par ordre alphabétique du nom de famille, il est possible d’utiliser la requête suivante :

SELECT *

FROM utilisateur

ORDER BY nom

Résultat :

id

nom

prenom

date_inscription

tarif_total

4

Dubois

Chloé

2012-02-16

98

5

Dubois

Simon

2012-02-23

27

2

Dupond

Fabrice

2012-02-07

65

1

Durand

Maurice

2012-02-05

145

3

Durand

Fabienne

2012-02-13

90

UNION

C’est donc une commande qui permet de concaténer les résultats de 2 requêtes ou plus.

Syntaxe

SELECT * FROM table1

UNION

SELECT * FROM table2

Exemple

SELECT * FROM magasin1_client

UNION

SELECT * FROM magasin2_client

SQL INTERSECT

Cette commande permet donc de récupérer les enregistrements communs à 2 requêtes.

Syntaxe

SELECT * FROM table1

INTERSECT

SELECT * FROM table2

Dans cet exemple, il faut que les 2 tables soient similaires (mêmes colonnes, mêmes types et même ordre). Le résultat correspondra aux enregistrements qui existent dans table1 et dans table2.

Exemple

SELECT * FROM magasin1_client

INTERSECT

SELECT * FROM magasin2_client