Die Datenbanksprache SQL hilft dir, Daten in relationalen Datenbanken zu lesen, zu ändern und zu strukturieren. Mit einer Abfrage findest du etwa alle Bestellungen eines Kunden; mit einem anderen Befehl legst du eine Tabelle an oder aktualisierst einen Datensatz. Dieser Einstieg erklärt die wichtigsten Begriffe und führt dich mit nachvollziehbaren Beispielen durch die ersten SQL-Anweisungen.
Die Grundideen gelten für Systeme wie SQL Server, PostgreSQL, MySQL und SQLite. Die ausführbaren Beispiele in diesem Beitrag verwenden Microsoft SQL Server und T-SQL. Einzelne Befehle und Datentypen unterscheiden sich zwischen den Datenbanksystemen; darauf gehen wir am Ende ein.
Was ist die Datenbanksprache SQL?
SQL steht für Structured Query Language. Die Sprache beschreibt, welche Daten du benötigst oder ändern möchtest. Wie eine Abfrage intern ausgeführt wird, plant das Datenbanksystem. Deshalb wird SQL als überwiegend deklarative Sprache bezeichnet.
SQL ist nicht dasselbe wie ein Datenbankserver: SQL Server, PostgreSQL und MySQL sind Datenbanksysteme, die SQL verarbeiten. Sie unterstützen gemeinsame Grundkonzepte, besitzen aber auch eigene Erweiterungen und Unterschiede. Bei Microsoft SQL Server heißt die zugehörige Erweiterung Transact-SQL, kurz T-SQL.
Tabellen, Zeilen, Spalten und Schlüssel verstehen
Eine relationale Datenbank organisiert Daten in Tabellen. Eine Tabelle Kunden könnte für jeden Kunden eine Zeile enthalten. Spalten wie KundenID, Name und Ort beschreiben seine Eigenschaften. Der Datentyp einer Spalte legt fest, welche Werte dort gespeichert werden können: int für ganze Zahlen oder nvarchar für Unicode-Text sind Beispiele aus SQL Server.
Ein Primary Key identifiziert jede Zeile eindeutig. In einer Tabelle Bestellungen kann eine Spalte KundenID auf einen Kunden verweisen. In einer dauerhaften Datenbankstruktur lässt sich diese Beziehung mit einem Foreign Key absichern. Die ausführlichen Regeln findest du im Beitrag Primary Keys und Indizes im SQL Server.
NULL bedeutet, dass für eine Spalte kein Wert vorliegt. Das ist nicht dasselbe wie die Zahl 0 oder eine leere Zeichenfolge. Wenn du Zeilen ohne Wert suchst, verwendest du IS NULL statt = NULL.
SQL-Beispieldaten für die ersten Abfragen anlegen
Die folgenden Beispiele kannst du in einem SQL-Server-Abfragefenster ausprobieren. Führe den Vorbereitungsblock einmal vollständig aus und bleibe für die weiteren Beispiele in derselben Verbindung. Er erstellt nur lokale temporäre Tabellen mit # und verändert keine vorhandenen Anwendungstabellen. Bei erneutem Ausführen werden lediglich diese Übungstabellen neu erstellt.
IF OBJECT_ID('tempdb..#Bestellungen') IS NOT NULL
DROP TABLE #Bestellungen;
IF OBJECT_ID('tempdb..#Kunden') IS NOT NULL
DROP TABLE #Kunden;
CREATE TABLE #Kunden (
KundenID int NOT NULL PRIMARY KEY,
Name nvarchar(100) NOT NULL,
Land nvarchar(50) NOT NULL,
Ort nvarchar(50) NULL
);
CREATE TABLE #Bestellungen (
BestellungID int NOT NULL PRIMARY KEY,
KundenID int NOT NULL,
Betrag decimal(10, 2) NOT NULL
);
INSERT INTO #Kunden (KundenID, Name, Land, Ort)
VALUES
(1, N'Anna Weber', N'Deutschland', N'Berlin'),
(2, N'Ben Meier', N'Deutschland', N'Hamburg'),
(3, N'Clara Roth', N'Österreich', NULL);
INSERT INTO #Bestellungen (BestellungID, KundenID, Betrag)
VALUES
(101, 1, 49.90),
(102, 1, 79.00),
(103, 2, 25.50);
Die Namen und Beträge sind reine Beispieldaten. Das N vor Textwerten kennzeichnet in T-SQL Unicode-Zeichenfolgen. Weil die Tabellen nur für diese Sitzung existieren, musst du den Block nach einem neuen Verbindungsaufbau erneut ausführen.
Daten mit SELECT lesen
SELECT ist der wichtigste Befehl für den Einstieg. Du wählst aus, welche Spalten angezeigt werden sollen und aus welcher Tabelle die Daten kommen:
SELECT KundenID, Name, Land
FROM #Kunden;
Ein Sternchen in SELECT * liefert alle Spalten. Das ist beim ersten Blick auf eine kleine Tabelle praktisch. Für Anwendungen und Berichte ist es meist besser, die benötigten Spalten ausdrücklich zu nennen.
Mit WHERE filtern und mit ORDER BY sortieren
WHERE beschränkt das Ergebnis auf Zeilen, die eine Bedingung erfüllen. ORDER BY legt ihre Reihenfolge fest:
SELECT KundenID, Name, Ort
FROM #Kunden
WHERE Land = N'Deutschland'
ORDER BY Name ASC, KundenID ASC;
Die Abfrage liefert Anna und Ben. Ohne ORDER BY ist die Reihenfolge der Ergebniszeilen nicht garantiert. Für fehlende Ortsangaben lautet die Bedingung:
SELECT KundenID, Name
FROM #Kunden
WHERE Ort IS NULL;
Damit findest du Clara. Weitere Filter, Sortierungen und Abfrageformen erklärt der ausführliche Beitrag zur SELECT-Anweisung in SQL Server.
Mit JOIN verbundene Daten abfragen
Die Tabelle #Bestellungen enthält nur die KundenID, nicht den Kundennamen. Ein JOIN verbindet die passenden Zeilen beider Tabellen:
SELECT b.BestellungID,
k.Name,
b.Betrag
FROM #Bestellungen AS b
INNER JOIN #Kunden AS k
ON k.KundenID = b.KundenID
ORDER BY b.BestellungID;
Das Ergebnis zeigt drei Bestellungen mit den zugehörigen Namen. Clara erscheint hier nicht, weil für sie keine Bestellung vorhanden ist. Mit einem LEFT JOIN könntest du auch Kunden ohne Bestellung anzeigen.
Mit GROUP BY Ergebnisse zusammenfassen
Wie viel haben die einzelnen Kunden bestellt? GROUP BY fasst Zeilen zu Gruppen zusammen; COUNT und SUM berechnen Werte pro Gruppe:
SELECT k.KundenID,
k.Name,
COUNT(b.BestellungID) AS AnzahlBestellungen,
SUM(b.Betrag) AS Gesamtbetrag
FROM #Kunden AS k
INNER JOIN #Bestellungen AS b
ON b.KundenID = k.KundenID
GROUP BY k.KundenID, k.Name
ORDER BY k.KundenID;
Anna hat zwei Bestellungen über zusammen 128,90; Ben eine über 25,50. Clara erscheint auch in dieser Abfrage nicht, weil der INNER JOIN nur passende Zeilen liefert. Mit HAVING könntest du anschließend ganze Gruppen filtern, etwa Kunden mit mehr als einer Bestellung.
Welche Arten von SQL-Befehlen gibt es?
Zur Orientierung werden SQL-Befehle häufig in Kategorien eingeteilt. Die Namen sind nützlich, aber keine starre Grenze: Manche Quellen ordnen beispielsweise SELECT anders ein.
| Bereich | Typische Befehle | Aufgabe |
|---|---|---|
| Abfragen, oft DQL genannt | SELECT |
Daten lesen und auswerten |
| Daten ändern, DML | INSERT, UPDATE, DELETE |
Zeilen hinzufügen, ändern oder löschen |