Department SQL Class Exercise

Cyberchase - Exercice SQL en Shell

cyb_img

🎯 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 :

  1. Terminal 1 : Pour explorer la base de données
    sqlite3 cyberchase.db
    
  2. 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Ă©

  1. Étape 1 : Explorez d’abord la base de donnĂ©es
    sqlite3 cyberchase.db
    sqlite> .tables
    sqlite> .schema episodes
    sqlite> SELECT * FROM episodes LIMIT 5;
    
  2. É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
  3. É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 table
  • season, 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Ă©e
  • title, qui est le titre de l’épisode
  • topic, qui identifie les idĂ©es que l’épisode visait Ă  enseigner
  • air_date, qui est la date (exprimĂ©e au format AAAA-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.

  1. 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.

  2. Dans 2.sql, listez le numéro de saison et le titre du premier épisode de chaque saison.

  3. Dans 3.sql, trouvez le code de production de l’épisode « Hackerized! ».

  4. Dans 4.sql, Ă©crivez une requĂȘte pour trouver les titres des Ă©pisodes qui n’ont pas encore de sujet rĂ©pertoriĂ©.

  5. Dans 5.sql, trouvez le titre de l’épisode des fĂȘtes diffusĂ© le 31 dĂ©cembre 2004.

  6. Dans 6.sql, listez les titres des épisodes de la saison 6 (2008) qui ont été publiés en avance, en 2007.

  7. Dans 7.sql, Ă©crivez une requĂȘte SQL pour lister les titres et sujets de tous les Ă©pisodes enseignant les fractions.

  8. 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, comme BETWEEN '2000-01-01' AND '2000-12-31'.
  9. 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.

  10. 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.

  11. Dans 11.sql, listez les titres des épisodes de la saison 5, en ordre alphabétique inverse.

  12. Dans 12.sql, comptez le nombre de titres d’épisodes uniques.

  13. 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 avec AND ou OR

🚀 Exercices Bonus (Optionnel)

Vous sentez-vous plus Ă  l’aise ? Essayez ces requĂȘtes avancĂ©es !

  1. É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 !
  2. É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 lignes
  • 2.sql : 2 colonnes, 14 lignes
  • 3.sql : 1 colonne, 1 ligne
  • 4.sql : 1 colonne, 26 lignes
  • 5.sql : 1 colonne, 1 ligne
  • 6.sql : 1 colonne, 2 lignes
  • 7.sql : 2 colonnes, 6 lignes
  • 8.sql : 1 colonne, 1 ligne
  • 9.sql : 1 colonne, 1 ligne
  • 10.sql : 3 colonnes, 140 lignes
  • 11.sql : 1 colonne, 10 lignes
  • 12.sql : 1 colonne, 1 ligne

🎓 Conseils finaux

  1. Utilisez l’historique : Dans SQLite3, utilisez les flùches ↑↓ pour naviguer dans l’historique des commandes
  2. Auto-complĂ©tion : Appuyez sur Tab pour l’auto-complĂ©tion des noms de tables/colonnes