TP 2 : Agrégats, Choix multiple et Dates
Description
Ce TP poursuit l'apprentissage SQL sur la base Comptoir2000 en se concentrant sur :
- Agrégats : Fonctions d'agrégation (COUNT, SUM, AVG, MIN, MAX), GROUP BY, HAVING
- Choix multiple : Instructions CASE pour du SQL conditionnel
- Dates : Manipulation et extraction de dates avec STRFTIME
Schéma de la base de données
La base Comptoir2000 contient les tables principales :
Categorie (🔑 CodeCateg, NomCateg, Description)
Client (🔑 CodeCli, Societe, Contact, Fonction, Adresse, Ville, Region, CodePostal, Pays, Tel, Fax)
Commande (🔑 NoCom, 🔗 CodeCli, 🔗 NoEmp, DateCom, ALivAvant, DateEnv, NoMess, Port, Destinataire, AdrLiv, VilleLiv, RegionLiv, CodepostalLiv, PaysLiv)
DetailCommande (🔑🔗 Nocom, 🔑🔗 Refprod, PrixUnit, Qte, Remise)
Employe (🔑 NoEmp, Nom, Prenom, Fonction, TitreCourtoisie, DateNaissance, DateEmbauche, Adresse, Ville, Region, Codepostal, Pays, TelDom, Extension, RendCompteA)
Fournisseur (🔑 NoFour, Societe, Contact, Fonction, Adresse, Ville, Region, CodePostal, Pays, Tel, Fax, PageAccueil)
Messager (🔑 NoMess, NomMess, Tel)
Produit (🔑 Refprod, Nomprod, 🔗 NoFour, 🔗 CodeCateg, QteParUnit, PrixUnit, UnitesStock, UnitesCom, NiveauReap, Indisponible)
Conseils pour bien démarrer
- Testez vos requêtes progressivement en commençant simple, puis ajoutez complexité
- Pour les agrégats : n'oubliez pas que
WHEREfiltre par lignes AVANT l'agrégation,HAVINGqui filtre par groupe APRÈS - Pour les dates :
STRFTIMEpermet d'extraire année, mois, jour ('%Y','%m','%d') - Utilisez les indices pour vérifier votre compréhension du concept, pas pour vous éviter de vous tromper, c'est comme ça que l'on apprend.
Exemples de requêtes SQL de manipulation de dates
-- Extraire l'année d'une date
SELECT STRFTIME('%Y', DateCom) AS AnneeCommande FROM Commande;
-- Compter les commandes par année
SELECT STRFTIME('%Y', DateCom) AS Annee, COUNT(*) AS NombreCommandes
FROM Commande
GROUP BY Annee;
Exemples de requêtes SQL utilisant Having
-- Compter les produits par catégorie et ne garder que celles avec plus de 10 produits
SELECT Categorie, COUNT(*) AS NombreProduits
FROM Produit
GROUP BY Categorie
HAVING NombreProduits > 10;