In den folgenden Kapiteln werde ich beliebte SQL Befehle vorstellen. Dafür bedienen wir uns an einer Beispieltabelle:
Die Tabelle heißt Mitarbeiter und enthält die Spalten ID, Name, Vorname, Wohnort, Abteilung und Gehalt.

Relationale Datenbanken
Zuvor noch eine kleine Vorbemerkung. Es gibt verschiedene Datenbanktypen. Wir wollen uns auf Relationale Datenbanken konzentrieren. Doch was ist eine relationale Datenbank?
Relationale Datenbanken sind das am weitesten verbreitete Datenbankmodell. Sie werden für die Speicherung und Bearbeitung von Daten durch Computersysteme verwendet. Sie speichern Daten in verschiedenen Tabellen (bestehend aus Spalten und Zeilen), die untereinander in Beziehung stehen. Die Spalten der Tabelle werden auch als Attribute bezeichnet und die Zeilen als Tupel. Das den relationalen Datenbanken zugehörige Datenbankmanagementsystem nennt sich RDBMS mit „R“ für „Relational“. Um Daten in relationalen Datenbanken zu manipulieren oder Abfragen durchzuführen, kommt die Datenbanksprache SQL zum Einsatz.
Die verschiedenen Befehle in SQL – DML
Eine wichtige Eigenschaft der Zugriffssprache SQL ist die Abfrage von Daten. SQL fragt nicht wie wir die Daten finden, sondern ausschließlich, welche Daten wir suchen. Dies vereinfacht die Zugriffssprache erheblich und ist einer der Hauptgründe warum sich relationale Datenbanken und insbesondere SQL so schnell verbreitet haben. Für den Anwender hat das vor allem den Vorteil, dass er sich nicht mit komplexen technischen Anweisungen beschäftigen muss, sondern gleich mit einfachen Befehlen z. B. die Datenabfrage starten kann.
Das folgende Kapitel beschäftigt sich mit dem Datenzugriff auf existierende Datenbanken. Diese Befehle umfassten die Datenzugriffssprache DML.
Der Abfragebefehl SELECT
In SQL steht zur Suche und Abfrage von Daten einer Datenbank der Befehl SELECT zur Verfügung. Wollen wir unsere komplette Beispieltabelle ausgegeben bekommen schreiben wir:

Jeder Select Befehl enthält den Zusatz FROM und endet mit einem Semikolon. Mit FROM schreiben wir den Namen der Tabelle, die wir ausgeben wollen. Zwischen den Bezeichnern SELECT und FROM geben wir die Attribute (Spaltennamen) an, die wir anzeigen möchten. Das Sternsymbol ist eine Abkürzung und steht für alle Attribute.
Wollen wir nur den Namen und Wohnort aller Mitarbeiter ausgeben, lautet der Befehl:

Die Ausgabe ist folgende:

Die Bezeichner der SQL Sprache (z.B. SELECT und FROM) dürfen nicht als Spalten- oder Tabellennamen in den Tabellen der Datenbank verwendet werden. Die Schreibweise der Spaltennamen ist jedoch beliebig. Sie können beliebig viele Leerzeichen oder Zeilenwechsel enthalten. Ebenfalls wird in SQL nicht zwischen Groß- und Kleinschreibung unterschieden. Somit könnte man den SELECT Befehl auch wie folgt eintippen:

Zur Eingabe der Befehle werden benutzerfreundliche Schnittstellen der Datenbankhersteller angeboten, wie beispielsweise SQL Developer. Ich verwende PostgreSQL.
Die Spaltenauswahlliste ist eine Liste von Spaltenbezeichnungen, die durch Kommata voneinander getrennt werden. Hier sind nicht nur Spaltennamen erlaubt, sondern beliebige Ausdrücke. Wenn wir die Namen aller Mitarbeiter und deren Jahresgehalt abfragen wollen, so erhalten wir diese Angabe durch den Befehl:

Ausgegeben wird nun eine Tabelle mit zwei Spalten, deren Spaltenbezeichnungen Name und Jahresgehalt lauten. Der Bezeichner AS steht für Aliasnamen (Ersatznamen) für die Spalten und Tabellen. In der Ergebnismenge der Abfrage wird das Gehalt nun in der Ausgabespalte als Jahresgehalt (großgeschrieben) bezeichnet. Der Spaltenname der eigentlichen Tabelle ändert sich jedoch dadurch nicht:

Mit Hilfe von Aggregatsfunktionen ist es möglich Berechnungen auszugeben. Wichtig dafür ist, dass sich die Aggregatsfunktionen auf alle Zeilen beziehen und als Ergebnis genau ein Wert erzeugt wird.
Folgende Aggregratsfunktionen gibt es in SQL
- AVG (Average) Mittelwert ermittelt über alle Zeilen
- COUNT (Count) Anzahl aller Zeilen
- MAX (Maximum) Maximalwert aller Zeilen
- MIN (Minimum) Minimalwert aller Zeilen
- SUM (Sum) Summenwert, summiert über alle Zeilen
Beispiel:

Dieser Befehl zeigt die Anzahl der in der Tabelle gespeicherten Mitarbeiter an:

DISTINCT ist ebenfalls ein oft verwendeter Bezeichner. Geben wir DISTINCT mit an werden gleiche Ergebniszeilen nur einmal ausgegeben. Alle ausgegebenen Zeilen sind somit eindeutig. Mit der Angabe ALL werden alle erzeugten Ergebnisse einzeln ausgegeben. Diese Angabe ist standardmäßig eingestellt und kann daher weggelassen werden. Wollen wir nur die Wohnorte der Mitarbeiter ausgeben lassen schreiben wir:

Nun werden alle Orte ausgegeben. Wohnen nun zwei Mitarbeiter in dem gleichen Ort wird dieser zweimal ausgegeben. Mit

wird nun jeder Ort nur einmal ausgegeben, auch wenn dieser zweimal in der entsprechenden Spalte genannt wird.
Die WHERE-Klausel
Die WHERE-Klausel ist in der Praxis in vielen SELECT Befehlen zu sehen. WHERE bestimmt, dass diejenigen Zeilen selektiert werden sollen, die die entsprechende Bedingung erfüllen. Alle anderen Tupel erscheinen nicht in der Ergebnisrelation. Wollen wir die Namen der Mitarbeiter ausgegeben haben, deren Gehalt größer als 3000 Euro ist, so schreiben wir:

Die Bedingung in der WHERE Klausel ist ein boolescher Ausdruck, der je nach Zeile wahr oder falsch sein kann. Ebenfalls sind Operatoren in der WHERE Klausel zulässig.
Folgende Operatoren werden in SQL verwendet:
- Boolsche Operatoren NOT, AND, OR
- Vergleichsoperatoren <, <=, >, >=, =, <>
- Intervalloperator [NOT] BETWEEN … AND
- Enthaltenoperator [NOT] IN
- Ähnlichkeitsoperator [NOT] LIKE
- Auswahloperatoren ALL, ANY, SOME
- Existenzoperator EXISTS
- Nulloperator IS [NOT] NULL
Der Enthaltenoperator entnimmt zum Beispiel die gültigen Werte einer Menge. Sollen nur diejenigen Mitarbeiternamen ausgegeben werden, die genau 2500, 4000 oder 2700 Euro verdienen, sollte folgender Befehl verwendet werden:

Die GROUP BY-Klausel
GROUP BY ermöglicht das Zusammenfassen von Zeilen nach bestimmten Eigenschaften und hat eine Ähnlichkeit zum Bezeichner DISTINCT. Jedoch dürfen in der GROUP BY Klausel nur eine Aufzählung von Spaltennamen eingetragen werden. Komplexe Spaltenausdrücke sind nicht erlaubt. Ebenfalls müssen die Spaltennamen auch hinter SELECT aufgelistet sein, sonst ist eine Gruppierung nicht möglich. Wir können daher auch mit GROUP BY die Wohnorte aller Mitarbeiter auflisten, wobei jeder Wohnort nur einmal erscheint:

Die ORDER BY-Klausel
Alle Relationen in relationalen Datenbanken sind ungeordnet. Die ORDER BY-Klausel sortiert den kompletten Select Befehl nach entsprechenden Angaben. SQL unterstützt aufsteigendes sowie auch absteigendes Sortieren. Die Sortierreihenfolge wird durch die Angabe der Bezeichner ASC (ascending, aufsteigend) und DESC (descending, absteigend) festgelegt. Bei fehlender Angabe wird immer eine aufsteigende Sortierung vorgenommen. Wollen wir zum Beispiel alle Wohnorte der Mitarbeiter sortiert ausgeben, wobei uns vor allem interessiert, in welchen Orten die meisten Mitarbeiter wohnen, so könnten wir schreiben:

Zunächst wird absteigend nach der Anzahl sortiert:

Bei gleicher Anzahl werden die Wohnorte alphabetisch ausgegeben.
Mutationsbefehle in SQL
Der DELETE Befehl löscht alle Zeilen der angegebenen Relation, die die Bedingung in der WHERE-Klausel erfüllen. Scheidet etwa Frau Rinck aus der Firma aus, so wird der entsprechende Eintrag in der Mitarbeitertabelle durch den folgenden Befehl entfernt:

Der UPTDATE Befehl ändert bestehende Einträge. Nach dem Bezeichner SET werden die neuen Werte angegeben. Um etwa allen Mitarbeitern, die weniger als 3000 Euro verdienen, eine Gehaltserhöhung von 5 % zukommen zu lassen, genügt ein einziger Update Befehl:

