Le ministère de la magie
Bienvenue dans le monde magique de Harry Potter! Tu as été employée en tant que détective et spécialiste informatique dans le grand ministère de la magie. Pour t’aider dans tes tâches, tu as accès au registre des magiciens et magiciennes, une base de données qui répertorie toutes les informations connues à propos de l’univers de Harry Potter.
La requête magique
Ta cheffe, Professeure McGonagall, te montre comment fonctionne le système. Tu as accès à la base de données via une ligne de commande dans un bloc de code comme ci-dessous. Il suffit de rentrer une commande valide et de cliquer sur RUN⬇️ pour voir le résultat. Comme c’est la première fois que tu utilises ce système, professeure McGonagall te montre un exemple pour chercher le nom de 3 magiciens et magiciennes dans la base de données..
Ta première requête SQL
Tu peux voir qu'une commande ou requête SQL se lit un peu comme une phrase. Les mots en majuscules sont des mots clés en anglais et les mots en minuscules spécifient ce que tu veux chercher. SELECT
veut dire Sélectionne, FROM
veut dire De ou Depuis et LIMIT
veut dire Limite. Donc si on traduit la ligne de code on trouve: "SELECTIONNE
nom DE
personnages LIMITE
3".
Tu viens d’apprendre comment afficher les noms. Avec chaque requête, on sélectionne un certain nombre d’attributs (carctéristiques) comme le nom, le genre, l’année de naissance, etc… Ça serait utile de savoir quels autres attributs on peut connaître sur chaque personnage.
Pour sélectionner tous les attributs d'un personnage, il faut utiliser *
.
Tout ce qui se trouve entre /*
et */
est un commentaire et ne sera pas exécuté lorsqu'on clique sur RUN.
Compter
Il a l’air d’y avoir beaucoup de sorciers et sorcières dans cette base de données. Mais d’ailleurs, combien exactemen t? Grâce à SQL il est aussi possible de compter le nombre de lignes qui sont affichées. Pour trouver le nombre de personnages dans la base de données, on aimerait dire:
Sélectionne le nombre d’éléments dans le tableau des personnages.
Cela devient donc:
SELECTIONNE COMPTE(*) DE personnages
On peut compter le nombre de rangées sélectionnées grâce à la fonction COUNT()
. On met entre les parenthèses ce qu'on veut compter.
Filtrer les informations
Hier, Mme Miranda Fauconnette a reporté au ministère qu’une jeune femme l’a défendue contre des voyous qui essayaient de lui voler son balais. Mme Fauconnette aimerait retrouver son nom pour la remercier car la fille a dû partir à toute vitesse après l’avoir sauvée. Voici son portrait robot1 reconstitué d’après les descriptions très précises de la vieille dame:
Il faudrait donc que tu ailles chercher les personnages féminins qui ont les yeux bleus et un patronus (l’esprit protecteur) sous forme de lièvre. Essayons déjà de chercher tous les personnages féminins. Il nous faut donc une commande qui dit:
Sélectionne toutes les informations des personnages qui sont des femmes
En simplifiant donc un petit peu, on obtient:
SELECTIONNE * DE personnages OÙ genre=’Femme’
Il nous faudrait encore une commande comme OÙ qui puisse filtrer une condition. Pour chaque personnage, soit la condition (par exemple:genre=’Femme’) est vraie, dans quel cas la ligne du personnage sera affichée soit la condition est fausse et la ligne n’est pas affichée. Si on traduit en anglais:
Tu peux utiliser WHERE
(OÙ en français) pour filtrer les résultats de tes recherches.
-
FROM personnages
-
WHERE genre='Femme'
-
SELECT *
On avance, mais ça fait toujours trop de lignes à décortiquer et il faudrait affiner nos recherches. Pour cela, on peut ajouter la condition que la fille a les yeux bleus. En français, on dirait:
_Selectionne toutes les informations des personnages qui sont des femmes et qui ont les yeux bleus _
Comme tout à l’heure, on traduit avec:
SELECTIONNE * DE personnages OÙ genre=’Femme’ ET yeux=’Bleus’
En anglais "et" se dit "and". On peut donc utiliser AND
pour combiner des conditions et obliger que le personnage remplisse toutes les conditions.
Toujours trop de personnes… Essaies d’ajouter la condition du patronus lièvre.
As-tu maintenant trouvé?
Compter AND Filtrer
Tu te souviens comment on compte ? Et bien maintenant que tu sais filtrer avec WHERE
, peux compter des choses un peu plus spécifiques.
Tu as certainement remarqué qu'on utilise OR
pour dire ou. Quelle est la différence entre OR
et AND
?
Mais on peut faire mieux! Au lieu de répéter à chaque fois cheveux=...
c’est plus simple d’écrire quelque chose comme “il faut que les cheveux soient dans la liste: {‘Noirs’,’Roux’,’Bruns’}”.
On peut utiliser IN
(ce qui veut dire dans) pour lister les possiblités.
Tu as appris un paquet de choses, maintenant essaie d’écrire une commande entière par toi-même.
Les signes <
et >
entre deux nombres veulent respectivement dire "est plus petit que", "est plus grand que". Par exemple: 1 < 2 et 2 > 1.
Les différents tableaux
Jusqu’à maintenant, on a toujours accédé aux information dans le tableau personnages en écrivant FROM personnages
. Avant de te lancer dans l’énigme finale, Professeure McGonagall te dit qu’il y a deux autres tableaux dans la base de données qui te seront utiles:
- famille, qui répertorie tous les liens de parenté entre les personnages.
- créatures, qui répertorie toutes les créatures magiques.
Il est toujours pratique d’avoir un apperçu de la base de donnée du ministère de la magie sous forme de schéma:
Nous regarderons le tableau “créatures” plus tard. Pour l’instant, dans le tableau “famille”; le premier_nom est le/la relation de second_nom. Par exemple dans le tableau suivant, Lily est la mère de Harry et Harry est le fils de James.
premier_nom | second_nom | relation |
---|---|---|
Lily Potter | Harry Potter | mère |
Harry Potter | James Potter | fils |
... | ... | ... |
Finalement, grâce à ces nouveaux tableaux, tu peux aussi croiser les informations. Par exemple, si tu veux savoir quel.le.s sorcier.ères ont une fille et ont les yeux bleus, tu as besoin d’informations qui proviennent de deux tableaux différents. Il faudrait donc réussir à les lier ensemble. Voyons déjà comment trouver les deux informations séparément.
- D’abord pour trouver le nom des sorcier.ère.s qui ont une fille, on sélectionne le tableau famille et on filtre les résultats lorsque la relation est égal à “fille”.
- Ensuite, on veut trouver le nom des socier.ère.s qui ont les yeux bleus.
- On met les deux conditions ensemble en combinant les réponses précédentes dans une seule commande.
Tu peux donc utiliser plusieurs commandes SQL les unes à l’intérieur des autres.
Le vol de la coupe de feu
Tu as maintenant tous les outils pour t’attaquer à la grande enquête du vol de la coupe de feu! Si tu te sens prête à relever le défi, va à la page suivante.
-
Source wallpaperaccess.com ↩