Nous allons utiliser une base de données en PostgreSQL.
Pour plus de facilité, nous te recommandons d'utiliser http://www.elephantSQL.com
C'est un service de base de données en ligne super simple qui nécessite simplement de t'inscrire.
Sinon, mais c'est plus long et compliqué :
Utilise PostgreSQL avec Docker grâce à ce lien: https://docs.docker.com/engine/examples/postgresql_service/
Tu dois désormais être en possession de plusieurs informations pour continuer :
- Nom de l'hôte / Hostname
- Base de données / Database
- Nom d'utilisateur / User
- Mot de passe / Password
Pour afficher le contenu et faire des requêtes, nous te proposons un super outil:
- Gratuit
- Multi OS (Mac, Linux et Windows)
- Multi databases (parmi les plus populaires: MySQL, PostgreSQL, Oracle, SQL Server, SQLite...)
Qui te permettra de gérer toutes tes futures bases de données depuis une même interface.
C'est par ici : https://dbeaver.io/
Une fois installé et lancé, un assistant t'aidera à configurer la connexion vers ta base de données.
Le contenu à importer dans ta base de données se trouve là
Avec DBeaver, tu peux importer directement le script et l'exécuter, ou copier-coller le texte dans un "Nouvel Editeur SQL"
Tu possèdes désormais une base de données contenant:
- Une table contenant les Pokémons des deux premières générations
- Une table contenant les types de Pokémons
- Une table contenant les Régions (Kanto et Johto)
- Une table contenant les relations entres les types et les pokemons
Nous allons te donner une série d'instructions, en français, que tu dois convertir en SQL afin d'obtenir un résultat:
Récupère la liste des noms des pokémons (Tips: La colonne s'intitule 'name')
Résultat:
Dans cette fenêtre, tu as donc la requête (en haut) et le résultat (en bas). Pour chaque énigme, tu devras obtenir le même genre de fenêtre.
- Récupère les id ainsi que les noms des pokémons dont le poids est supérieur à 2000.
Voir le résultat
| id | name |
|---|---|
| 76 | golem |
| 95 | onix |
| 130 | gyarados |
| 131 | lapras |
| 143 | snorlax |
| 149 | dragonite |
| 208 | steelix |
| 226 | mantine |
| 248 | tyranitar |
| 249 | lugia |
- Récupère les id, les noms, ainsi que la taille des pokémons dont le poids est inférieur ou égal à 20 dans l'ordre croissant par taille.
Voir le résultat
| id | name | height |
|---|---|---|
| 50 | diglett | 2 |
| 177 | natu | 2 |
| 16 | pidgey | 3 |
| 21 | spearow | 3 |
| 172 | pichu | 3 |
| 174 | igglybuff | 3 |
| 175 | togepi | 3 |
| 191 | sunkern | 3 |
| 187 | hoppip | 4 |
| 109 | koffing | 6 |
| 188 | skiploom | 6 |
| 200 | misdreavus | 7 |
| 92 | gastly | 13 |
| 93 | haunter | 16 |
- Récupère les noms des 3 pokémons les plus lourds.
Voir le résultat
| name |
|---|
| snorlax |
| steelix |
| golem |
- Récupère tous les pokémons originaires de johto dont le nom termine par la lettre u.
Voir le résultat
| name | type |
|---|---|
| chinchou | johto |
| pichu | johto |
| natu | johto |
| xatu | johto |
| raikou | johto |
- Récupère les noms des pokemons avec leur types (Tips: On appelle ça une double jointure).
Voir le résultat
| name | type |
|---|---|
| bulbasaur | poison |
| bulbasaur | grass |
| ivysaur | poison |
| ivysaur | grass |
| venusaur | poison |
| venusaur | grass |
| charmander | fire |
| charmeleon | fire |
| charizard | flying |
| charizard | fire |
| ... | ... |
- Affiche le nombre de pokémons dans chaque région.
Voir le résultat
| Sum | name |
|---|---|
| 151 | kanto |
| 100 | johto |
- Quel expérience vais-je gagner si je bats un magneton, un tauros et un kabuto ?
Voir le résultat
| Total |
|---|
| 406 |
- Requête BONUS. Récupère le nombre de pokémons dont le(s) type(s) infligent 'double_damage_to' aux pokémons de type Eau (water). Attention, l'information se trouve dans un tableau PostgreSQL.... et il va falloir aggréger.
Voir le résultat
| Total |
|---|
| 41 |
C'est bien beau tout ça, on a appris à faire toutes sortes de requêtes et à ramener toute sortes d'informations, mais on a pas vu comment on créait ou insérait de nouvelles données. C'est par ici :
De quelles informations as-tu besoin ? Quel sont les types des données que tu vas stocker ?
Tu trouveras quelques infos utiles ici
Rédige ensuite un nouveau script qui créera cette nouvelle table, tu pourras ensuite créer quelques "INSERT" afin de remplir un peu cette nouvelle table. Il n'y a pas "une" bonne réponse à cet exercice, on peut néanmoins montrer un exemple qui fonctionne :
Attention, Spoiler !
CREATE TABLE catched (
id SERIAL PRIMARY KEY,
pokemon_id INT REFERENCES pokemons(id),
catched_at TIMESTAMP N0T NULL DEFAULT CURRENT_TIMESTAMP,
deleted_at TIMESTAMP
);
INSERT INTO
catched (pokemon_id)
VALUES
(58),
(25),
(189);
Tu peux ensuite faire des requêtes de sélection pour ramener les pokémons capturés.
Ce Workshop vous à été présenté par Philippe Haerens et Lindsay Vannebenne dans le cadre de la formation BeCode, de la promotion Hamilton 2.12. N'hésitez pas a partager votre ressenti, les points positifs et négatifs, c'est important pour nous aussi.
Vous pourrez trouver les solutions ici
