image: select-land.webp:25:0

Einführung in SQL

In diesem Kapitel lernst du, wie du MySQL-Da­ten­ban­ken abfragen kannst. Dazu verwenden wir die Pro­gram­mier­spra­che SQL, die spe­ziell für Da­ten­ban­ken ent­wick­elt wur­de. SQL steht für Structured Query Language und wird aus­ge­spro­chen wie »Sequel«.

Stelle zuerst sicher, dass du keinen Ordner geöffnet hast. Um sicherzugehen, drücke einfach den Shortcut für »Ordner schließen«: StrgK und dann F. Dein Work­space sollte jetzt ungefähr so aussehen:

Schließe die linken Seitenleiste, indem du StrgB drückst, um mehr Platz zu haben. Öffne als nächstes das Ter­mi­nal, indem du den Shortcut StrgJ drückst. Dein Work­space sollte jetzt ungefähr so aussehen:

Du kannst das Ter­mi­nal auch maximieren, indem du auf den Pfeil in der rechten oberen Ecke des Ter­mi­nals klickst. Die linke Seitenleiste kannst du jederzeit mit StrgB ein- und ausblenden.

Im Ter­mi­nal siehst du nun die Eingabeaufforderung, auch Prompt genannt, der dir u.a. anzeigt, in welchem Verzeichnis du dich befindest. Der Prompt sieht in etwa so aus:

abc@7a93efd91905:~$

Lass dich von dem Prompt nicht verwirren. Der Teil abc vor dem @ ist dein Benutzername, der Teil 7a93efd91905 nach dem @ ist der Name deines Com­puters, und der Teil nach dem : ist das aktuelle Verzeichnis. In diesem Fall ist das aktuelle Verzeichnis ~, welches die Abkürzung für dein Home-Verzeichnis ist. Das $ am Ende des Prompts zeigt an, dass du als normaler Benutzer angemeldet bist. Wenn du als Administrator angemeldet wärst, würde das $ durch ein # ersetzt.

1. Beispieldaten herunterladen

Um MySQL kennenzulernen, benötigen wir eine Da­ten­bank. Wir verwenden die Beispieldatenbank terra1, die du dir herunterladen kannst, indem du folgenden Befehl eingibst:

wget https://github.com/specht/workspace-files/raw/main/terra1.sql

Die Ausgabe sollte in etwa so aussehen:

Lass dich nicht davon stören, dass die Ausgabe so umfangreich ist. Der Grund dafür ist, dass der Webserver die Anfrage auf eine andere URL umleitet (»302 Found«) und wget dieser Umleitung folgt. Die eigentliche Datei wird dann heruntergeladen (»200 OK«) und die Ausgabe von wget zeigt dir den Fortschritt an.

Das Programm wget können wir dazu verwenden, um Da­tei­en aus dem Internet herunterzuladen. Die Datei wird standardmäßig im aktuellen Verzeichnis gespeichert. Schau nach, ob die Datei angekommen ist, indem du den Befehl ls (kurz für »list«) eingibst:

Viele Befehle auf der Kom­man­do­zei­le haben Optionen, die stets hinter dem Befehlsnamen mit einem - beginnen. Probiere hier den Befehl ls -l (für »long«), um dir mehr Details anzeigen zu lassen:

Du siehst nun u.a., wie groß die Datei ist. Nutze den Befehl ls -lh (für »long human-readable«), um die Größe in einer besser lesbaren Form zu sehen:

Die Datei ist also 1,6 MB groß.

Um dir den Inhalt der Datei anzeigen zu lassen, kannst du den Befehl less verwenden. less ist ein Pager, der dir den Inhalt einer Datei seitenweise anzeigt. Um den Inhalt der Datei terra1.sql anzuzeigen, gib folgenden Befehl ein:

less terra1.sql
Du musst nicht den vollständigen Da­tei­na­men schreiben. Schreib einfach less te und drücke Tab, um den Da­tei­na­men automatisch zu terra1.sql vervollständigen zu lassen. Du kannst danach ganz normal weiterschreiben.

