Coding Club des filles

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.

Si tu ne te souviens plus d'une commande que tu as utilisé, tu peux te référer au résumé des principales commandes SQL.

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

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:

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:

Structure de la base de données. Un tableau est représenté par une case. Chaque ligne dans les cases correspond à un attribut du tableau.

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
... ... ...
Pour guider ton exploration, tu peux essayer les deux challenges suivants:

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.

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.