Datenanweisungen
Datenanweisungen dienen dazu, die zuvor mit Schemaanweisungen angelegten Datenbanktabellen mit Daten zu füllen, Auszüge aus dem Datenbestand auszugeben, Daten zu verändern oder zu löschen. In diesem Kapitel wollen wir die Möglichkeiten kennenlernen, mithilfe der Abfragesprache SQL Datenanweisungen zu formulieren.
Doch bevor es richtig losgeht, ein paar Hinweise zu SQL:
- Es gibt verschiedene SQL-Dialekte, d.h. die SQL-Anweisungen können sich von Datenbank zu Datenbank unterscheiden. Die hier aufgeführte Anweisungen gelten für PostgreSQL v12, die Datenbank, die wir in dem DBFiddle bereits verwenden.
- SQL-Schlüsselwörter wie
SELECT
,WHERE
oderORDER BY
werden wir im Folgenden groß schreiben. So heben sie sich besser von Tabellen- oder Spaltennamen ab. Es ist aber genauso möglich, diese Befehle klein zu schreiben (select
,where
,order by
). - Zeichenketten werden in SQL nur mit einem einfachen Anführungszeichen
'
umschlossen:'Schulz'
. Anders als bei den strings in Python können hier doppelte Anführungszeichen nicht verwendet werden.
Datenbankabfragen
Grundlage einer jeden Datenbankabfrage bildet der Befehl SELECT
, mit dem angegeben wird, welche Tabellenspalten für die Ausgabe von Interesse sind. Sollten in dieser Hinsicht keine Einschränkungen erforderlich sein, kann stattdessen auch *
verwendet werden.
- Die Syntax einer Datenabfrage (mit einer Bedingung versehen) sieht im Allgemeinen so aus:
SELECT Spalte1, Spalte2, ... FROM Tabelle WHERE Bedingung
Ähnlich zu der betrachteten Übungsaufgabe im Kapitel Normalisierung soll auch hier eine Tabelle zur Verwaltung der Schülerdaten existieren. Diese Tabelle trägt die Bezeichnung Schüler und verwaltet zu jedem Schüler die Attribute Nachname, Vorname, Klassenstufe und S_Nr (als Primärschlüssel). Nachname und Vorname eines Schülers werden als Zeichenkette abgelegt, Klassenstufe und S_Nr als Zahlen.
Auf diese Tabelle sollen nun im folgenden einige SQL-Abfragen gestellt werden.
SELECT
soll zum besseren Verständnis beitragen.- Um sich einen Überblick zu verschaffen, sollen zu allen Schülern deren Daten ausgegeben werden:
SELECT * FROM Schueler;
- Nur Vorname und Nachname aller Schüler ausgeben:
SELECT Vorname, Nachname FROM Schueler;
Ein häufig verwendeter Zusatz neben SELECT
ist WHERE
, das als Filter fungiert, indem in einer SQL-Abfrage nur Daten zurückgegeben werden, deren Werte der Bedingung entsprechen. Je nach Umfang einer Tabelle wird WHERE
häufiger verwendet, da in den meisten Fällen nur bestimmte Daten von Interesse sind.
- Alle Daten für die Schüler mit dem Vornamen 'David' ausgeben:
SELECT * FROM Schueler WHERE Vorname = 'David';
- Vorname und Nachname der Schüler der Klassen 7 bis 10 ausgeben:
SELECT Vorname, Nachname FROM Schueler WHERE Klassenstufe >= 7 AND Klassenstufe <= 10;
Falls die ausgegebenen Daten einer bestimmten Sortierung folgen sollen, kann mit Hilfe von ORDER BY
die Bezeichnung des Attributs (Spaltenname) angegeben werden, nach dem die Ausgabedaten geordnet werden. Die Ordnung folgt grundsätzlich der aufsteigenden Sortierung. Für die absteigende Sortierung muss lediglich der Zusatz DESC
mit angegeben werden. Für die aufsteigende Sortierung kann explizit ASC
verwendet werden.
- Alle Daten für die Schüler nach der Klassenstufe sortiert ausgeben:
SELECT * FROM Schueler ORDER BY Klassenstufe;
WHERE
undORDER BY
können auch kombiniert eingesetzt werden, um die Schüler der Klassenstufen 7-10 absteigend sortiert anzugeben:SELECT Vorname, Nachname FROM Schueler WHERE Klassenstufe >= 7 AND Klassenstufe <= 10 ORDER BY Klassenstufe DESC;
- Zusätzlich ist es möglich, nach mehreren Kriterien zu sortieren, wobei die Reihenfolge, in der die Kriterien hinter dem
ORDER BY
eingefügt werden, die Priorität der Sortierung beeinflusst.
In diesem Beispiel werden die Schüler entsprechend der Klassenstufe absteigend sortiert. Innerhalb der Klassenstufe erfolgt die Sortierung der Schüler nach dem Vorname aufsteigend:SELECT * FROM Schueler ORDER BY Klassenstufe DESC, Vorname;
Der AS
Befehl wird verwendet, um einer Tabelle oder Spalte einen anderen Namen zuzuweisen. Dies kann beispielsweise bei einem JOIN
erforderlich werden, wenn zwei Tabellen über Spalten verfügen, die den gleichen Namen haben.
- Benenne bei der Ausgabe der Tabelle Schüler die Spalte S_Nr in S_id um:
SELECT S_Nr AS S_id, Nachname, Vorname FROM Schueler;