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 !
1 Lancement des services
1.1 Datalab du GENES ou SSPCloud
Connectez-vous à l’une des 2 instances suivantes d’Onyxia (elles sont quasiment identiques) :
-
- si besoin de créer un compte, utilisez votre mail ENSAI
L’instance du GENES est plus récente donc encore en cours de rodage. Celle de l’INSEE est plus ancienne et donc plus robuste.
Pour éviter les problèmes de charges, vous utiliserez selon votre profil :
- élèves fonctionnaires ➡️ SSPCloud
- élèves ingénieurs ➡️ SSPCloud ou Datalab du GENES
1.2 Base de données PostgreSQL
-
- Lien direct de lancement : Datalab GENES ou SPPCloud
- ou manuellement : Catalogue de services ➡️ Databases ➡️
Lancer
- Configuration Postgresql ➡️ Primary : Mettez tous les paramètres au minimum (Persistent volume size, CPU, Memory)
- Cela permettra d’éviter de réserver inutilement des ressources dont vous n’aurez pas besoin
- Cliquez sur
Lancer
1.3 CloudBeaver
Nous venons de créer un SGBD, nous avons maintenant besoin d’un outil de gestion pour s’y connecter et envoyer des requêtes.
-
- Catalogue de services ➡️ Databases
Normalement la connexion à la base de données PostgreSQL est détectée automatiquement.
Dans le cas contraire, il faut cliquer sur le +, puis sur New connection et renseigner les éléments de connexion.
Cela ouvre une fenêtre où vous pouvez écrire du code SQL pour interagir avec votre base de données.
1.4 VM ENSAI
Uniquement en cas de soucis avec les Datalabs, vous pouvez faire le TP sur la VM.
Un serveur héberge une base de données PostgreSQL.
Pour vous connecter à votre bdd, lancez le logiciel DBeaver depuis votre VM. Ensuite, uniquement la première fois, vous devrez effectuer le paramètrage ci-dessous et créer la connexion à votre bdd.
Paramètrage
- Menu
Fenêtre
>Preference
- Formatage SQL
- Casse des mots clefs :
UPPER
- Appliquer
- Casse des mots clefs :
- Metadonnées
- Décocher
Ouvrir une connexion séparée pour la lecture des métadonnées
- Décocher
- Editeur SQL
- Décocher
Ouvrir une connexion séparée pour chaque éditeur
- Décocher
- Formatage SQL
Création de la connexion PostgreSQL
- Cliquer sur l’icone
Nouvelle connexion
en haut à gauche sous fichier - Sélectionner
PostgreSQL
puis suivant- Host :
sgbd-eleves.domensai.ecole
- Port :
5432
- Database :
idxxxx
- Nom d’utilisateur :
idxxxx
- Mot de passe :
idxxxx
Test de connexion
- Acceptez les mises à jour des pilotes
Terminer
- Host :
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
Commencez par lister les tables nécessaires, puis joignez les. Ici nous avons besoin des 2 tables.
Utilisez pour l’instant SELECT *
pour sélectionner toutes les colonnes.
SELECT *
FROM joueuse j
JOIN club c USING(id_club);
2.2 Appliquez les filtres
Pour ne garder 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
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
SELECT j.nom,
j.prenomFROM joueuse j
JOIN club c USING(id_club)
WHERE c.ville = 'Saint Quentin'
AND j.prenom LIKE 'A%'
ORDER BY j.elo DESC;
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)
-
- 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( INT PRIMARY KEY, num_realisateur nom_realisateur TEXT, prenom_realisateur TEXT); CREATE TABLE dvd.film( INT PRIMARY KEY, num_film titre TEXT, genre TEXT,DATE); date_sortie CREATE TABLE dvd.a_realise( INT REFERENCES dvd.film(num_film), num_film INT REFERENCES dvd.realisateur(num_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
film
n’existe pas, à votre avis, que va-t-il se passer ?
Requêtes
Donnez les requêtes pour obtenir :
Pour les 3 requêtes suivantes, vous afficherez les noms et prénoms sur une seule colonne. Utilisez le mot clé AS
pour renommer cette colonne à 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 votre service
C’est la fin du TP, vous pouvez maintenant sauvegarder votre travail et libérer les ressources réservées :
-
- par exemple dans
P:/Cours1A/UE3-Bases-de-donnees-relationnelles/TP2/tp2.sql
- ou en téléchargeant depuis CloudBeaver le fichier sql (petit bouton avec un dossier et une flèche vers le bas)
- par exemple dans