Du siehst jetzt die ersten Zeilen der Datei:

Nutze die Pfeiltasten sowie Bild↑Bild↓, um durch die Datei zu navigieren.

Wenn du etwas nach unten scrollst, siehst du, dass in der Datei zwei Tabellen enthalten sind, die Informationen zu Ländern und Orten enthalten.

Drücke Q, um less zu beenden.

2. Beispieldaten importieren

Um die Beispieldatenbank in MySQL zu importieren, gib einfach den folgenden Befehl ein:

mysql < terra1.sql
Hast du daran gedacht, die Tab-Taste zu verwenden, um den Da­tei­na­men automatisch vervollständigen zu lassen?

Wenn alles geklappt hat, siehst du keine Ausgabe. Das ist ein gutes Zeichen, denn das bedeutet, dass der Import erfolgreich war:

3. Tabellenaufbau anzeigen

Um mit MySQL zu arbeiten, verwenden wir mycli, einen MySQL-Client, der spe­ziell für die Kom­man­do­zei­le ent­wick­elt wur­de. Starte mycli, indem du den folgenden Befehl eingibst:

mycli

Die Ausgabe sollte in etwa so aussehen:

Um dir die Tabellen in der Da­ten­bank anzeigen zu lassen, gib den Befehl SHOW TABLES; ein und drücke Enter:

Die Groß- und Kleinschreibung spielt bei SQL-Befehlen keine Rolle. In diesem Artikel schreiben wir die Befehle in Großbuchstaben, um sie hervorzuheben. Du kannst sie aber auch in Kleinbuchstaben schreiben.

Du siehst nun die beiden Tabellen land und ort. Um dir den Aufbau einer Tabelle anzeigen zu lassen, kannst du den Befehl DESCRIBE verwenden. Gib z. B. den Befehl DESCRIBE land; ein, um dir den Aufbau der Tabelle land anzeigen zu lassen:

Du siehst nun die Spalten der Tabelle land und deren Datentypen.

Untersuche die Tabelle ort – welche Spalten gibt es und welche Datentypen haben sie?

4. Daten anzeigen

Um dir die Daten in einer Tabelle anzeigen zu lassen, kannst du den Befehl SELECT verwenden. Gib z. B. den Befehl SELECT * FROM land; ein, um dir alle Daten in der Tabelle land anzeigen zu lassen:

Du siehst nun alle Einträge in der Tabelle land. Eine Zeile entspricht einem Land in der Tabelle. Nutze die Pfeiltasten sowie Bild↑Bild↓, um durch die Tabelle zu navigieren.

Drücke Q (genau wie vorhin bei less), um zur Eingabeaufforderung von mycli zurückzukehren.

Der Befehl SELECT * bedeutet, dass alle Spalten ausgewählt werden sollen. Wenn du nur bestimmte Spalten anzeigen möchtest, kannst du diese explizit angeben. Gib z. B. den Befehl SELECT name, hauptstadt FROM land; ein, um dir nur die Spalten name und hauptstadt anzeigen zu lassen:

5. Zeilen filtern

Um nur bestimmte Zeilen anzuzeigen, kannst du den Befehl WHERE verwenden. Gib z. B. den Befehl SELECT * FROM land WHERE name = 'Deutschland'; ein, um dir nur das Land Deutschland anzeigen zu lassen:

Statt der einfachen Anführungszeichen ' kannst du auch doppelte Anführungszeichen " verwenden. Das ist besonders nützlich, wenn du Anführungszeichen in deinem Text hast, nach dem du filtern möchtest. Wichtig ist nur, dass du am Anfang und am Ende dieselben Anführungszeichen verwendest.
Wie viele Einwohner hat Griechenland? Welche Zahl erhältst du und wie ist sie zu interpretieren?

