Die Sprache SQL
Die erste Datenbank
Übernommen von inf-schule.de
Als Beispieldatenbank betrachten wir die Datenbank terra, die aus zwei Tabellen besteht:
- ▤Name : varchar(30)
- ▤Land : varchar(50)
- #Einwohner : int(11)
- #Laenge : decimal(10,4)
- #Breite : decimal(10,4)
- ▤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.
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
b) Was passiert, wenn du die Zeile WHERE land = 'Deutschland' auslässt?
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 …
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Aufgabe 3
Schreibe SQL-Befehle, um …
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
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:
SELECT | Liste der auszugebenden Attribute |
FROM | Liste der Tabellen, aus denen Daten entnommen werden |
WHERE | Bedingungen, die die Datensätze erfüllen müssen |
ORDER BY | Attribute, 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,ORoderNOT(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')Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Aufgaben 5 und 6
Schreibe für die folgenden Aufgaben jeweils SQL-Anfragen.
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.
Datenbankschema „terra (Länder und Orte)“ anzeigen
- 🔑 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)
- 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)
Ohne Anmeldung wird deine Abfrage nicht gespeichert.