SQL SELECT Erklärung für Einsteiger: Syntax und Praxis
SELECT ist der Befehl, mit dem du Daten aus einer relationalen Datenbank abrufst. Er liest Zeilen und Spalten aus einer Tabelle und gibt sie als Ergebnismenge zurück. Die SELECT-Anweisung ist der grundlegendste Befehl zum Abrufen von Daten aus relationalen Datenbanken und bildet das Fundament für nahezu jede SQL-Analyse.
SELECT * FROM kunden;
Typische Einsatzfälle auf einen Blick:
- Alle Datensätze einer Tabelle anzeigen
- Bestimmte Spalten oder gefilterte Zeilen abrufen
- Daten aggregieren, zum Beispiel Umsätze summieren oder Kunden zählen
- Ergebnisse aus mehreren Tabellen per JOIN kombinieren
Wichtige Erkenntnisse
SELECT ist der Kern jeder SQL-Abfrage: Wer Syntax, Klauselreihenfolge und die wichtigsten Fehlerquellen kennt, kann die meisten Datenbankaufgaben lösen.| Thema | Details |
| Grundsyntax | SELECT spalte FROM tabelle ist die Mindestform; alle weiteren Klauseln sind optional. |
| Klauselreihenfolge | SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY; intern wertet die Datenbank FROM zuerst aus. |
| Häufiger Fehler | SELECT * in Produktionscode vermeiden; immer explizite Spalten nennen. |
| HAVING vs. WHERE | WHERE filtert vor der Aggregation, HAVING danach; WHERE ist in der Regel schneller. |
| Übungsweg | Logicexcel bietet kostenlose SQL-Übungen mit sofortigem Feedback, ohne Anmeldung. |
Inhaltsverzeichnis
- Was ist die SQL SELECT-Anweisung und wie ist sie aufgebaut?
- Wie filterst und sortierst du Ergebnisse mit WHERE, ORDER BY und DISTINCT?
- Wie gruppierst und aggregierst du Daten mit GROUP BY und HAVING?
- Wie fragst du mehrere Tabellen ab? JOIN-Typen im Überblick
- Sechs SELECT-Beispiele von einfach bis kombiniert
- Welche Fehler solltest du bei SELECT unbedingt vermeiden?
- Wie lernst du SELECT schnell und nachhaltig?
- Was aktives Üben mit SQL macht, das Lesen nicht kann
- Kostenlos SELECT üben: Interaktive SQL-Aufgaben auf Logicexcel
- Quellen
- FAQ
Was ist die SQL SELECT-Anweisung und wie ist sie aufgebaut?
Die Grundform ist denkbar schlicht: SELECT nennt die Spalten, FROM die Tabelle. Alles andere sind optionale Klauseln, die du nach Bedarf anhängst.
SELECT spalte1, spalte2
FROM tabelle;
Die Klauselreihenfolge ist fest und muss eingehalten werden:
| Klausel | Aufgabe | Pflicht? |
| SELECT | Spalten auswählen | Ja |
| FROM | Quelltabelle angeben | Ja |
| WHERE | Zeilen filtern | Nein |
| GROUP BY | Zeilen gruppieren | Nein |
| HAVING | Gruppen filtern | Nein |
| ORDER BY | Ergebnis sortieren | Nein |
Alias mit AS
Ein Alias benennt eine Spalte in der Ausgabe um, ohne die Tabelle zu verändern:
SELECT vorname AS "Vorname des Kunden", umsatz AS Gesamtumsatz
FROM kunden;
Aliasing verbessert die Lesbarkeit von Berichten erheblich, ändert aber nichts an der Datenstruktur.
Profi-Tipp: Vermeide SELECT in Produktionscode. Wenn jemand später eine Spalte zur Tabelle hinzufügt oder entfernt, liefert deine Abfrage plötzlich andere Ergebnisse. PostgreSQL selbst bezeichnet SELECT in Produktionscode als schlechten Stil. Nenne lieber explizit die Spalten, die du brauchst.
*
Wie filterst und sortierst du Ergebnisse mit WHERE, ORDER BY und DISTINCT?
Rohdaten ohne Filter sind selten nützlich. Die folgenden Klauseln bringen Ordnung in die Ergebnismenge.
WHERE schränkt ein, welche Zeilen zurückkommen. Du kannst Vergleichsoperatoren (=, <>, <, >, <=, >=) und logische Operatoren kombinieren:SELECT name, umsatz
FROM kunden
WHERE land = 'Deutschland' AND umsatz > 1000;
ORDER BY sortiert das Ergebnis aufsteigend (ASC, Standard) oder absteigend (DESC):
SELECT name, umsatz
FROM kunden
ORDER BY umsatz DESC;
DISTINCT entfernt doppelte Zeilen aus der Ausgabe. SELECT DISTINCT gibt für eine Spalte nur eindeutige Werte zurück, was besonders beim Prüfen von Stammdaten hilft:
SELECT DISTINCT land
FROM kunden
ORDER BY land;
LIMIT und TOP begrenzen die Zeilenzahl. Hier liegt ein klassischer Dialektunterschied: MySQL und PostgreSQL nutzen LIMIT, Microsoft SQL Server verwendet TOP:
-- PostgreSQL / MySQL
SELECT name FROM kunden LIMIT 10;
-- SQL Server (T-SQL)
SELECT TOP 10 name FROM kunden;
LIKE mit Wildcards sucht nach Mustern. Das Prozentzeichen % steht für beliebig viele Zeichen, der Unterstrich _ für genau ein Zeichen:
- WHERE name LIKE 'M%' findet alle Namen, die mit „M“ beginnen
- WHERE plz LIKE '8_1__' passt auf fünfstellige Postleitzahlen mit „8“ an erster und „1“ an dritter Stelle
Wie gruppierst und aggregierst du Daten mit GROUP BY und HAVING?
Aggregatfunktionen fassen mehrere Zeilen zu einem Wert zusammen. Die wichtigsten:
- COUNT(*) zählt alle Zeilen einer Gruppe
- SUM(spalte) summiert numerische Werte
- AVG(spalte) berechnet den Durchschnitt
- MIN(spalte) und MAX(spalte) liefern den kleinsten bzw. größten Wert
SELECT land, COUNT(*) AS anzahl_kunden, SUM(umsatz) AS gesamtumsatz
FROM kunden
GROUP BY land;
Ein häufiger Anfängerfehler: Du listest in SELECT eine Spalte, die weder in GROUP BY steht noch in einer Aggregatfunktion steckt. Die meisten Datenbanken werfen dann einen Fehler.
HAVING filtert Gruppen nach der Aggregation, WHERE filtert Zeilen davor. Das ist kein Stilunterschied, sondern ein logischer:SELECT land, COUNT(*) AS anzahl
FROM kunden
GROUP BY land
HAVING COUNT(*) > 5;
Für GROUP BY-Übungen mit sofortigem Feedback bietet Logicexcel eine eigene Übungsseite, auf der du die Gruppierungslogik direkt im Browser ausprobieren kannst.
*Wie fragst du mehrere Tabellen ab? JOIN-Typen im Überblick
Ein JOIN verknüpft zwei Tabellen anhand einer gemeinsamen Spalte. Die ON-Bedingung legt fest, welche Zeilen zusammenpassen:
SELECT k.name, b.bestelldatum, b.betrag
FROM kunden AS k
INNER JOIN bestellungen AS b ON k.id = b.kunden_id;
Die vier wichtigsten Join-Typen unterscheiden sich darin, welche Zeilen im Ergebnis erscheinen, wenn es keine Übereinstimmung gibt:
| Join-Typ | Ergebnis |
| INNER JOIN | Nur Zeilen, die in beiden Tabellen eine Übereinstimmung haben |
| LEFT JOIN | Alle Zeilen der linken Tabelle, rechts NULL wenn keine Übereinstimmung |
| RIGHT JOIN | Alle Zeilen der rechten Tabelle, links NULL wenn keine Übereinstimmung |
| FULL JOIN | Alle Zeilen beider Tabellen, fehlende Seite jeweils NULL |
SELECT name
FROM kunden
WHERE id IN (SELECT kunden_id FROM bestellungen WHERE betrag > 500);
Joins sind in der Regel effizienter als Subqueries, wenn große Tabellenmengen verknüpft werden. Bei Unsicherheit hilft EXPLAIN (PostgreSQL/MySQL) oder der Ausführungsplan in SQL Server, um zu sehen, was die Datenbank tatsächlich tut.
*Sechs SELECT-Beispiele von einfach bis kombiniert
Für alle Beispiele gilt dieses Mini-Schema:
- kunden: id, name, land, umsatz
- bestellungen: id, kunden_id, bestelldatum, betrag
- produkte: id, bezeichnung, preis, kategorie
SELECT * FROM kunden;
Gibt jede Zeile und jede Spalte der Tabelle kunden zurück. Gut zum ersten Erkunden, nicht für Produktionscode.
Beispiel 2: Bestimmte Spalten auswählenSELECT name, land FROM kunden;
Nur name und land erscheinen in der Ausgabe. Schneller, klarer, wartbarer.
Beispiel 3: Filtern mit WHERESELECT name, umsatz
FROM kunden
WHERE land = 'Deutschland' AND umsatz >= 500;
Nur deutsche Kunden mit einem Umsatz von mindestens 500 kommen zurück.
Beispiel 4: Sortieren mit ORDER BYSELECT name, umsatz
FROM kunden
ORDER BY umsatz DESC
LIMIT 5;
Die fünf umsatzstärksten Kunden, absteigend sortiert.
Beispiel 5: Aggregation mit GROUP BY und HAVINGSELECT land, COUNT(*) AS anzahl, AVG(umsatz) AS durchschnitt
FROM kunden
GROUP BY land
HAVING AVG(umsatz) > 300;
Zeigt pro Land die Kundenanzahl und den Durchschnittsumsatz, aber nur für Länder, in denen der Schnitt über 300 liegt.
Beispiel 6: INNER JOIN über zwei TabellenSELECT k.name, b.bestelldatum, b.betrag
FROM kunden AS k
INNER JOIN bestellungen AS b ON k.id = b.kunden_id
WHERE b.betrag > 200
ORDER BY b.bestelldatum DESC;
Verknüpft Kunden mit ihren Bestellungen, filtert auf Beträge über 200 und sortiert nach Datum. Nur Kunden mit mindestens einer passenden Bestellung erscheinen im Ergebnis.
*Welche Fehler solltest du bei SELECT unbedingt vermeiden?
Anfänger stolpern immer wieder über dieselben Stellen. Hier die häufigsten:
- SELECT * in Produktionscode: Tabellenspalten ändern sich, deine Abfrage bricht oder liefert falsche Ergebnisse. Immer explizite Spalten nennen.
- Nicht aggregierte Spalten in SELECT ohne GROUP BY: Wenn du SUM(umsatz) verwendest, muss jede andere Spalte in SELECT entweder in GROUP BY stehen oder selbst aggregiert sein.
- HAVING statt WHERE vor der Aggregation: WHERE filtert Zeilen, bevor Gruppen gebildet werden. Das ist deutlich schneller, weil weniger Daten aggregiert werden müssen.
- Fehlende ON-Bedingung beim JOIN: Ohne ON entsteht ein kartesisches Produkt, also jede Zeile der ersten Tabelle mit jeder Zeile der zweiten. Bei großen Tabellen bricht das die Datenbank.
- Dialektfehler: LIMIT funktioniert nicht in SQL Server, TOP nicht in PostgreSQL. Wer zwischen Systemen wechselt, muss das im Kopf behalten.
Für Performance gilt: Filtere so früh wie möglich mit WHERE, bevor du aggregierst oder joinst. Indizes auf den Spalten in WHERE und JOIN ON beschleunigen Abfragen erheblich. Bei komplexen Abfragen lohnt sich ein Blick in den Ausführungsplan.
*Wie lernst du SELECT schnell und nachhaltig?
Lesen allein reicht nicht. Wer SQL wirklich versteht, hat es selbst getippt, Fehler gesehen und korrigiert. Ein sinnvoller Lernpfad:
- Schritt 1: SELECT * und SELECT spalte FROM tabelle mit echten Daten ausprobieren
- Schritt 2: WHERE mit verschiedenen Operatoren üben, AND/OR kombinieren
- Schritt 3: ORDER BY und DISTINCT einsetzen, Ergebnisse vergleichen
- Schritt 4: GROUP BY mit COUNT und SUM kombinieren, dann HAVING hinzufügen
- Schritt 5: Einen einfachen INNER JOIN über zwei Tabellen schreiben
- Schritt 6: Eine Subquery als Alternative zum JOIN formulieren
Praktischer Tipp: Leg dir eine kleine Testtabelle mit 10–20 Zeilen an. Kleine Datensätze machen es leicht, Ergebnisse im Kopf nachzuvollziehen. Wenn du später mit größeren Datenbanken arbeitest, hilft EXPLAIN dabei zu verstehen, wie die Datenbank deine Abfrage ausführt.
*Was aktives Üben mit SQL macht, das Lesen nicht kann
Wer SQL nur liest, versteht die Syntax. Wer sie tippt, versteht die Logik. Das klingt nach einer Binsenweisheit, aber der Unterschied ist real: Ein falsch gesetztes HAVING statt WHERE fühlt sich abstrakt an, bis du den Fehler selbst produziert und behoben hast.
Der schnellste mentale Zugang zu WHERE ist oft der Vergleich mit dem Excel-Autofilter. Beide tun dasselbe: Sie blenden Zeilen aus, die eine Bedingung nicht erfüllen. Praktische Tutorials zeigen, dass dieses Mapping zu Excel-Filtern Lernenden oft den schnellsten Zugang verschafft. Wer Excel kennt, hat damit sofort eine Brücke. Wer Excel noch nicht kennt, findet auf Logicexcel auch Excel-Lernanleitungen, die denselben Denkansatz trainieren.
Der Aha-Moment bei GROUP BY kommt fast immer dann, wenn man sieht, dass die Datenbank die Tabelle intern in Gruppen aufteilt, bevor sie rechnet. Das lässt sich nicht lesen. Das muss man sehen.
*
Kostenlos SELECT üben: Interaktive SQL-Aufgaben auf Logicexcel
Wer SELECT wirklich beherrschen will, braucht keine Theorie mehr. Er braucht Aufgaben, die sofort zeigen, ob die Abfrage stimmt.
Logicexcel bietet genau das: kostenlose, interaktive SQL-Übungen direkt im Browser, ohne Anmeldung und ohne Software-Installation. Du schreibst deine Abfrage, siehst das Ergebnis und bekommst eine klare Erklärung, wenn etwas nicht stimmt. Die Übungen starten bei einfachen SELECT-Abfragen und führen schrittweise zu WHERE, GROUP BY und JOIN. Starte jetzt mit der ersten Aufgabe und schreib deine erste korrekte SQL-Abfrage noch heute.
*Quellen
Wer tiefer einsteigen will, findet hier verlässliche Anlaufstellen:
*FAQ
Was macht die SQL SELECT-Anweisung?
SELECT ruft Daten aus einer oder mehreren Tabellen einer relationalen Datenbank ab. Du gibst an, welche Spalten du sehen willst, und FROM nennt die Quelltabelle.Was versteht man unter SELECT DISTINCT?
SELECT DISTINCT gibt nur eindeutige Werte einer Spalte zurück und entfernt Duplikate aus der Ergebnismenge. Nützlich, um zum Beispiel alle vorhandenen Länder in einer Kundentabelle aufzulisten.Welche SQL-Befehle sind für Einsteiger am wichtigsten?
Die wichtigsten Befehle sind SELECT, FROM, WHERE, ORDER BY, GROUP BY, HAVING und JOIN. Wer diese beherrscht, kann die meisten alltäglichen Datenbankabfragen schreiben.
Wie erkläre ich SQL SELECT einfach?
SELECT funktioniert wie ein Autofilter in Excel: Du sagst der Datenbank, welche Spalten und Zeilen du sehen willst, und sie liefert genau das zurück. Die Grundform lautet SELECT spalte FROM tabelle.Wo kann ich SELECT kostenlos üben?
Logicexcel bietet kostenlose SQL-Übungen direkt im Browser, mit sofortigem Feedback und ohne Anmeldung. Der Einstieg gelingt ohne Vorkenntnisse.