Bloc 1 — TD/TP PostgreSQL
Thèmes : introduction, modèle, mises à jour, persistance, interrogation
A. Modèle & lecture de données
Créer le schéma
- Version simplifier des tables (sans contraintes).
Lister le catalogue
- Objectif : prise en main de
SELECT,ORDER BY. - (client_app) Lister
idv, ville, activite, prixtriés par ville asc, prix desc.
- Objectif : prise en main de
Déduplication
- Lister les villes distinctes (
DISTINCT) et, séparément, les activités distinctes.
- Lister les villes distinctes (
Top-K
- Obtenir les 3 villages les plus chers du catalogue (
ORDER BY … LIMIT).
- Obtenir les 3 villages les plus chers du catalogue (
B. Mises à jour (INSERT/UPDATE/DELETE/ALTER) + RETURNING
Inscription
- (client_app) Insérer un·e client·e et récupérer
idcavecINSERT … RETURNING.
- (client_app) Insérer un·e client·e et récupérer
Nouveau village
- (employee_app) Insérer un village à Rio avec une activité libre et un prix > 90.
- Mettre à jour son prix (ex. +10), puis le renommer en modifiant l’activité.
- Supprimer ce village d’essai.
- À chaque étape, montrez l’effet via
… RETURNINGou unSELECTavant/après.
Évolution du modèle
- Ajouter une colonne
note textàvillage, puis la retirer. - Renommer la colonne
activiteenactivitépuis remettreactivite(découvrirALTER TABLE … RENAME COLUMN).
- Ajouter une colonne
C. Interrogation simple à intermédiaire
Filtres
- Villages à Rio dont
prix∈ [50,80], triés décroissant. - Même question en insistant sur la casse (
ILIKE).
- Villages à Rio dont
Jointure de base
- Lister les séjours avec
nom client,ville,activite,debut,fin. - Calculer la durée en nuits :
(fin - debut)(laisser comme integer).
- Lister les séjours avec
Agrégats/HAVING
- Par ville : nombre de villages, prix moyen, min, max.
- Ne garder que les villes dont le prix moyen ≥ 60 (
HAVING).
Sous-requêtes / anti-jointure
- Clients sans aucun séjour (
NOT EXISTSouLEFT JOIN … IS NULL). - Villages sans séjour (même technique).
- GREATEST-N-per-group (plus cher par ville)
- Pour chaque ville, retourner le village au prix max (résoudre le tie avec
idv asc). - Variante : même requête via fenêtres sera pour plus tard ; ici, utilisez sous-requête +
max(prix).