Numérique et Sciences Informatiques > Bases de Données > Langage SQL (Structured Query Language) > Requêtes SELECT (sélection, projection, jointures, conditions WHERE)

Exemples Avancés de Requêtes SELECT en SQL

Explorez des techniques avancées de requêtes SELECT en SQL, incluant les sous-requêtes et les fonctions d'agrégation (COUNT, AVG, MAX, MIN, SUM). Approfondissez vos compétences en manipulation de données avec des exemples adaptés au niveau lycée.

Introduction aux Techniques Avancées

Après avoir maîtrisé les bases des requêtes SELECT, il est temps d'explorer des techniques plus avancées qui permettent de manipuler les données de manière plus sophistiquée. Nous allons aborder ici les sous-requêtes et les fonctions d'agrégation, qui sont des outils puissants pour répondre à des questions complexes sur vos données. Ces techniques permettent de réaliser des analyses plus approfondies et d'obtenir des informations synthétiques à partir de vos bases de données.

Sous-Requêtes (Subqueries)

Une sous-requête est une requête SELECT imbriquée à l'intérieur d'une autre requête. Elle permet d'utiliser le résultat d'une requête comme condition ou source de données pour une autre requête. Les sous-requêtes peuvent apparaître dans la clause WHERE, FROM ou SELECT.

Exemple: Supposons que vous vouliez trouver tous les étudiants qui ont une note supérieure à la moyenne des notes.

SELECT Nom, Prenom FROM Etudiants WHERE ID_Etudiant IN (SELECT ID_Etudiant FROM Notes WHERE Note > (SELECT AVG(Note) FROM Notes));

Dans cet exemple:
- (SELECT AVG(Note) FROM Notes) est une sous-requête qui calcule la moyenne des notes.
- SELECT ID_Etudiant FROM Notes WHERE Note > ... sélectionne les identifiants des étudiants dont la note est supérieure à la moyenne.
- SELECT Nom, Prenom FROM Etudiants WHERE ID_Etudiant IN (...) sélectionne le nom et le prénom des étudiants correspondant aux identifiants trouvés par la sous-requête.

Les sous-requêtes peuvent être corrélées (dépendent de la requête principale) ou non corrélées (indépendantes de la requête principale). Il est important de bien comprendre leur fonctionnement pour éviter les erreurs et optimiser les performances.

Fonctions d'Agrégation (COUNT, AVG, MAX, MIN, SUM)

Les fonctions d'agrégation permettent de calculer des valeurs synthétiques à partir d'un ensemble de données. Elles sont utilisées pour résumer des informations et obtenir des statistiques. Les fonctions d'agrégation les plus courantes sont :

- COUNT(): Compte le nombre de lignes.
- AVG(): Calcule la moyenne des valeurs.
- MAX(): Trouve la valeur maximale.
- MIN(): Trouve la valeur minimale.
- SUM(): Calcule la somme des valeurs.

Exemple: Pour calculer le nombre total d'étudiants, la moyenne des âges, l'âge maximum et minimum:

SELECT COUNT(*) AS NombreEtudiants, AVG(Age) AS MoyenneAge, MAX(Age) AS AgeMaximum, MIN(Age) AS AgeMinimum FROM Etudiants;

Les fonctions d'agrégation sont souvent utilisées avec la clause GROUP BY pour regrouper les données par catégorie et calculer des statistiques pour chaque groupe. Par exemple, pour calculer la moyenne des notes par matière:

SELECT Matiere, AVG(Note) AS MoyenneNote FROM Notes GROUP BY Matiere;

La Clause GROUP BY

La clause GROUP BY permet de regrouper les lignes qui ont la même valeur dans une ou plusieurs colonnes. Elle est utilisée en combinaison avec les fonctions d'agrégation pour calculer des statistiques par groupe. Il est important de noter que toutes les colonnes non agrégées dans la clause SELECT doivent apparaître dans la clause GROUP BY.

Exemple: Pour obtenir le nombre d'étudiants par ville:

SELECT Ville, COUNT(*) AS NombreEtudiants FROM Etudiants GROUP BY Ville;

La clause HAVING permet de filtrer les groupes après l'application de la clause GROUP BY. Elle est similaire à la clause WHERE, mais elle s'applique aux groupes et non aux lignes individuelles.

Exemple: Pour obtenir les villes qui ont plus de 10 étudiants:

SELECT Ville, COUNT(*) AS NombreEtudiants FROM Etudiants GROUP BY Ville HAVING COUNT(*) > 10;

Combinaison de Sous-Requêtes et Fonctions d'Agrégation

Il est possible de combiner des sous-requêtes et des fonctions d'agrégation pour résoudre des problèmes complexes. Par exemple, pour trouver les étudiants dont la note est supérieure à la moyenne des notes dans leur matière:

SELECT Etudiants.Nom, Etudiants.Prenom, Notes.Matiere, Notes.Note FROM Etudiants INNER JOIN Notes ON Etudiants.ID_Etudiant = Notes.ID_Etudiant WHERE Notes.Note > (SELECT AVG(Note) FROM Notes AS N2 WHERE N2.Matiere = Notes.Matiere);

Dans cet exemple:
- La sous-requête (SELECT AVG(Note) FROM Notes AS N2 WHERE N2.Matiere = Notes.Matiere) calcule la moyenne des notes pour chaque matière. L'alias N2 est utilisé pour distinguer la table Notes dans la sous-requête de la table Notes dans la requête principale.
- La requête principale sélectionne les étudiants dont la note est supérieure à la moyenne des notes dans leur matière.

Ce qu'il faut retenir

  • Les sous-requêtes sont des requêtes SELECT imbriquées dans d'autres requêtes.
  • Les fonctions d'agrégation (COUNT, AVG, MAX, MIN, SUM) permettent de calculer des valeurs synthétiques.
  • La clause GROUP BY regroupe les lignes qui ont la même valeur dans une ou plusieurs colonnes.
  • La clause HAVING filtre les groupes après l'application de la clause GROUP BY.

Ces techniques permettent de réaliser des analyses de données plus complexes et d'obtenir des informations plus détaillées.

FAQ

  • Quand utiliser une sous-requête?

    Utilisez une sous-requête lorsque vous avez besoin d'utiliser le résultat d'une requête comme condition ou source de données pour une autre requête.
  • Quelle est la différence entre WHERE et HAVING?

    WHERE filtre les lignes avant le regroupement, tandis que HAVING filtre les groupes après le regroupement.
  • Comment optimiser les performances des requêtes avec des sous-requêtes?

    Essayez de réécrire les sous-requêtes en utilisant des jointures (JOIN) lorsque cela est possible, car les jointures sont souvent plus performantes.