Die Sprache SQL

Die erste Datenbank

Übernommen von inf-schule.de

Als Beispieldatenbank betrachten wir die Datenbank terra, die aus zwei Tabellen besteht:

V⚙ort
  • ▤Name : varchar(30)
  • ▤Land : varchar(50)
  • #Einwohner : int(11)
  • #Laenge : decimal(10,4)
  • #Breite : decimal(10,4)
V⚙land
  • ▤LNR : varchar(4)
  • ▤Name : varchar(50)
  • #Einwohner : decimal(20,2)
  • #Flaeche : int(11)
  • ▤Hauptstadt : varchar(30)
  • ▤Kontinent : varchar(15)
  • #KontinentFlaeche : int(11)
  • #KontinentEinwohner : int(11)

Zur Erinnerung: Attribute, hinter denen varchar(..) steht, sind Textattribute, int(..) und decimal(..) stehen für Zahlenwerte. Man kann sie auch an den Symbolen ▤ und # unterscheiden.

SQL

Wenn unterschiedliche Programme auf die gleiche Datenbank zugreifen sollen, dann muss eine einheitliche Sprache vereinbart werden. Mit dieser Schnittstellen-Sprache können die Programme auf die Daten der zentralen Datenbank zugreifen. Wir lernen die Sprache SQL: Structured Query Language.

Aufgabe 1

Betrachte diesen ersten SQL-Befehl und führe ihn aus. Ändere dann einzelne Teile der Anfrage ab, indem du z. B. name durch laenge ersetzt oder auf eine andere Tabelle zugreifst.

Aufgabe 1 – Ausprobieren 🗄 terra (Länder und Orte)
Teste die Anfrage und verändere sie. Schau dir dazu den Aufbau der Tabellen oben an.

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Drag the Words
a) Beschreibe, was die einzelnen Teile des SQL-Befehls bewirken. SELECT legt fest, [___] . FROM legt fest, [___] . WHERE legt fest, [___] .
welche Bedingung die Datensätze erfüllen müssen wie viele Datensätze es gibt aus welcher Tabelle die Daten stammen welche Attribute ausgegeben werden wie die Datensätze sortiert werden
Multiple Choice

b) Was passiert, wenn du die Zeile WHERE land = 'Deutschland' auslässt?

Multiple Choice

c) Teste auch, die anderen Zeilen auszulassen. Welche Zeilen müssen in jeder Anfrage mindestens vorhanden sein?

Aufgabe 2

Orientiere dich an der Anfrage von Aufgabe 1. Schreibe SQL-Befehle, um …

Aufgabe 2a 🗄 terra (Länder und Orte)
a) die Namen aller Orte in Frankreich auszugeben.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 2b 🗄 terra (Länder und Orte)
b) alle Orte in Deutschland auszugeben, und zwar deren Name, Länge und Breite.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 3

Schreibe SQL-Befehle, um …

Aufgabe 3a 🗄 terra (Länder und Orte)
a) die Namen aller Länder zusammen mit ihrer Einwohnerzahl auszugeben.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 3b 🗄 terra (Länder und Orte)
b) die Namen aller Länder in Europa auszugeben.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 3c 🗄 terra (Länder und Orte)
c) nur die Namen aller Hauptstädte auszugeben.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

SQL – Structured Query Language

SQL ist eine universelle Datenbanksprache, die von praktisch allen aktuellen Datenbanksystemen verstanden wird. Mit SQL können alle wichtigen Aufgaben einer Datenbank erledigt werden:

  • Daten abfragen
  • Daten löschen, ändern und neu anlegen
  • Tabellenstrukturen definieren
  • Zugriffsrechte verwalten (wer darf welche Daten sehen und ändern)

Zunächst beschränken wir uns auf die Abfrage von Daten.

Merke

Eine SQL-Anfrage liefert immer eine neue Tabelle als Ergebnis.

Die Syntax einer SQL-Abfrage hat folgende wesentlichen Elemente:

SELECTListe der auszugebenden Attribute
FROMListe der Tabellen, aus denen Daten entnommen werden
WHEREBedingungen, die die Datensätze erfüllen müssen
ORDER BYAttribute, nach denen sortiert werden soll (Heft 5)

Zur Vereinfachung kann auch SELECT * angegeben werden, um alle Attribute anzuzeigen. Die Teile WHERE und ORDER BY können entfallen.

Bedingungen in SQL

