Coding Club for girls

Das Zaubereiministerium

Willkommen in der magischen Welt von Harry Potter! Du wurdest als Detektivin und Informatikspezialistin im großen Zaubereiministerium eingestellt. Um dir bei deinen Aufgaben zu helfen, hast du Zugriff auf das Magieregister, eine Datenbank, die alle bekannten Informationen über die Welt der Zauberer und Hexen auflistet.

Der magische Befehl

Deine Chefin, Professor McGonagall, zeigt dir, wie das System funktioniert. Du hast Zugriff auf die Datenbank über eine Befehlszeile in einem Codeblock wie unten. Gib einfach einen gültigen Befehl ein und klicke auf RUN⬇️, um das Ergebnis zu sehen. Da dies das erste Mal ist, dass du dieses System verwendest, zeigt Professor McGonagall dir ein Beispiel um die Namen von 3 Personen in der Datenbank zu zeigen.

Dein erster SQL-Befehl

Du kannst sehen, dass ein SQL-Befehl oder eine Abfrage ein wenig wie ein Satz aussieht. Die in Großbuchstaben geschriebenen Wörter sind englische Schlüsselwörter, und die in Kleinbuchstaben geschriebenen Wörter geben an, wonach du suchen möchtest. SELECT bedeutet "Wähle", FROM bedeutet "von" oder "aus", und LIMIT bedeutet "Begrenzung". Wenn wir die Codezeile übersetzen, erhalten wir: "WÄHLE Name VON Charaktere BEGRENZUNG 3".

Du hast gerade gelernt, wie man den Namen von Zauberern und Hexen anzeigt. Der Name ist ein Attribut (Eigenschaft). Bei jeder Abfrage wählt man eine bestimmte Anzahl von Atributen wie Name, Geschlecht, Geburtsjahr usw. aus. Aber es wäre nützlich zu wissen, welche anderen Attribute zu jedem Charakter existieren.

Um alle Attribute eines Charakters auszuwählen, muss * verwendet werden.

Alles zwischen /* und */ ist ein Kommentar und wird nicht ausgeführt, wenn du auf Run druckst.

Wenn du dich nicht mehr an einen Befehl erinnerst, den du verwendet hast, kannst du die Zusammenfassung der wichtigsten SQL-Befehle überprüfen.

Zählen

Es scheint viele Zauberer und Hexen in dieser Datenbank zu geben. Aber wie viele genau? Dank SQL ist es auch möglich, die Anzahl der angezeigten Zeilen zu zählen. Um die Anzahl der Charaktere in der Datenbank zu finden, würden wir sagen:

Wähle die Anzahl aller Elemente in der Tabelle Charaktere aus.

Das wird also zu:

WÄHLE ZÄHLE(*) VON Charaktere

ZÄHLE() entspricht den SQL Befehl COUNT(). Wir geben in Klammern an, was wir zählen möchten.

Informationen filtern

Gestern hat Bathilda Bagshot dem Ministerium gemeldet, dass eine junge Frau sie gegen Rowdys verteidigt hat, die versucht haben, ihr den Besen zu stehlen. Frau Bagshot möchte ihren Namen herausfinden, um ihr zu danken, denn das Mädchen musste nach der Rettung schnell verschwinden. Hier ist ihr Phantombild1, rekonstruiert nach den sehr genauen Beschreibungen der alten Dame:

Du müsstest also nach weiblichen Charakteren suchen, die silbergraue Augen haben und deren Patronus (Schutzgeist) ein Hase ist. Versuchen wir zunächst, alle weiblichen Charaktere zu finden. Dafür benötigen wir einen Befehl, der sagt:

Wähle alle Informationen der Charaktere aus, die Frauen sind.

Indem wir das ein wenig vereinfachen, erhalten wir:

WÄHLE * VON Charaktere WO Geschlecht=’Weiblich’

Wir benötigen also einen Befehl wie WO, der eine Bedingung filtern kann. Für jeden Charakter ist die Bedingung entweder wahr (zum Beispiel: Geschlecht=’Weiblich’), und die Zeile des Charakters wird angezeigt, oder die Bedingung ist falsch, und die Zeile wird ignoriert. Wenn wir dies ins Englische übersetzen:

Man verwendet WHERE (WO auf Deutsch) um die Ergebnisse deiner Suchanfragen zu filtern.

Gut, aber das sind immer noch zu viele Zeilen zum Durchgehen, und du müsstest deine Suche verfeinern. Dazu können wir die Bedingung hinzufügen, dass das Mädchen silbergraue Augen hat. Auf Deutsch würde man sagen:

Wähle alle Informationen der Charaktere aus, die Frauen sind und silbergraue Augen haben.

Wie vorhin übersetzt:

WÄHLE * VON Charaktere WO Geschlecht=’Weiblich’ UND Augen=’Silbergrau’

Im Englischen sagt man "und" mit "and". Wir können also AND verwenden, um Bedingungen zu kombinieren und sicherzustellen, dass der Charakter alle Bedingungen erfüllt.

Immer noch zu viele Personen… Versuche, die Bedingung des Patronus Hase hinzuzufügen.

Hast du sie jetzt gefunden?

Zählen UND Filtern

Erinnerst du dich, wie man zählt? Nun, jetzt, da du filtern kannst mir WHERE, kannst du auch etwas spezifischere Dinge zählen.

Du hast sicherlich bemerkt, dass wir OR verwenden, um oder auszudrücken. Was ist der Unterschied zwischen OR und AND?

Aber wir können es noch besser machen! Anstatt jedes Mal Haare=... zu wiederholen, ist es einfacher, etwas zu schreiben, wie “die Haare müssen in der Liste: {‘Schwarz’, ‘Rot’, ‘Braun’} sein”.

Wir können IN verwenden, um die Möglichkeiten aufzulisten.

Versuche jetzt ein ganze Abfrage selber zu schreiben.

Die Zeichen < und > zwischen zwei Zahlen stehen für "ist kleiner als" respektiv "ist grösser als". Zum beispiel: 1 < 2 und 2 > 1.

Die verschiedenen Tabellen

Bisher haben wir immer auf die Tabelle Charaktere zugegriffen, in dem wir FROM Charaktere geschrieben haben. Bevor du dich dem finalen Rätsel stellst, sagt Professor McGonagall, dass es zusätzlich zu der Tabelle Charaktere zwei weitere Tabellen in der Datenbank gibt, die nützlich sein werden:

Es ist immer praktisch, einen Überblick über die Datenbank des Zaubereiministeriums in Form eines Schemas zu haben:

Struktur der Datenbank. Eine Tabelle wird durch eine Kasten dargestellt. Jede Zeile in den Kasten entspricht einem Attribut der Tabelle.

Wir werden uns die Tabelle kreaturen später ansehen. Im Moment ist in der Tabelle Verwandte der erste_Name der/die verwandtschaft des zweite_Name. Zum Beispiel ist in der folgenden Tabelle Lily die Mutter von Harry und Harry ist der Sohn von James.

erster_Name zweiter_Name Verwandtschaft
Lily Potter Harry Potter Mutter
Harry Potter James Potter Sohn
... ... ...
Um deine Erkundungen zu leiten, kannst du die beiden folgenden Herausforderungen ausprobieren:

Schließlich kannst du dank dieser neuen Tabellen auch Informationen miteinander verknüpfen. Zum Beispiel, wenn du wissen möchtest, welche Zauberer eine Tochter haben und blaue Augen haben, benötigst du Informationen aus zwei verschiedenen Tabellen. Du müsstest also versuchen, sie miteinander zu verbinden. Schauen wir uns erst einmal an, wie man die beiden Informationen getrennt findet.

Du kannst also mehrere SQL-Befehle ineinander verschachteln.

Der Diebstahl des Feuerkelchs

Du hast jetzt alle Werkzeuge, um dich der großen Untersuchung des Diebstahls des Feuerkelchs zu stellen! Wenn du dich bereit fühlst, die Herausforderung anzunehmen, gehe zur nächsten Seite.