Datenanweisungen

Theorie IconDatenanweisungen 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 oder ORDER 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.

Zwei Beispiele zu 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 und ORDER 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;