Requête
Objectifs
Comment manipuler les données ?
Cours
F pour passer en plein écran ou O pour afficher la vue d'ensemble.
Versions sans animation, plein écran, imprimable.
Exercices
Beekeeper Studio
- Ouvrir Beekeeper Studio et se connecter à la base de données
Demo Databasedéjà présente dans l'application.- La barre latérale gauche permet de naviguer entre les différentes bases de données.
- Sélectionner la connexion
Demo Database. Si elle n'est pas présente, la télécharger. - Se connecter à la base de données.
- Explorer les tables disponibles.
- Double-cliquer sur une table pour afficher son contenu.
- Combien de types de fromages sont présents dans la table
cheeses? - De quel pays provient le fromage
Gouda? - Quels fromages ont les meilleurs avis ?
- Exécuter la requête
Demo Query.- Aller dans
Saved Queries>Demo Query. - Cliquer sur
Run Allpour exécuter la requête. - Observer le résultat.
- Que fait la requête ?
- Aller dans
Personne
- Se déconnecter de la base de données.
- En bas à gauche, cliquer sur le nom de la connexion >
Disconnect.
- En bas à gauche, cliquer sur le nom de la connexion >
- Créer une nouvelle base de données
person.- Cliquer sur
New Connection>SQLite>Create New Database. - Nommer la base de données
person.db. - Cliquer sur
Connect.
- Cliquer sur
- Créer une nouvelle table
personavec les colonnes suivantes :id:INTEGER PRIMARY KEY AUTOINCREMENT(clé primaire entier auto-incrémentée)name:VARCHAR(50)(chaîne de caractères de longueur variable de 50 caractères maximum)email:VARCHAR(100)age:SMALLINT(entier signé sur 2 octets)- Exécuter la commande suivante :
-
CREATE TABLE person (id INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(50) NOT NULL,email VARCHAR(100),age SMALLINT NOT NULL);
- Cliquer sur
Run Allpour exécuter la commande. - Cliquer une seconde fois devrait indiquer une erreur car la table existe déjà.
-
- Voir la table créée.
- Insérer des données dans la table
person.-
INSERT INTO person (name, email, age)VALUES('Alice', 'alice@example.com', 28),('Bob', 'bob@example.com', 20),('Charlie', NULL, 25),('Dave', NULL, 30);
- Voir les données dans la table
personen double-cliquant sur elle.
-
- Sélectionner toutes les données de la table
person.
Solution
SELECT * FROM person;
- Sélectionner uniquement les noms et les âges des personnes.
Solution
SELECT name, age FROM person;
- Sélectionner dans l'ordre décroissant des âges.
Solution
SELECT * FROM person ORDER BY age DESC;
- Sélectionner uniquement les personnes de plus de 25 ans.
Solution
SELECT * FROM person
WHERE age > 25;
- Sélectionner uniquement les noms des personnes de plus de 25 ans.
Solution
SELECT name FROM person
WHERE age > 25;
- Calculer la moyenne d'âge des personnes.
Solution
SELECT AVG(age) FROM person;
Avis de films
Reprendre ta table person et l'étendre pour gérer des avis de films.
- Créer une nouvelle table
movieavec les colonnes suivantes :id: clé primaire auto-incrémentée en entier.title: chaine de caractères de longueur variable de 100 caractères maximum.year:SMALLINT(petit entier signé sur 2 octets).
Solution
CREATE TABLE movie (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title VARCHAR(100) NOT NULL,
year SMALLINT NOT NULL
);
- Insérer des données dans la table
movie.-
INSERT INTO movie (title, year)VALUES('Memento', 2000),('The Prestige', 2006),('The Dark Knight', 2008),('Inception', 2010),('Interstellar', 2014),('Dunkirk', 2017),('Tenet', 2020),('Oppenheimer', 2023);
-
- Créer une nouvelle table
reviewavec les colonnes suivantes :id: clé primaire auto-incrémentée en entier.rating:SMALLINT(note de 1 à 6)comment:TEXT(chaîne de caractères sans limite de taille)person_id:INTEGER(clé étrangère vers la tableperson)movie_id:INTEGER(clé étrangère vers la tablemovie)-
CREATE TABLE review (id INTEGER PRIMARY KEY AUTOINCREMENT,rating SMALLINT NOT NULL,comment TEXT,person_id INTEGER NOT NULL,movie_id INTEGER NOT NULL,FOREIGN KEY (person_id) REFERENCES person (id),FOREIGN KEY (movie_id) REFERENCES movie (id));
- Insérer les données dans la table
reviewavec les avis suivants :- Alice a noté
Memento5/6. - Alice a noté
Dinkirk3/6 avec le commentairePas mal. - Bob a noté
Memento1/6 avec le commentaireJe n'ai rien compris(il faudra échapper l'apostrophe). - Dave a noté
Tenet4/6. - Charlie a noté
Memento6/6 avec le commentaireChef-d'œuvre. - Bob a noté
Dinkirk2/6 avec le commentaireBof. - Charlie a noté
Oppenheimer4/6 avec le commentaireSympa.
- Alice a noté
Solution
INSERT INTO review (rating, comment, person_id, movie_id)
VALUES
(5, NULL, 1, 1),
(3, 'Pas mal', 1, 6),
(1, 'Je n''ai rien compris', 2, 1),
(4, NULL, 4, 7),
(6, 'Chef-d''œuvre', 3, 1),
(2, 'Bof', 2, 6),
(4, 'Sympa', 3, 8);
- Sélectionner les avis de tout le monde sur tous les films.
Solution
SELECT * FROM review
JOIN movie ON review.movie_id = movie.id
JOIN person ON review.person_id = person.id;
- Ne garder que les titres, les notes et les commentaires.
Solution
SELECT title, rating, comment FROM review
JOIN movie ON review.movie_id = movie.id
JOIN person ON review.person_id = person.id;
- Ne garder que les avis de Bob.
Solution
SELECT title, rating, comment FROM review
JOIN movie ON review.movie_id = movie.id
JOIN person ON review.person_id = person.id
WHERE person.name = 'Bob';
- Ne garder que les avis sur
Mementoavec le nom de la personne au lieu du titre du film.
Solution
SELECT name, rating, comment FROM review
JOIN movie ON review.movie_id = movie.id
JOIN person ON review.person_id = person.id
WHERE movie.title = 'Memento';
- Ne garder que les avis de plus de 3/6 sur
Memento.
Solution
SELECT name, rating, comment FROM review
JOIN movie ON review.movie_id = movie.id
JOIN person ON review.person_id = person.id
WHERE movie.title = 'Memento' AND rating > 3;
- Calculer la moyenne des notes de
Memento.
Solution
SELECT AVG(rating) FROM review
JOIN movie ON review.movie_id = movie.id
WHERE movie.title = 'Memento';
Modélisation d'une base de données
Individuellement ou par groupe de deux, continuer la modélisation d'une base de données.
- Reprendre le modèle ER de l'exercice de la modélisation.
- Écrire les commandes SQL pour créer les tables correspondantes.
- Mettre en place les relations entre les tables (clés étrangères).
- Insérer quelques données d'exemple dans les tables.
- Écrire des requêtes SQL pour interroger la base de données.
- Indiquer les difficultés rencontrées et les solutions trouvées.





