Department SQL Class Exercise
Cyberchase - Exercice SQL en Shell
đŻ Objectif
Cette fois-ci, vous devrez rĂ©aliser TOUT lâexercice uniquement depuis le terminal (shell). Pas dâinterface graphique, pas de GUI SQLite - uniquement la ligne de commande !
đ PrĂ©requis - Installation de SQLite3
Sur Ubuntu/Debian :
sudo apt update
sudo apt install sqlite3
Sur macOS :
SQLite3 est normalement prĂ©installĂ©. Si ce nâest pas le cas :
brew install sqlite3
Note : Si vous nâavez pas Homebrew, installez-le depuis brew.sh
VĂ©rifier lâinstallation :
sqlite3 --version
đ ïž Installation de lâĂ©diteur de texte Micro (RecommandĂ©)
Micro offre une coloration syntaxique agréable pour éditer vos fichiers SQL.
Sur Ubuntu/Debian :
sudo apt install micro
Sur macOS :
brew install micro
Alternative : Nano
Si vous préférez, vous pouvez utiliser nano
(préinstallé sur la plupart des systÚmes) :
nano fichier.sql
Travailler avec deux terminaux
Ouvrez deux fenĂȘtres de terminal cĂŽte Ă cĂŽte :
- Terminal 1 : Pour explorer la base de données
sqlite3 cyberchase.db
- Terminal 2 : Pour éditer vos fichiers SQL
micro 1.sql
đ Commandes essentielles SQLite3 en shell
Une fois dans SQLite3 (sqlite3 cyberchase.db
) :
-- Afficher les tables
.tables
-- Voir le schéma d'une table
.schema episodes
-- Activer l'affichage en colonnes (plus lisible)
.mode column
.headers on
-- Exécuter un fichier SQL
.read 1.sql
-- Quitter SQLite3
.quit
đ§ Workflow recommandĂ©
- Ătape 1 : Explorez dâabord la base de donnĂ©es
sqlite3 cyberchase.db sqlite> .tables sqlite> .schema episodes sqlite> SELECT * FROM episodes LIMIT 5;
- Ătape 2 : Ăditez votre fichier SQL dans un autre terminal
micro 1.sql
Tapez votre requĂȘte, puis sauvegardez :
- Dans Micro :
Ctrl+S
pour sauvegarder,Ctrl+Q
pour quitter - Dans Nano :
Ctrl+O
pour sauvegarder,Ctrl+X
pour quitter
- Dans Micro :
- Ătape 3 : Testez votre requĂȘte
# Méthode 1 : Depuis SQLite3 sqlite> .read 1.sql # Méthode 2 : Directement depuis le shell sqlite3 cyberchase.db < 1.sql
đ Redirection de sortie (utile pour vĂ©rifier le nombre de lignes)
# Exécuter et sauvegarder le résultat dans un fichier
sqlite3 cyberchase.db < 1.sql > resultat_1.txt
# Voir le résultat avec pagination
sqlite3 cyberchase.db < 1.sql | less
đš Personnalisation de SQLite3 (Optionnel)
Créez un fichier .sqliterc
dans votre home pour des paramÚtres par défaut :
echo ".mode column
.headers on
.timer on" > ~/.sqliterc
Maintenant, SQLite3 utilisera toujours ces paramĂštres !
ProblÚme à Résoudre
Bienvenue dans le Cyberespace ! Cyberchase est une sĂ©rie tĂ©lĂ©visĂ©e animĂ©e et Ă©ducative pour enfants, diffusĂ©e par le Public Broadcasting Service (PBS) des Ătats-Unis depuis 2002. Conçue Ă lâorigine pour « montrer aux enfants que les mathĂ©matiques sont partout et que tout le monde peut ĂȘtre bon en maths », le monde de Cyberchase tourne autour de Jackie, Matt et Inez qui sâassocient Ă Digit, un « cybird », pour empĂȘcher Hacker de prendre le contrĂŽle du Cyberespace et dâinfecter la Carte MĂšre. En chemin, le quatuor apprend des compĂ©tences en mathĂ©matiques, en sciences et en rĂ©solution de problĂšmes pour contrecarrer les tentatives de Hacker.
Dans une base de données appelée cyberchase.db
, en utilisant une table appelée episodes
, trouvez des rĂ©ponses aux questions de PBS sur les Ă©pisodes de Cyberchase jusquâĂ prĂ©sent.
Schéma
Chaque base de donnĂ©es a un certain « schĂ©ma » â les tables et colonnes dans lesquelles les donnĂ©es sont organisĂ©es. Dans cyberchase.db
, vous trouverez une seule table, episodes
. Dans la table episodes
, vous trouverez les colonnes suivantes :
id
, qui identifie de maniÚre unique chaque ligne (épisode) de la tableseason
, qui est le numĂ©ro de la saison dans laquelle lâĂ©pisode a Ă©tĂ© diffusĂ©episode_in_season
, qui est le numĂ©ro de lâĂ©pisode dans sa saison donnĂ©etitle
, qui est le titre de lâĂ©pisodetopic
, qui identifie les idĂ©es que lâĂ©pisode visait Ă enseignerair_date
, qui est la date (exprimée au formatAAAA-MM-JJ
) Ă laquelle lâĂ©pisode a Ă©tĂ© « diffusĂ© » (câest-Ă -dire publiĂ©)production_code
, qui est lâID unique utilisĂ© par PBS pour faire rĂ©fĂ©rence Ă chaque Ă©pisode en interne
đ Exercices
Pour chacune des questions suivantes, vous devez Ă©crire une seule requĂȘte SQL qui produit les rĂ©sultats spĂ©cifiĂ©s par chaque problĂšme. Votre rĂ©ponse doit prendre la forme dâune seule requĂȘte SQL. Vous ne devez faire aucune supposition sur les id
de certains Ă©pisodes : vos requĂȘtes doivent ĂȘtre exactes mĂȘme si lâid
dâun Ă©pisode particulier Ă©tait diffĂ©rent. Enfin, chaque requĂȘte doit renvoyer uniquement les donnĂ©es nĂ©cessaires pour rĂ©pondre Ă la question.
-
Dans
1.sql
, Ă©crivez une requĂȘte SQL pour lister les titres de tous les Ă©pisodes de la saison originale de Cyberchase, la Saison 1. -
Dans
2.sql
, listez le numéro de saison et le titre du premier épisode de chaque saison. -
Dans
3.sql
, trouvez le code de production de lâĂ©pisode « Hackerized! ». -
Dans
4.sql
, Ă©crivez une requĂȘte pour trouver les titres des Ă©pisodes qui nâont pas encore de sujet rĂ©pertoriĂ©. -
Dans
5.sql
, trouvez le titre de lâĂ©pisode des fĂȘtes diffusĂ© le 31 dĂ©cembre 2004. -
Dans
6.sql
, listez les titres des épisodes de la saison 6 (2008) qui ont été publiés en avance, en 2007. -
Dans
7.sql
, Ă©crivez une requĂȘte SQL pour lister les titres et sujets de tous les Ă©pisodes enseignant les fractions. - Dans
8.sql
, Ă©crivez une requĂȘte qui compte le nombre dâĂ©pisodes publiĂ©s au cours des 6 derniĂšres annĂ©es, de 2018 Ă 2023 inclus.- đĄ Astuce : Vous pouvez utiliser
BETWEEN
avec des dates, commeBETWEEN '2000-01-01' AND '2000-12-31'
.
- đĄ Astuce : Vous pouvez utiliser
-
Dans
9.sql
, Ă©crivez une requĂȘte qui compte le nombre dâĂ©pisodes publiĂ©s au cours des 6 premiĂšres annĂ©es de Cyberchase, de 2002 Ă 2007 inclus. -
Dans
10.sql
, Ă©crivez une requĂȘte SQL pour lister les id, titres et codes de production de tous les Ă©pisodes. Triez les rĂ©sultats par code de production, du plus ancien au plus rĂ©cent. -
Dans
11.sql
, listez les titres des épisodes de la saison 5, en ordre alphabétique inverse. -
Dans
12.sql
, comptez le nombre de titres dâĂ©pisodes uniques. - Dans
13.sql
, Ă©crivez une requĂȘte SQL pour explorer une question de votre choix. Cette requĂȘte doit :- Impliquer au moins une condition, en utilisant
WHERE
avecAND
ouOR
- Impliquer au moins une condition, en utilisant
đ Exercices Bonus (Optionnel)
Vous sentez-vous plus Ă lâaise ? Essayez ces requĂȘtes avancĂ©es !
- Ăcrivez une requĂȘte SQL pour trouver les titres des Ă©pisodes diffusĂ©s pendant la pĂ©riode des fĂȘtes, gĂ©nĂ©ralement en dĂ©cembre aux Ătats-Unis.
- Votre requĂȘte doit produire une table avec une seule colonne pour le titre de chaque Ă©pisode.
- Essayez de trouver une meilleure solution que
LIKE
si vous le pouvez !
- Ăcrivez une requĂȘte SQL pour trouver, pour chaque annĂ©e, le premier jour de lâannĂ©e oĂč PBS a publiĂ© un Ă©pisode de Cyberchase.
- Votre requĂȘte doit produire une table avec deux colonnes, une pour lâannĂ©e et une pour le mois et le jour les plus prĂ©coces oĂč un Ă©pisode a Ă©tĂ© publiĂ© cette annĂ©e-lĂ .
â Validation des rĂ©sultats
Voici le nombre de lignes attendu pour chaque requĂȘte :
1.sql
: 1 colonne, 26 lignes2.sql
: 2 colonnes, 14 lignes3.sql
: 1 colonne, 1 ligne4.sql
: 1 colonne, 26 lignes5.sql
: 1 colonne, 1 ligne6.sql
: 1 colonne, 2 lignes7.sql
: 2 colonnes, 6 lignes8.sql
: 1 colonne, 1 ligne9.sql
: 1 colonne, 1 ligne10.sql
: 3 colonnes, 140 lignes11.sql
: 1 colonne, 10 lignes12.sql
: 1 colonne, 1 ligne
đ Conseils finaux
- Utilisez lâhistorique : Dans SQLite3, utilisez les flĂšches ââ pour naviguer dans lâhistorique des commandes
- Auto-complĂ©tion : Appuyez sur Tab pour lâauto-complĂ©tion des noms de tables/colonnes