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 SQL, die Structured Query Language. Wir beginnen mit einfachen Abfragen und kombinieren die einzelnen Bausteine anschließend zu eigenen Fragen an die Daten.

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:

Wir erstellen nun ein Verzeichnis für unser MySQL-Experiment. Klicke dazu auf »Open Folder« und gib mysql-terra ein:

Da das Verzeichnis noch nicht existiert, wirst du gefragt, ob das Verzeichnis erstellt werden soll. Bestätige die Frage mit Enter:

Öffne anschließend das Ter­mi­nal:

Du kannst das Ter­mi­nal auch maximieren, indem du auf das Symbol in der rechten oberen Ecke des Ter­mi­nals klickst.

1. Beispieldaten laden

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:

Klicke auf die Datei, um sie zu öffnen. Es befinden sich Daten zu Ländern und Städten darin.

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

mysql < terra1.sql

Der Import geht relativ schnell und wenn alles geklappt hat, solltest du keine Ausgabe sehen:

2. Die Da­ten­bank erkunden

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:

Du siehst die beiden Tabellen land und ort.

SQL-Befehle schreiben wir in diesem Tutorial zur besseren Les­bar­keit in Großbuchstaben. Für MySQL spielt die Groß- und Kleinschreibung der hier ver­wen­deten SQL-Schlüsselwörter keine Rolle.

Mit DESCRIBE kannst du untersuchen, welche Spalten eine Tabelle besitzt:

DESCRIBE land;

Die Tabelle land enthält Spalten für Kürzel, Name, Einwohnerzahl, Fläche, Hauptstadt und Kontinent mit ihren Datentypen.

Jede Spalte hat einen Namen und einen Datentyp. So erkennst du, welche Informationen in der Tabelle gespeichert werden.

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

3. Daten mit SELECT anzeigen

Mit SELECT fragst du Daten aus einer Tabelle ab. Ein Stern * steht dabei für alle Spalten:

SELECT * FROM land;

Das Abfrageergebnis listet alle Länder mit ihren gespeicherten Daten auf.

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 Ausgabe zu navigieren.

Bei langen Ergebnissen zeigt mycli die Ausgabe seitenweise an. Drücke Q, um zur SQL-Eingabe zurückzukehren.

Meistens brauchst du nicht alle Spalten. Schreibe die gewünschten Spaltennamen hinter SELECT, zum Beispiel:

SELECT name, hauptstadt FROM land;

Das Abfrageergebnis enthält nur die Namen der Länder und ihrer Hauptstädte.

4. Zeilen mit WHERE filtern

Mit WHERE wählst du nur die Zeilen aus, die eine Bedingung erfüllen:

SELECT * FROM land WHERE name = 'Deutschland';

Die gefilterte Tabelle enthält nur den Datensatz für Deutschland.

Texte stehen in SQL in einfachen Anführungszeichen, zum Beispiel 'Deutschland'.

Wie viele Einwohner hat Griechenland? Welche Zahl erhältst du und wie ist sie zu interpretieren?

Bedingungen lassen sich kombinieren. Mit AND müssen beide Bedingungen erfüllt sein:

SELECT * FROM land
WHERE einwohner < 5 AND flaeche > 1000000;

Die kombinierte Bedingung liefert zwei sehr große Länder mit weniger als fünf Millionen Einwohnern.

Das Ergebnis enthält genau die Länder, die beide Bedingungen erfüllen. Mit OR genügt dagegen eine der Bedingungen, zum Beispiel:

SELECT name FROM land
WHERE kontinent = 'Europa' OR kontinent = 'Asien';

Die kombinierte Bedingung liefert zwei sehr große Länder mit weniger als fünf Millionen Einwohnern.

5. Zeilen mit ORDER BY sortieren

Mit ORDER BY sortierst du ein Abfrageergebnis. Ohne weitere Angabe wird aufsteigend sortiert:

SELECT * FROM land ORDER BY einwohner;

Die Länder sind nach Einwohnerzahl aufsteigend sortiert.

Für eine absteigende Sortierung ergänzt du DESC:

SELECT * FROM land ORDER BY einwohner DESC;

Die Länder sind nach Einwohnerzahl absteigend sortiert.

6. Ausgabe mit LIMIT begrenzen