Unsere neue Tabelle schaut nun wie folgt aus:

In SQL kann ich Zeilen durch den INSERT Befehl hinzufügen. Nachdem ich einen CREATE Befehl eingetippt habe erhalte ich eine leere Tabelle mit Spaltennamen, jedoch ohne Zeileninhalte. Möchte ich diese nun mit Werten befüllen, schreibe ich INSERT INTO wie folgt:

Wir haben nun sieben Zeilen mit entsprechenden Werten gefüllt. Die Reihenfolge der Angabe in der Spaltenliste und der Auswahlliste muss aufeinander abgestimmt sein. Durch einen UPDATE Befehl kann ich nachträglich einzelne Zeileninhalte (z. B. die Abteilung) hinzufügen oder ändern.

Die Beschreibungssprache SQL – DDL
Die Datenbankbeschreibungssprache DDL gibt relativ viele Befehle zum Erzeugen, Ändern und Löschen von Tabellen und Sichten. Hierzu möchte ich im Folgenden die Befehle CREATE, ALTER und DROP vorstellen.
Der wichtige Befehl der Beschreibungssprache ist der Befehl CREATE TABLE. Mit diesem Befehl werden Tabellen angelegt.
Möchte ich meine Tabelle (siehe Abbildung) erstellen arbeite ich mit folgender Syntax:

Gebe ich nun meinen SELECT * Befehl ein, wird mir eine Tabelle mit leeren Zeilen (kein Inhalt) ausgegeben. Die Spalten sind durch den CREATE Befehl schon belegt:

Beim Erzeugen einer Tabelle ist es wichtig, für die einzelnen Spalten einen entsprechenden Datentypen zu übergeben. Folgende wichtige Datentypen sind in SQL vorhanden:
- INTEGER (INT) Ganzzahl
- DECIMAL(x,y) x stellige Zahl mit y Nachkommastellen
- BIT(n) Bitleiste der festen Länge n
- VARCHAR(n) Variable Zeichenkette mit bis zu n Zeichen
- NVARCHAR(n) International, chinesische Zeichen ebenfalls mit ablegen
- CHAR(n) n lange Zeichenlänge wird reserviert
- DATE Datum (Jahr, Monat, Tag)
- TIME Uhrzeit (Stunde, Minute, Sekunde)
Es gibt noch weitaus mehr Datentypen in SQL, jedoch habe ich mich hier auf eine Auswahl beschränkt.
Wichtig für die Integrität einer Datenbank sind Spalten- und Tabellenbedingungen. Jedes einzelne Attribut kann wahlweise durch eine oder mehrere Bedingungen eingeschränkt werden. Wir können mit diesen Bedingungen den Primärschlüssel (primary key) und alternative Schlüssel festlegen. Ebenfalls können wir festlegen, dass Attribute keine Nullwerte (not null) enthalten dürfen.
Tabellen ändern und löschen
Auch bei einem optimalen Design müssen wir damit rechnen, dass die Datenbankstruktur manchmal an Änderungen in der realen Umgebung angepasst werden muss. Für diese Aufgabe, meist handelt es sich um Erweiterungen, steht der SQL Befehl ALTER TABLE zur Verfügung.

–> Die Spalte Führungskraft wird mit dem Datentypen VARCHAR(30) hinzugefügt und die Werte werden vorerst auf Null gesetzt
Nun möchte ich die Spalte wieder löschen, da ich die Führungskraft lieber in einer separaten Tabelle aufführen möchte. Dafür schreibe ich:

Wir können mit einem ALTER TABLE Befehl entweder genau ein neues Attribut (Spalte) hinzufügen oder ein bestehendes Attribut entfernen oder eine weitere Tabellenbedingung einfügen oder eine existierende Tabellen- oder Spaltenbedingung löschen.
Mit dem DROP Befehl können wir entweder einzelne Spalten, oder die gesamte Tabelle löschen. Geben wir nun

ein. Durch diesen Befehl haben wir die komplette Tabelle gelöscht. Tippen wir nun den SELECT * Befehl ein bekommen wir folgende Ausgabe:

Neben den vorgestellten Befehlen gibt es noch viele weitere SQL Befehle. Ziel dieses Abschnittes war es jedoch einen kleinen Einblick in die einfache Handhabung der SQL Statements zu geben, um ein grundlegendes Verständnis zur Theorie und zum Aufbau von SQL-Datenbanken zu vermitteln.
Quellen:
- SQL-Seminarskript der SPE (Siemens Professional Education School)
- Schicker, Edwin: Datenbanken und SQL, 5. Auflage
- Pleyer, Adi: Vorlesungsunterlagen Modul Datenbanken aus dem 3. Semester