SQL-Abfragen: Selektieren, filtern und gruppieren
In dieser interaktiven Lerneinheit erlernst du die wichtigsten SQL-Befehle zum Abfragen, Filtern und Gruppieren von Daten aus relationalen Datenbanken. Du übst anhand praktischer Beispiele, wie du mit SELECT-Anweisungen gezielt Informationen extrahierst, diese mit WHERE-Bedingungen filterst und mithilfe von GROUP BY aggregierst. Diese grundlegenden Abfragetechniken wendest du später täglich an, um aus Datenbanken genau die Informationen zu gewinnen, die du für deine Projekte benötigst.
Einführung
Du arbeitest im Support eines Onlineshops. Ein Kunde ruft an und fragt: “Welche meiner Bestellungen wurden noch nicht verschickt?” Du öffnest die Datenbank… und brauchst genau eine Abfrage, um die richtige Antwort zu finden.

Solche Fragen sind Alltag, sobald du mit echten Daten arbeitest - egal ob im Kundenservice, in der Logistik oder bei der Auswertung von Nutzerverhalten.
Damit du schnell und zuverlässig an die passenden Informationen kommst, brauchst du zwei Dinge: SELECT-Statements, um Daten auszuwählen, und WHERE-Klauseln, um gezielt zu filtern.
Lernziele
Nach dieser Lerneinheit kannst du:
-
SELECT-Statements korrekt formulieren, um gezielt einzelne oder mehrere Spalten aus einer Tabelle abzurufen. -
WHERE-Klauseln anwenden, um Datensätze anhand von Bedingungen zu filtern, inklusive logischer Operatoren wieAND,ORundNOT. -
Abfragen mit Berechnungen, Aliassen und festen Werten erstellen, um die Ausgabe zu strukturieren und die Lesbarkeit zu verbessern.
-
Komplexere Abfragen schreiben, die mehrere Bedingungen, Gruppierungen (
GROUP BY), Filter auf aggregierte Daten (HAVING), Sortierung (ORDER BY) und Begrenzung (LIMIT) kombinieren.
Überleitung
Wenn du Daten aus einer Tabelle lesen willst, brauchst du immer ein SELECT-Statement. Es ist der Ausgangspunkt jeder Abfrage – und genau das schauen wir uns jetzt an.
Was ist ein SELECT-Statement?
Das SELECT-Statement ist die grundlegendste und wichtigste Abfrageanweisung in SQL. Es wird verwendet, um Daten aus einer oder mehreren Tabellen einer Datenbank abzurufen. Mit SELECT kannst du gezielt Datenfelder auswählen, Datensätze filtern und Informationen auf verschiedene Weise anzeigen lassen.
Grundstruktur eines SELECT-Statements
Ein einfaches SELECT-Statement besteht aus mindestens zwei Teilen:
- SELECT: Hier gibst du die Spalten an, die du abrufen möchtest. Du kannst eine oder mehrere Spalten auswählen. Wenn du alle Spalten möchtest, verwendest du
*. - FROM: Gibt an, aus welcher Tabelle die Daten stammen.
SELECT Spalte1, Spalte2, ...
FROM Tabellenname;Beispiel:
SELECT vorname, nachname
FROM Mitarbeiter;Diese Abfrage liefert die Vornamen (vorname) und Nachnamen (nachname) aller Mitarbeiter aus der Tabelle Mitarbeiter.
Alle Spalten auswählen
Um alle Spalten einer Tabelle auszuwählen, verwendest du das *-Symbol:
SELECT *
FROM Mitarbeiter;Diese Abfrage liefert alle Spalten aus der Tabelle Mitarbeiter.
Spalten umbenennen mit AS
Du kannst Spalten in der Ausgabe umbenennen, um die Lesbarkeit zu verbessern:
SELECT vorname AS "Vorname", nachname AS "Nachname"
FROM Mitarbeiter;Hier werden die Spalten vorname und nachname in der Ausgabe als “Vorname” und “Nachname” bezeichnet.
Hinweis: Wenn der Alias Leerzeichen oder Sonderzeichen enthält, muss er in Anführungszeichen (” ”) gesetzt werden.
Konstantenwerte ausgeben und Berechnungen durchführen
Du kannst auch konstante Werte in deine Abfrage einfügen:
SELECT 'Mitarbeiter' AS "Rolle", vorname, nachname
FROM Mitarbeiter;Diese Abfrage fügt eine Spalte hinzu, die für jeden Datensatz den Wert “Mitarbeiter” enthält.
Berechnungen in SELECT-Abfragen
Es ist möglich, Berechnungen direkt in der SELECT-Anweisung durchzuführen:
SELECT preis, stueck, preis * stueck AS "Lagerwert"
FROM Lager;Diese Abfrage berechnet den Lagerwert für jeden Artikel, indem sie preis mit stueck multipliziert.
Was sind WHERE-Klauseln
Die WHERE-Klausel wird in einem SELECT-Statement verwendet, um die zurückgegebenen Datensätze anhand bestimmter Bedingungen zu filtern. Sie ermöglicht es, nur die relevanten Daten abzurufen, die den definierten Kriterien entsprechen.
Vergleichsoperatoren in WHERE-Klauseln
| Operator | Bedeutung |
|---|---|
| = | Gleichheit |
| <> oder != | Ungleichheit |
| < | Kleiner als |
| > | Größer als |
| ⇐ | Kleiner oder gleich |
| >= | Größer oder gleich |
Beispiele:
Gleichheit:
SELECT *
FROM Mitarbeiter
WHERE ort = 'Berlin';Diese Abfrage liefert alle Mitarbeiter, die in Berlin wohnen.
Ungleichheit
SELECT *
FROM Mitarbeiter
WHERE ort <> 'Berlin';Diese Abfrage liefert alle Mitarbeiter, die nicht in Berlin wohnen.
Größer als:
SELECT *
FROM Lager
WHERE preis > 20;Diese Abfrage liefert alle Artikel mit einem Preis über 20.
Logische Operatoren
| Operator | Bedeutung |
|---|---|
| AND | Beide Bedingungen müssen erfüllt sein. |
| OR | Mindestens eine der Bedingungen muss erfüllt sein. |
| NOT | Negiert eine Bedingung. |
Beispiele:
AND-Verknüpfung:
SELECT *
FROM Mitarbeiter
WHERE abteilung = 'IT' AND ort = 'Berlin';Diese Abfrage liefert alle Mitarbeiter aus der Abteilung IT, die in Berlin wohnen.
OR-Verknüpfung:
SELECT *
FROM Mitarbeiter
WHERE ort = 'Berlin' OR ort = 'Hamburg';Diese Abfrage liefert alle Mitarbeiter, die entweder in Berlin oder in Hamburg wohnen.
NOT-Operator:
SELECT *
FROM Mitarbeiter
WHERE NOT abteilung = 'HR';Diese Abfrage liefert alle Mitarbeiter, die nicht in der Personalabteilung (HR) arbeiten.
Bereichsprüfung mit BETWEEN
Mit BETWEEN prüfst du, ob ein Wert innerhalb eines bestimmten Bereichs liegt:
SELECT *
FROM Lager
WHERE preis BETWEEN 10 AND 100;Diese Abfrage liefert alle Artikel mit einem Preis zwischen 10 und 100.
Listenprüfung mit IN
Mit IN prüfst du, ob ein Wert in einer Liste von Werten enthalten ist:
SELECT *
FROM Mitarbeiter
WHERE abteilung IN ('Einkauf', 'Verkauf', 'IT');Diese Abfrage liefert alle Mitarbeiter, die in einer der angegebenen Abteilungen arbeiten.
Mustervergleich mit LIKE
Mit LIKE kannst du Textwerte mit Mustern vergleichen:
”%” steht für beliebig viele Zeichen. ”_” steht für genau ein beliebiges Zeichen.
Beispiel:
SELECT *
FROM Mitarbeiter
WHERE name LIKE 'M%er';Diese Abfrage findet alle Mitarbeiter, deren Name mit ‘M’ beginnt und mit ‘er’ endet, z. B. ‘Müller’ oder ‘Meier’.
Verwendung von Klammern für komplexe Bedingungen
Durch Klammerung kannst du die Reihenfolge der Auswertung beeinflussen:
SELECT *
FROM Mitarbeiter
WHERE (abteilung = 'IT' OR abteilung = 'HR') AND ort = 'Berlin';Diese Abfrage liefert alle Mitarbeiter aus den Abteilungen IT oder HR, die in Berlin wohnen.
Verwendung von Aggregatfunktionen
Aggregatfunktionen führen Berechnungen auf einer Gruppe von Werten durch und geben einen einzelnen Wert zurück.
Wichtige Aggregatfunktionen
- COUNT(): Zählt die Anzahl der Datensätze.
- AVG(): Berechnet den Durchschnittswert.
- SUM(): Berechnet die Summe von Werten.
- MIN(): Findet den kleinsten Wert.
- MAX(): Findet den größten Wert.
Beispiel: Berechnung des durchschnittlichen Preises
SELECT AVG(preis) AS "Durchschnittspreis"
FROM produkte;Diese Abfrage berechnet den durchschnittlichen Preis aller Produkte.
Was ist die GROUP BY-Klausel?
Die GROUP BY-Klausel wird verwendet, um die Ergebnisse nach einer oder mehreren Spalten zu gruppieren, oft in Kombination mit Aggregatfunktionen wie COUNT(), SUM(), AVG() usw.
Beispiel:
SELECT abteilung, COUNT(*) AS "Anzahl Mitarbeiter"
FROM Mitarbeiter
GROUP BY abteilung;Diese Abfrage zählt die Anzahl der Mitarbeiter in jeder Abteilung.
Beispiel: Berechnung des durchschnittlichen Gehalts pro Team
SELECT team, AVG(gehalt) AS "Durchschnittsgehalt"
FROM mitarbeiter
GROUP BY team;Diese Abfrage berechnet das durchschnittliche Gehalt pro Team.
Was ist die HAVING-Klausel?
HAVING
Die HAVING-Klausel ermöglicht es, Bedingungen auf Gruppierungen anzuwenden. Sie wird nach der Gruppierung angewendet.
Beispiel:
SELECT abteilung, COUNT(*) AS "Anzahl Mitarbeiter"
FROM Mitarbeiter
GROUP BY abteilung
HAVING COUNT(*) > 5;Diese Abfrage zeigt nur Abteilungen mit mehr als 5 Mitarbeitern.
Hinweis: HAVING wird verwendet, um Bedingungen auf aggregierte Daten anzuwenden, während WHERE für Zeilenbedingungen vor der Gruppierung verwendet wird.
Sortierung mit ORDER BY
Mit ORDER BY kannst du die Ergebnisse nach einer oder mehreren Spalten sortieren. Die Sortierung kann aufsteigend (ASC) oder absteigend (DESC) sein.
Beispiel:
SELECT vorname, nachname, geburtsdatum
FROM Mitarbeiter
ORDER BY geburtsdatum DESC;Diese Abfrage liefert die Mitarbeiter sortiert nach Geburtsdatum in absteigender Reihenfolge.
Ergebnisbegrenzung mit LIMIT
Mit LIMIT kannst du die Anzahl der zurückgegebenen Datensätze begrenzen.
Beispiel:
SELECT vorname, nachname
FROM Mitarbeiter
LIMIT 10;Diese Abfrage liefert die ersten 10 Mitarbeiter.
Entfernung von Duplikaten mit DISTINCT
Mit DISTINCT kannst du doppelte Datensätze in der Ausgabe vermeiden.
Beispiel:
SELECT DISTINCT abteilung
FROM Mitarbeiter;Diese Abfrage liefert eine Liste aller verschiedenen Abteilungen ohne Duplikate.
Berechnungen und Aliase
Du kannst arithmetische Operationen durchführen und das Ergebnis mit AS benennen.
Beispiel:
SELECT preis, stueck, preis * stueck AS "Gesamtwert"
FROM Lager;Diese Abfrage berechnet den Gesamtwert der Artikel im Lager.
Komplexe Abfragen erstellen
Du kannst mehrere Elemente kombinieren, um komplexe Abfragen zu erstellen:
SELECT vorname, nachname, ort
FROM Mitarbeiter
WHERE abteilung = 'Verkauf' AND gehalt > 3000
GROUP BY ort
HAVING COUNT(*) > 2
ORDER BY nachname
LIMIT 5;Diese Abfrage liefert die Vornamen, Nachnamen und Orte der Mitarbeiter aus der Abteilung Verkauf mit einem Gehalt über 3000. Sie gruppiert die Ergebnisse nach Ort und zeigt nur Orte mit mehr als 2 Mitarbeitern an. Schließlich werden die Ergebnisse nach Nachnamen sortiert und auf 5 Einträge begrenzt.
Alias-Regeln und Besonderheiten
- Alias-Namen setzen: Wenn der Alias ein SQL-Schlüsselwort ist oder Leerzeichen enthält, muss er in Anführungszeichen (” ”) gesetzt werden.
- Groß- und Kleinschreibung: In einigen Datenbanksystemen wie PostgreSQL müssen Namen, die mit einem Großbuchstaben beginnen sollen, in Anführungszeichen gesetzt werden.
Zusammenfassung
In dieser Lerneinheit hast du die grundlegenden Bausteine zur Datenabfrage mit SQL kennengelernt.
Aufbau eines SELECT-Statements
Du weißt jetzt, wie du:
- einzelne oder alle Spalten mit
SELECTauswählst, - mit
FROMdie entsprechende Tabelle angibst.
Zusätzlich kannst du:
- Spalten mithilfe von Aliasen (
AS) umbenennen, - feste Werte in die Ausgabe einfügen,
- Berechnungen innerhalb von
SELECT-Anweisungen durchführen.
Filtern mit der WHERE-Klausel
Du hast gelernt, wie du mit WHERE gezielt Datensätze filterst – mithilfe von:
- Vergleichsoperatoren:
=,>,<,!=usw. - Logischen Operatoren:
AND,OR,NOT
Außerdem hast du spezielle Filtertechniken angewendet:
BETWEEN– für WertebereicheIN– für ListenprüfungenLIKE– für Mustervergleiche
Gruppieren, Filtern, Sortieren und Begrenzen
Zum Abschluss hast du gelernt, wie du:
- Daten mit
GROUP BYgruppierst, - gruppierte Daten mit
HAVINGweiter filterst, - Ergebnisse mit
ORDER BYsortierst, - und die Anzahl der angezeigten Datensätze mit
LIMITbegrenzt.
Diese Kombinationen ermöglichen dir, komplexe und zielgerichtete Abfragen zu erstellen, die genau die benötigten Informationen liefern.