Mit LIMIT begrenzt du die Anzahl der ausgegebenen Zeilen:

SELECT * FROM land LIMIT 5;

Das begrenzte Abfrageergebnis enthält die ersten fünf Länder.

ORDER BY und LIMIT lassen sich gut kombinieren. Damit kannst du zum Beispiel nach einer Spalte sortieren und anschließend nur die ersten zehn Treffer ausgeben.

7. Zeilen mit COUNT zählen

COUNT(*) zählt, wie viele Zeilen ein Abfrageergebnis enthält:

SELECT COUNT(*) FROM land;

COUNT zählt die Zeilen der Tabelle land.

Auch COUNT kannst du mit WHERE kombinieren. So lässt sich zum Beispiel zählen, wie viele Datensätze eine bestimmte Bedingung erfüllen:

SELECT COUNT(*) FROM land WHERE kontinent = 'Asien';

COUNT zählt die Zeilen der Tabelle land.

8. Text mit LIKE durchsuchen

Mit LIKE kannst du Text nach einem Muster durchsuchen. Das Prozentzeichen % steht dabei für beliebig viele Zeichen. Die folgende Abfrage findet Ländernamen, in denen land vorkommt:

SELECT name FROM land
WHERE name LIKE '%land%'
ORDER BY name;

LIKE findet Ländernamen, in denen die Zeichenfolge land vorkommt.

'land%' würde dagegen nur Namen finden, die mit land beginnen, und '%land' nur Namen, die damit enden.

9. Unterschiedliche Werte mit DISTINCT anzeigen

Wenn du nur sehen möch­test, welche verschiedenen Werte in einer Spalte vorkommen, verwendest du DISTINCT:

SELECT DISTINCT kontinent FROM land
ORDER BY kontinent;

DISTINCT zeigt jeden unterschiedlichen Wert der Spalte Kontinent nur einmal.

Dabei fällt etwas auf: In den Beispieldaten kommen sowohl Europa als auch Europe vor. Eine Da­ten­bank speichert die Werte so, wie sie eingetragen wur­den; uneinheitliche Daten verschwinden also nicht von selbst. Solche Auffälligkeiten lassen sich mit Abfragen entdecken.

10. Zusammenfassung

Du kennst jetzt die wich­tig­sten Bausteine, die wir für die folgenden Aufgaben benötigen:

Baustein Bedeutung
SELECT Welche Spalten oder berechneten Werte sollen ausgegeben werden?
FROM Aus welcher Tabelle kommen die Daten?
WHERE Welche Zeilen erfüllen die Bedingung?
AND / OR Wie werden mehrere Bedingungen verknüpft?
ORDER BY In welcher Reihenfolge werden die Zeilen ausgegeben?
LIMIT Wie viele Zeilen werden höchstens ausgegeben?
COUNT(*) Wie viele Zeilen enthält das Ergebnis?
LIKE Welche Texte passen zu einem Muster?
DISTINCT Welche unterschiedlichen Werte kommen vor?

Die Bausteine lassen sich kombinieren. Eine typische Abfrage kann beispielsweise filtern, sortieren und die Ausgabe anschließend begrenzen.

Um mycli zu beenden, gib exit ein oder verwende StrgD.

11. Aufgaben

Beantworte die folgenden Fragen mit geeigneten SQL-Abfragen. Notiere jeweils deine Abfrage und das Ergebnis. Gib möglichst nur die Spalten aus, die du für die Antwort tatsächlich brauchst.

  1. Gib alle Länder mit Name, Einwohnerzahl und Hauptstadt aus. Sortiere die Tabelle nach der Einwohnerzahl absteigend.

  2. Wie viele Länder gibt es in der Tabelle land?

  3. Wie viele Länder liegen in Europa? Beachte die beiden unterschiedlichen Schreibweisen, die du mit DISTINCT entdeckt hast.

  4. Welche Länder haben die Zeichenfolge arm oder bein im Namen?

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

  6. Wie viele Orte aus Frankreich sind in der Tabelle ort gespeichert?

  7. Gib die zehn bevölkerungsreichsten Orte Frankreichs aus.

  8. Finde jeweils drei Orte, deren Name die Zeichenfolge arm beziehungsweise bein enthält.

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