Du kannst auch mehrere Bedingungen kombinieren. Gib z. B. den Befehl SELECT * FROM land WHERE einwohner < 5 AND flaeche > 1000000; ein, um dir alle Länder anzeigen zu lassen, die weniger als 5 Millionen Einwohner haben und eine Fläche von mehr als 1 Million Quadratkilometern:

Wir sehen also nun die beiden Länder mit der niedrigsten Bevölkerungsdichte, die mindestens 1 Mio. km2 groß sind.

6. Zeilen sortieren

Um die Zeilen in einer Tabelle zu sortieren, kannst du den Befehl ORDER BY verwenden. Gib z. B. den Befehl SELECT * FROM land ORDER BY einwohner; ein, um dir die Länder nach ihrer Einwohnerzahl sortiert anzeigen zu lassen:

Du siehst nun die Länder nach ihrer Einwohnerzahl sortiert. Standardmäßig wird aufsteigend sortiert. Um absteigend zu sortieren, füge das Schlüsselwort DESC (für »descending«) hinzu. Gib z. B. den Befehl SELECT * FROM land ORDER BY einwohner DESC; ein, um die Länder nach ihrer Einwohnerzahl absteigend sortiert anzeigen zu lassen:

7. Ausgabe begrenzen

Um die Anzahl der Zeilen zu begrenzen, die angezeigt werden, kannst du den Befehl LIMIT verwenden. Gib z. B. den Befehl SELECT * FROM land LIMIT 5; ein, um dir nur die ersten 5 Länder anzeigen zu lassen:

8. Zusammenfassung

Du hast jetzt die einzelnen Bestandteile einer SQL-Abfrage kennengelernt:

Befehl Bedeutung
SELECT Was / Welche Spalten sollen angezeigt werden?
FROM Woher / Aus welcher Tabelle sollen die Daten kommen?
WHERE Filter / Welche Zeilen sollen angezeigt werden?
ORDER BY Sortierung / In welcher Reihenfolge sollen die Zeilen angezeigt werden?
LIMIT Anzahl / Wie viele Zeilen sollen angezeigt werden?

Du kannst diese Befehle kombinieren, um genau die Daten zu erhalten, die du benötigst.

Um mycli zu beenden, gib einfach den Befehl exit ein oder verwende die Tastenkombination StrgD.

Aufgaben

Beantworte die folgenden Fragen, indem du eine geeignete SQL-Abfrage formulierst. Notiere jeweils die Abfrage und dein Ergebnis. Formuliere die Abfrage möglichst so, dass du nur die benötigten Spalten erhältst.

  1. Gib eine Tabelle aller Länder aus. Dabei sollen Name, Einwohner und die Hauptstadt angezeigt werden und die Tabelle soll nach der Einwohnerzahl absteigend sortiert sein.

  2. Wie viele Länder gibt es in der Tabelle land?
    Hinweis: Du kannst bei SELECT statt Spaltennamen auch Funk­tio­nen verwenden, z. B. SELECT COUNT(Name) ... statt SELECT Name ....

  3. Wie viele Länder liegen in Europa?

  4. Welche Länder haben das Wort »arm« oder »bein« im Namen?
    Hinweis: Du kannst nicht nur nach exakten Begriffen suchen, sondern auch nach Teilen von Begriffen, z. B. WHERE Name LIKE '%land%', wenn du nach allen Ländern suchen möchtest, die den Begriff »land« im Namen haben.

  5. Welcher Ort hat die meisten Einwohner, wie viele Einwohner sind es und in welchem Land liegt dieser Ort?

  6. Wie viele Orte gibt es in Frankreich?
    Hinweis: Es gibt natürlich mehr Orte in Frankreich, als in dieser Tabelle stehen, aber wir wollen diese Frage in Bezug auf die uns zur Verfügung stehenden Daten beantworten.

  7. Gib die 10 bevölkerungsreichsten Orte in Frankreich aus.

  8. Gib jeweils drei Orte an, die den Begriff »arm« oder »bein« im Namen haben.

  9. Welche Orte in Deutschland liegen westlich von Aachen (6,046° Ost)?