Die WHERE-Anweisung erlaubt die Angabe komplexer Bedingungen:

  • Direkte Vergleiche auf Werte, z. B. Einwohner > 1000
  • Verbinden von mehreren Bedingungen durch die Operatoren AND, OR oder NOT (UND, ODER, NICHT; vgl. Programmierung in Python)
  • Filtern von Text-Attributen mit LIKE

Merke

Der Datentyp eines Attributs muss in der Bedingung beachtet werden:

  • Bei Text-Attributen müssen die Werte in einfachen Hochkommata (Shift + #) angegeben werden, z. B. Name = 'Berlin'. Doppelte Anführungszeichen werden hier auch akzeptiert, üblich sind aber die einfachen.
  • Bei Zahl-Attributen werden Werte ohne Anführungszeichen geschrieben.
  • Das Dezimaltrennzeichen ist wie im Englischen üblich ein Punkt (und kein Komma wie im Deutschen), z. B. Breite >= 50.2.

Eine Besonderheit ist der LIKE-Vergleich. Hier können im Wert Platzhalter für Texte angegeben werden: das Prozentzeichen % und der Unterstrich _.

Beispiele

-- alle Länder, die …
SELECT *
FROM land
WHERE NOT (Kontinent = 'Europa')
-- alle …
SELECT *
FROM ort
WHERE Land = 'Deutschland' AND Einwohner > 1000000
-- alle Orte, die …
SELECT *
FROM ort
WHERE Name LIKE 'P%'
-- alle Orte, …
SELECT *
FROM ort
WHERE Name LIKE 'A_len'
-- …
SELECT *
FROM ort
WHERE Name IN ('Mainz', 'Wiesbaden', 'Trier')
Aufgabe 4 – Ausprobieren 🗄 terra (Länder und Orte)
Aufgabe 4: Probiere die obigen Anfragen aus. Kopiere sie dazu nacheinander hier hinein oder tippe sie ab.

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Drag the Words
a) Ergänze, was die Befehle bewirken. Beispiel 1: alle Länder, die [___] . Beispiel 2: alle [___] . Beispiel 3: alle Orte, die [___] . Beispiel 4: alle Orte, [___] . Beispiel 5: [___] .
dann „len“ in Europa liegen Orte in Deutschland mit mehr als einer Million Einwohnern deren Name mit A beginnt Orte namens Mainz dann ein beliebiges Zeichen mit P beginnen auf P enden Wiesbaden oder Trier Orte in Deutschland mit mehr als 1000 Einwohnern nicht in Europa liegen
Drag the Words
b) Ergänze, wie der LIKE-Operator arbeitet und was * bewirkt. Ein Prozentzeichen bedeutet [___] . Ein Unterstrich bedeutet [___] . Ein * nach SELECT bedeutet [___] .
alle Tabellen genau ein beliebiges Zeichen alle Datensätze genau zwei Zeichen beliebig viele (auch keine) Zeichen alle Attribute

Aufgaben 5 und 6

Schreibe für die folgenden Aufgaben jeweils SQL-Anfragen.

Aufgabe 5 🗄 terra (Länder und Orte)
Aufgabe 5: Gib alle Orte in Frankreich aus, die auf s enden. Es sollen nur die Namen angezeigt werden.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

Aufgabe 6 🗄 terra (Länder und Orte)
Aufgabe 6: Gib alle Orte in Deutschland aus, deren vorletzter Buchstabe ein e ist. Es sollen nur die Namen angezeigt werden.
Datenbankschema „terra (Länder und Orte)“ anzeigen
land (197 Datensätze)
  • 🔑 LNR varchar(4)
  • Name varchar(50)
  • Einwohner decimal(20,2)
  • Flaeche int(11)
  • Hauptstadt varchar(30)
  • Kontinent varchar(15)
  • KontinentFlaeche int(11)
  • KontinentEinwohner int(11)
ort (26851 Datensätze)
  • Name varchar(30)
  • Land varchar(50)
  • Einwohner int(11)
  • Laenge decimal(10,4)
  • Breite decimal(10,4)

🔑 Primärschlüssel · → Fremdschlüssel (verweist auf Tabelle.Attribut)

Struktur vorgeben:

Ohne Anmeldung wird deine Abfrage nicht gespeichert.

✏️ Übungen zu diesem Kapitel

3 freiwillige Aufgaben zum Üben und Weiterdenken.

Zu den Übungen →