Zaafrane Dhekra Département d'Informatique
Section : L1 TIC
AU: 2022 – 2023
Travaux Dirigés et Pratiques N°4
Base de Données « SQL »
Partie 1 :
• FONCTIONS D'AGRÉGATION EN SQL :
COUNT , SUM, AVG, MIN ET MAX
- La fonction d'agrégation SQL est utilisée pour effectuer les calculs sur plusieurs lignes d'une
seule colonne d'une table. Elle retourne une valeur unique.
- Elle est également utilisée pour résumer les données.
- Les cinq fonctions d'agrégation sont :
1. COUNT
- La fonction COUNT est utilisée pour compter le nombre de lignes dans une table de base
de données. Il peut fonctionner sur les types de données numériques et non numériques.
- La fonction COUNT utilise COUNT (*) qui renvoie le nombre de toutes les lignes d'une
table spécifiée.
Remarque : COUNT(*) considère les doublons et Null.
Syntaxe :
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
2. SUM
La fonction SUM renvoie la somme de toutes les valeurs de la colonne
spécifiée. SUM fonctionne uniquement sur les champs numériques.
Syntaxe :
SELECT SUM (column_name)
FROM table_name
WHERE condition ;
3. AVG
La fonction AVG renvoie la moyenne des valeurs d'une colonne spécifiée. Tout comme la
fonction SUM, elle ne fonctionne que sur les types de données numériques.
Syntaxe :
SELECT AVG (column_name)
FROM table_name
WHERE condition ;
4. MIN
La fonction MIN est utilisée pour déterminer la plus petite valeur de toutes les valeurs
sélectionnées d'une colonne.
Syntaxe :
SELECT MIN(column_name)
FROM table_name
WHERE condition;
5. MAX
Comme son nom l'indique, la fonction MAX est l'opposé de la fonction MIN. Elle renvoie
la plus grande valeur de toutes les valeurs sélectionnées d'une colonne.
Syntaxe :
SELECT MAX(column_name)
FROM table_name
WHERE condition;
• ORDER BY
- L’instruction ORDER BY dans SQL est utilisée pour trier les données extraites par ordre
croissant ou décroissant selon une ou plusieurs colonnes.
- Par défaut, ORDER BY trie les données par ordre croissant.
- Vous pouvez utiliser le mot-clé DESC pour trier les données par ordre décroissant et le
mot-clé ASC pour trier par ordre croissant.
Syntaxe
SELECT liste-colonnes
FROM nom_table
[WHERE condition]
[ORDER BY colonne1, colonne2, .. ] [ASC | DESC];
Lorsque vous utilisez ORDER BY sur plusieurs colonnes, le tri commence par la première
colonne, si deux ou plusieurs enregistrements ont le même rang, alors le tri passe à la colonne
suivante, etc.
• GROUP BY
- La clause GROUP BY en SQL permet d’organiser des données identiques en groupes à l’aide
de certaines fonctions. C'est-à-dire si une colonne particulière a les mêmes valeurs dans
différentes lignes, elle organisera ces lignes dans un groupe.
- La clause GROUP BY est utilisée avec l'instruction SELECT.
- Dans la requête, la clause GROUP BY est placée après la clause WHERE.
- Dans la requête, la clause GROUP BY est placée avant la clause ORDER BY si elle est
utilisée.
Vous pouvez également utiliser certaines fonctions d'agrégation telles que COUNT, SUM,
MIN, MAX, AVG, etc. sur la colonne groupée.
Syntaxe :
SELECT colonne1, colonne2, ... colonneN,
fonction_agregation (nom_colonne)
FROM tables
[WHERE conditions]
GROUP BY colonne1, colonne2, ... colonneN;
✓ colonne1, colonne2, ... colonneN : spécifie les colonnes(ou expressions) qui ne sont pas
encapsulées dans une fonction d'agrégation et doivent être incluses dans la
clause GROUP BY.
✓ fonction_agregation (nom_colonne) : Nom de la fonction d'agrégation utilisée, par
exemple, SUM(), AVG ()...
✓ WHERE conditions : C'est optionnel. Elle spécifie les conditions qui doivent être
remplies pour que les enregistrements soient sélectionnés.
• HAVING
- La clause HAVING pour poser des conditions afin de décider quel groupe fera partie de
l'ensemble des résultats finaux.
De plus, nous ne pouvons pas utiliser les fonctions d'agrégation telles que SUM(),
COUNT(), etc. avec la clause WHERE. Nous devons donc utiliser la clause HAVING si
nous voulons utiliser l'une de ces fonctions dans les conditions.
Syntaxe :
SELECT colonne1, colonne2, ... colonneN,
fonction_agregation (nom_colonne)
FROM tables
[WHERE conditions]
GROUP BY colonne1[, colonne2, ... colonneN]
HAVING condition ;
Partie 2 :
• Soit la table employée suivante :
ID Prénom Age Salaire Profession ID dep
1 Ismail 25 6000 Assistant 2
2 Mohamed 30 8000 Directeur 1
3 Fatima 29 6000 Directeur 3
4 Donia 30 7000 Assistant 4
5 Omar 30 9000 Ingénieur 1
6 Mustafa 29 7500 Ingénieur Null
• Soit la table département suivante :
ID dép Nom dép
1 Informatique
2 RH
3 Vente
4 Stratégies
1. Trouver le nombre des enregistrements dans la table Employés
SELECT count (*) FROM Employes;
// Cette requête produira le résultat suivant : 6
2. Trouver le nombre des employés affectés à un département
SELECT count(Dep) FROM Employes;
// Cette requête produira le résultat suivant : 5
3. Compter les différents âges de la table Employés, (sans doublons)
SELECT count(DISTINCT Age) FROM Employes;
4. Effectuer une requête qui renvoie la somme des salaires
1 SELECT SUM(Salaire) FROM Employes;
5. Effectuer une requête qui renvoie la somme des âges sans compter les valeurs dupliquées
1 SELECT SUM(DISTINCT Age) FROM Employes;
6. Effectuer une requête qui renvoie le salaire moyen de la table Employés
SELECT AVG(Salaire) FROM Employes;
7. Effectuer une requête qui renvoie le salaire minimum de la table Employés
SELECT MIN(Salaire) FROM Employes;
8. Effectuer une requête qui renvoie le salaire maximum de la table Employés
SELECT MAX(Salaire) FROM Employes;
9. Effectuer une requête qui permet d’afficher l’âge en ordre de la table employé
Distinguer la différence entre ces 4 requêtes :
SELECT * FROM Employes ORDER BY Age;
SELECT * FROM Employes ORDER BY Age DESC;
SELECT * FROM Employes ORDER BY Age, Nom DESC;
SELECT * FROM Employes ORDER BY Age DESC, Nom ASC;
10. Pour mieux comprendre l'effet de la clause GROUP BY, exécutez une requête simple qui
renvoie toutes les entrées Age de la table Employés
SELECT Age FROM Employes;
11. Supposons que nous voulions maintenant obtenir les valeurs uniques pour Age
SELECT Age FROM Employes GROUP BY Age;
12. Exécuter une requête qui compte le nombre d'employés de chaque groupe à l'aide de la
clause COUNT
SELECT Age, count(*) AS "Nombre d'employés" FROM Employes GROUP BY Age;
13. Compter le salaire moyen sur chaque groupe d'âge
SELECT Age, AVG(Salaire) AS "Salaire moyen" FROM Employes GROUP BY Age;
14. Effectuer une requête qui récupère l'identifiant du département et le nombre d'employés
dans chaque département.
SELECT Dep, COUNT(Dep) AS "Nombre d'employés" FROM Employes GROUP BY
Dep;
15. Supposons maintenant que nous voulions regrouper tous les employés en fonction de leur
âge et de leur département.
SELECT Age, Dep, COUNT(*) FROM Employes GROUP BY Age, Dep;
16. Effectuer une requête qui récupère les noms de département et le salaire moyen de chaque
département
SELECT D.Nom_dep, AVG(E.Salaire) AS "Salaire moyen"
FROM Employes AS E INNER JOIN Departement AS D
ON E.Dep=D.Id_dep
GROUP BY D.Nom_dep;
17. Supposons maintenant que nous ne voulions montrer que les départements dont le salaire
moyen est supérieur à 6000 ?
SELECT D.Nom_dep, AVG(E.Salaire) AS "Salaire moyen"
FROM Employes AS E INNER JOIN Departement AS D
ON E.Dep=D.Id_dep
GROUP BY D.Nom_dep
HAVING AVG(E.Salaire) > 6000;