Exercices vintages đŸ
Introduction
Lors du premier TP, nous avons utilisĂ© DuckDB pour lire les donnĂ©es dâun fichier parquet. Aujourdâhui nous allons crĂ©er notre propre base de donnĂ©es PostgreSQL, puis y dĂ©clarer des tables et insĂ©rer de donnĂ©es. Enfin nous allons requĂȘter ces donnĂ©es.
Lors de ce TP, vous allez :
- Créer votre base de données PostgreSQL
- Lancer des scripts de crĂ©ation de tables et dâinsertion de donnĂ©es
- Relier des tables en utilisant les jointures
- Sélectionner et filtrer des données
- Ăcrivez des requĂȘtes jolies !
- Ă la fin du TP, exportez ou copiez vos requĂȘtes dans un fichier de votre VM ou machine personnelle
1 Lancement des services
Pour plus de dĂ©tails, allez dans lâonglet Datalab.
-
- ouvrez ce service
- vĂ©rifiez que vous ĂȘtes connectĂ©s Ă la base de donnĂ©es PostgreSQL
- ouvrez la connexion (clic droit > Open), un petit rond vert apparait đą
cloudBeaver est parfois capricieux, en cas de blocage, nâhĂ©sitez pas Ă rafraichir la page (F5).
En attendant le lancement des services, voici un peu de lecture ci-dessous.
2 MĂ©thodo : Ăcrire une requĂȘte
Il est parfois difficile dâĂ©crire du premier coup LA requĂȘte qui rĂ©pond directement Ă la question posĂ©e.
Voici une mĂ©thode qui peut vous aider Ă Ă©crire vos requĂȘtes pas Ă pas :
2.1 Listez les tables nécessaires
Commençons par lister les tables nécessaires, puis joignons-les.
Nous avons besoin ici des 2 tables que nous pouvons joindre en utilisant la colonne id_club.
SELECT *
FROM joueuse j
JOIN club c USING(id_club);- Nous utilisons pour lâinstant
SELECT *pour sélectionner toutes les colonnes- nous enleverons les colonnes inutiles plus tard
- Nous utilisons des alias, cela rendra la requĂȘte plus courte et plus claire
- j pour joueuse
- c pour club
2.2 Appliquez les filtres
Filtrons pour ne conserver que les lignes qui nous intéressent.
- Ville du club : Saint Quentin
- Prénom qui commence par un A
SELECT *
FROM joueuse j
JOIN club c USING(id_club)
WHERE c.ville = 'Saint Quentin'
AND j.prenom LIKE 'A%';2.3 Ordonnez les résultats
Ordonnons par elo décroissant.
SELECT *
FROM joueuse j
JOIN club c USING(id_club)
WHERE c.ville = 'Saint Quentin'
AND j.prenom LIKE 'A%'
ORDER BY j.elo DESC;2.4 Sélectionner les colonnes requises
Il est demandé de ne garder que les noms et prénoms des joueuses.
Remplaçons le SELECT * par les noms des colonnes.
SELECT j.nom,
j.prenom
FROM joueuse j
JOIN club c USING(id_club)
WHERE c.ville = 'Saint Quentin'
AND j.prenom LIKE 'A%'
ORDER BY j.elo DESC;Maintenant, place Ă quelques exercices historiques.
3 Exercices
3.1 Ăcole de musique đž
Nous allons commencer par créer les tables et insérer les données :
-
- Cliquez sur la petite icone sous les triangles oranges qui ressemble Ă đ
- raccourci (ALT + X)
- En cas dâerreur, corrigez, puis relancez intĂ©gralement le script
-
- Dans lâexplorateur : PostgreSQL âĄïž Databases âĄïž defaultdb âĄïž Schemas
- Clic droit sur Schemas âĄïž Refresh
Si tout est ok, vous nâavez plus besoin du script de crĂ©ation et dâinsertion de donnĂ©es.
Voici le modÚle de données :
Vous pouvez maintenant commencer lâexercice et Ă©crire les requĂȘtes permettant de rĂ©pondre aux questions suivantes :
RĂ©alisez les jointures qui permettent dâobtenir :
3.2 Location de DVD đż
Il fut un temps oĂč des entreprises se spĂ©cialisaient dans la location de DVD. Dans cet exercice, une telle entreprise souhaite informatiser la gestion des prĂȘts.
Voici le ModÚle de données :
Création de tables
-
DROP SCHEMA IF EXISTS dvd CASCADE; CREATE SCHEMA dvd; CREATE TABLE dvd.realisateur( num_realisateur INT PRIMARY KEY, nom_realisateur TEXT, prenom_realisateur TEXT); CREATE TABLE dvd.film( num_film INT PRIMARY KEY, titre TEXT, genre TEXT, date_sortie DATE); CREATE TABLE dvd.a_realise( num_film INT REFERENCES dvd.film(num_film), num_realisateur INT REFERENCES dvd.realisateur(num_realisateur), PRIMARY KEY (num_film, num_realisateur));
Attention, ici lâordre de crĂ©ation des tables a son importance.
Reprenons et modifions lâexemple ci-dessus :
- imaginez que vous essayez de créer en premier la table
a_realise - le champ num_film de cette table est une clé étrangÚre
- il référence la clé primaire num_film de la table
film - or si la table
filmnâexiste pas, Ă votre avis, que va-t-il se passer ?
RequĂȘtes
Donnez les requĂȘtes pour obtenir :
Pour connaitre la version utilisée : SELECT version();
Pour les 3 requĂȘtes suivantes, vous afficherez les noms et prĂ©noms sur une seule colonne.
Utilisez le mot clĂ© AS pour nommer cette colonne nom_complet Ă lâaffichage.
Il existe différentes maniÚres de concaténer du texte :
- fonctions PostgreSQL CONCAT(), CONCAT_WS()
- opérateur
||
Utilisons maintenant des mĂ©thodes dâagrĂ©gation pour rĂ©pondre aux questions suivantes :
Quelques questions sur les dates :
Pour terminer cet exercice, nous allons rechercher les titres des films qui nâont jamais Ă©tĂ© empruntĂ©s. ProcĂ©dons par Ă©tapes et Ă©crivez les requĂȘtes suivantes :
3.3 Rugby World Cup đ
Nous souhaitons informatiser les résultats de la coupe du monde de rugby. Pour cela nous avons créé les deux tables suivantes : equipe et matches.
Commencez par créez et charger les tables avec ce script.
-
- Date du match
- Nom de la premiÚre équipe
- nombre de points de la premiÚre équipe
- nombre de points de la deuxiÚme équipe
- nom de la deuxiÚme équipe et lieu du match
ArrĂȘtez vos services
Câest la fin du TP, vous pouvez maintenant sauvegarder votre travail et libĂ©rer les ressources rĂ©servĂ©es :