📚 Fiche Résumé - Séance 8 : SQL SELECT

🎯 Objectifs de la séance

📖 1. SELECT de base

Sélectionner toutes les colonnes

SELECT * FROM MATIERE;

Affiche toutes les colonnes de la table MATIERE.

Sélectionner des colonnes spécifiques

SELECT nomMatiere, coefficient FROM MATIERE;

Affiche uniquement les colonnes spécifiées.

Éliminer les doublons avec DISTINCT

SELECT DISTINCT codeModule FROM MATIERE;

DISTINCT élimine les lignes en double dans les résultats.

Alias avec AS

SELECT nomMatiere AS Matiere, coefficient AS Coef FROM MATIERE;

Renomme temporairement les colonnes dans l'affichage.

🔍 2. Filtrer avec WHERE

Condition simple

SELECT * FROM MATIERE WHERE codeMatiere = 'INF220';

Opérateurs de comparaison

SELECT nomMatiere, coefficient FROM MATIERE WHERE coefficient >= 2.0;

BETWEEN (entre deux valeurs)

SELECT * FROM MATIERE WHERE coefficient BETWEEN 1.5 AND 2.5;

Équivalent à coefficient >= 1.5 AND coefficient <= 2.5

IN (liste de valeurs)

SELECT * FROM MATIERE WHERE nomMatiere IN ('Anglais', 'Mathématiques');

Opérateur LIKE (motifs)

Exemples :
-- Commence par 'S'
SELECT nom FROM ETUDIANT WHERE nom LIKE 'S%';

-- Termine par 'S'
SELECT ville FROM ETUDIANT WHERE ville LIKE '%S';

-- Contient 'S'
SELECT ville FROM ETUDIANT WHERE ville LIKE '%S%';

-- Deuxième caractère est 'O'
SELECT ville FROM ETUDIANT WHERE ville LIKE '_O%';

-- 5ème caractère n'est pas 'D'
SELECT rue FROM ETUDIANT WHERE rue NOT LIKE '____D%';

📊 3. Fonctions d'agrégation

COUNT (compter)

SELECT COUNT(*) FROM MATIERE;
SELECT COUNT(DISTINCT nomMatiere) AS Total FROM MATIERE;

AVG (moyenne)

SELECT AVG(coefficient) AS MoyenneCoef FROM MATIERE;

SUM (somme)

SELECT SUM(coefficient) AS SommeCoef FROM MATIERE;

MIN et MAX (minimum et maximum)

SELECT MIN(coefficient) AS CoefMin, MAX(coefficient) AS CoefMax FROM MATIERE;
⚠️ Important : Les fonctions d'agrégation retournent une seule valeur pour l'ensemble des lignes sélectionnées.

📋 4. Trier avec ORDER BY

Ordre croissant (ASC) - par défaut

SELECT nomMatiere, coefficient FROM MATIERE ORDER BY coefficient;

Ordre décroissant (DESC)

SELECT nomMatiere, coefficient FROM MATIERE ORDER BY coefficient DESC;

Tri multiple

SELECT nomMatiere, coefficient 
FROM MATIERE 
ORDER BY nomMatiere DESC, coefficient ASC;

Trie d'abord par nomMatiere (décroissant), puis par coefficient (croissant).

👥 5. Regrouper avec GROUP BY

Principe

GROUP BY regroupe les lignes ayant la même valeur pour une colonne.

Compter par groupe

-- Nombre d'étudiants par classe
SELECT codeClasse, COUNT(*) AS NbEtudiants 
FROM ETUDIANT 
GROUP BY codeClasse;

Moyenne par groupe

-- Taille moyenne par classe
SELECT codeClasse, AVG(taille) AS TailleMoyenne 
FROM ETUDIANT 
GROUP BY codeClasse;
⚠️ Règle : Avec GROUP BY, vous ne pouvez sélectionner que :

🔗 6. Jointures (2 tables)

Équijointure avec WHERE

SELECT E.numEtudiant, E.nom, E.prenom, C.nomClasse
FROM ETUDIANT E, CLASSE C
WHERE E.codeClasse = C.codeClasse;

Jointure naturelle avec INNER JOIN

SELECT E.numEtudiant, E.nom, E.prenom, C.nomClasse
FROM ETUDIANT E
INNER JOIN CLASSE C ON E.codeClasse = C.codeClasse;
💡 Ces deux syntaxes donnent le même résultat !

INNER JOIN est plus standard et plus lisible.

Jointure avec filtres

SELECT C.nomClasse, COUNT(*) AS NbEtudiants
FROM ETUDIANT E
INNER JOIN CLASSE C ON E.codeClasse = C.codeClasse
WHERE E.dateNaissance > '2005-01-01'
GROUP BY C.nomClasse;

✅ Points clés à retenir

📝 Exemples de requêtes complètes

-- Afficher les étudiants de Paris
SELECT nom, prenom, ville 
FROM ETUDIANT 
WHERE ville = 'Paris';

-- Compter les matières par coefficient
SELECT coefficient, COUNT(*) AS NbMatieres 
FROM MATIERE 
GROUP BY coefficient 
ORDER BY coefficient;

-- Étudiants avec leur classe (jointure)
SELECT E.nom, E.prenom, C.nomClasse
FROM ETUDIANT E
INNER JOIN CLASSE C ON E.codeClasse = C.codeClasse
WHERE E.ville LIKE 'B%'
ORDER BY E.nom;