Nachhilfe-Vermittlung.comWir helfen helfen.Nachhilfe finden

SQL einfach erklärt: SELECT, WHERE, JOIN

Lernvideo · 7:48 Minuten · Informatik, Ausbildung in IT-Berufen

Fünf Kunden, sechs Bestellungen, zwei Tabellen: Im Pizzadienst will die Chefin wissen, wer in Köln wohnt, wer aus Köln für mehr als 20 Euro bestellt hat und wer noch nie bestellt hat. Mit SELECT, WHERE und JOIN beantwortest du alle drei Fragen: 3 Kunden aus Köln, 2 Bestellungen über 20 Euro, und Emil hat noch nie bestellt. Dazu lernst du Primär- und Fremdschlüssel, das Kreuzprodukt ohne Verknüpfung, AND vor OR, LEFT JOIN und IS NULL. SQL gehört zu den Themen von Teil 2 der IHK-Abschlussprüfung in den IT-Berufen.

Auf YouTube ansehenNachhilfe in Informatik finden

Die Regeln im Video gelten in fast jeder relationalen Datenbank. Einzelheiten der Schreibweise können je nach System abweichen: In PostgreSQL und SQL Server ist zum Beispiel ein JOIN ohne ON ein Syntaxfehler. Alle Abfragen auf dieser Seite wurden mit den Beispieldaten tatsächlich ausgeführt.

Jetzt selbst üben

Auf der Übungsseite schreibst du die Abfragen selbst und siehst sofort, ob sie stimmen. Dazu gibt es ein Übungsblatt als PDF.

Interaktiv üben Übungsblatt als PDF

Kapitel

Spickzettel

  1. SELECT und FROM: SELECT wählt die Spalten, FROM nennt die Tabelle.
  2. WHERE: filtert Zeilen. Logisch kommt zuerst FROM (mit JOIN und ON), dann WHERE, danach SELECT.
  3. Text: steht in einfachen Anführungszeichen, zum Beispiel 'Köln'. Zahlen stehen ohne.
  4. JOIN + ON: ON legt fest, was zusammengehört. Ohne Bedingung entsteht jede Kombination (Kreuzprodukt): 5 · 6 = 30 Zeilen.
  5. AND vor OR: AND bindet stärker als OR. Klammern setzen.
  6. Fehlende Werte: mit IS NULL prüfen, nie mit = NULL. Ein LEFT JOIN behält alle Zeilen der linken Tabelle und füllt fehlende Partner mit NULL.

Beispiele aus dem Pizzadienst. Die Regeln gelten in fast jeder relationalen Datenbank.

Die Beispieldaten

Tabelle Kunde

KundeNrNameOrt
1AdaKöln
2BenBonn
3CemKöln
4DanaEssen
5EmilKöln

Tabelle Bestellung

BestellNrKundeNrBetrag
101118,50 €
102332,00 €
103124,00 €
104212,90 €
105441,00 €
10639,50 €

Bestellung.KundeNr zeigt auf Kunde.KundeNr: KundeNr ist in Kunde der Primärschlüssel und in Bestellung der Fremdschlüssel. Die Namen sind erfunden.

Typische Fallen

Falle 1: Text ohne Anführungszeichen. WHERE Ort = Köln liest die Datenbank als Spaltennamen und meldet einen Fehler. Richtig: 'Köln'.

Falle 2: AND und OR ohne Klammern. AND bindet stärker. Ort = 'Köln' OR Ort = 'Bonn' AND Betrag > 20 liefert im Beispiel 4 statt 2 Zeilen.

Falle 3: Keine Verknüpfungsbedingung. Komma ohne WHERE oder CROSS JOIN ergibt jede Kombination: 5 · 6 = 30 Zeilen. In PostgreSQL und SQL Server ist ein JOIN ohne ON sogar ein Syntaxfehler.

Falle 4: = NULL statt IS NULL. Der Vergleich ergibt unbekannt, es kommt keine Zeile zurück.

Falle 5: Mehrdeutige Spalte. KundeNr steht in beiden Tabellen. Ohne Kurznamen davor, also k.KundeNr oder b.KundeNr, weiß die Datenbank nicht, welche gemeint ist.

Falle 6: INNER JOIN statt LEFT JOIN. Wer auch Zeilen ohne Partner braucht, etwa Kunden ohne Bestellung, verliert sie beim INNER JOIN.

Die Abfragen aus dem Video mit Ergebnissen

Alle Abfragen wurden mit den Beispieldaten oben tatsächlich ausgeführt. Die Ergebniszeilen sind hier der Übersicht halber sortiert.

1. Spalten wählen

SELECT Name, Ort
FROM Kunde

Ergebnis: 5 Zeilen. Alle Kunden, aber nur die Spalten Name und Ort.

NameOrt
AdaKöln
BenBonn
CemKöln
DanaEssen
EmilKöln

2. Zeilen filtern: Wer wohnt in Köln?

SELECT Name
FROM Kunde
WHERE Ort = 'Köln'

Ergebnis: 3 Zeilen. Ada, Cem und Emil. Köln steht in einfachen Anführungszeichen.

Name
Ada
Cem
Emil

3. Tabellen verbinden: INNER JOIN

SELECT k.Name, b.Betrag
FROM Kunde k INNER JOIN Bestellung b
  ON k.KundeNr = b.KundeNr

Ergebnis: 6 Zeilen. Ada und Cem haben je 2 Bestellungen, Ben und Dana je 1. Emil fehlt, denn er hat nie bestellt.

NameBetrag
Ada18,50 €
Cem32,00 €
Ada24,00 €
Ben12,90 €
Dana41,00 €
Cem9,50 €

4. Falle: ohne Bedingung (Kreuzprodukt)

SELECT k.Name, b.Betrag
FROM Kunde k, Bestellung b

Ergebnis: 30 Zeilen. Das sind 5 Kunden mal 6 Bestellungen, jede Kombination. Gezeigt sind die ersten 6 Zeilen, alle mit Ada. Dasselbe liefert FROM Kunde CROSS JOIN Bestellung.

NameBetrag
Ada18,50 €
Ada32,00 €
Ada24,00 €
Ada12,90 €
Ada41,00 €
Ada9,50 €
… 24 weitere Zeilen

5. Alles zusammen: Wer aus Köln hat für mehr als 20 Euro bestellt?

SELECT k.Name, b.Betrag
FROM Kunde k JOIN Bestellung b
  ON k.KundeNr = b.KundeNr
WHERE k.Ort = 'Köln' AND b.Betrag > 20

Ergebnis: 2 Zeilen. Cem mit 32,00 € und Ada mit 24,00 €.

NameBetrag
Cem32,00 €
Ada24,00 €

6. Falle: AND vor OR (ohne Klammern)

SELECT k.Name, b.Betrag
FROM Kunde k JOIN Bestellung b
  ON k.KundeNr = b.KundeNr
WHERE k.Ort = 'Köln' OR k.Ort = 'Bonn' AND b.Betrag > 20

Ergebnis: 4 Zeilen. AND bindet stärker als OR. Die Datenbank liest: Köln mit jedem Betrag, oder Bonn mit Betrag über 20. Deshalb stehen auch 18,50 € und 9,50 € in der Liste.

NameBetrag
Ada18,50 €
Cem32,00 €
Ada24,00 €
Cem9,50 €

7. Mit Klammern

SELECT k.Name, b.Betrag
FROM Kunde k JOIN Bestellung b
  ON k.KundeNr = b.KundeNr
WHERE (k.Ort = 'Köln' OR k.Ort = 'Bonn') AND b.Betrag > 20

Ergebnis: 2 Zeilen. Wieder Cem mit 32,00 € und Ada mit 24,00 €.

NameBetrag
Cem32,00 €
Ada24,00 €

8. Alle Kunden behalten: LEFT JOIN

SELECT k.Name, b.BestellNr
FROM Kunde k LEFT JOIN Bestellung b
  ON k.KundeNr = b.KundeNr

Ergebnis: 7 Zeilen. Alle Kunden bleiben erhalten. Emil hat keine Bestellung, deshalb steht bei BestellNr der Wert NULL.

NameBestellNr
Ada101
Ada103
Ben104
Cem102
Cem106
Dana105
… 1 weitere Zeilen

9. Wer hat noch nie bestellt? LEFT JOIN und IS NULL

SELECT k.Name
FROM Kunde k LEFT JOIN Bestellung b
  ON k.KundeNr = b.KundeNr
WHERE b.BestellNr IS NULL

Ergebnis: 1 Zeile. Nur Emil: Er hat noch nie bestellt.

Name
Emil

10. Falle: = NULL statt IS NULL

SELECT k.Name
FROM Kunde k LEFT JOIN Bestellung b
  ON k.KundeNr = b.KundeNr
WHERE b.BestellNr = NULL

Ergebnis: 0 Zeilen. Der Vergleich mit = NULL ergibt nie wahr, sondern unbekannt. Emil ist da, wird aber nicht gefunden.

Name
keine Zeile

Häufige Fragen

Kommt SQL in der IHK-Abschlussprüfung der IT-Berufe vor?

SQL gehört zu den Themen von Teil 2 der IHK-Abschlussprüfung in den IT-Berufen. Laut den Prüfungskatalogen für die IT-Berufe (2. Auflage, gilt ab 2025) wird SQL ausschließlich in Teil 2 der Abschlussprüfung thematisiert. Welche Aufgaben genau drankommen, legt die IHK fest. Das Video ist Lernstoff und keine Prüfungsprognose.

Was machen SELECT, FROM und WHERE?

SELECT nennt die Spalten, die du sehen willst, FROM die Tabelle, WHERE filtert die Zeilen. Beispiel: SELECT Name FROM Kunde WHERE Ort = 'Köln' liefert Ada, Cem und Emil. Logisch arbeitet die Datenbank in dieser Reihenfolge: zuerst FROM (mit JOIN und ON), dann WHERE, danach SELECT.

Warum steht Text in einfachen Anführungszeichen?

In SQL stehen Text-Konstanten in einfachen Anführungszeichen, zum Beispiel 'Köln'. Doppelte Anführungszeichen bezeichnen Namen, etwa von Spalten. Ohne Anführungszeichen liest die Datenbank Köln als Spaltennamen und meldet einen Fehler. Zahlen stehen ohne Anführungszeichen: b.Betrag > 20.

Was sind Primärschlüssel und Fremdschlüssel?

Ein Primärschlüssel ist eine eindeutige Kennung je Zeile: Jede KundeNr gibt es in der Tabelle Kunde nur einmal. Ein Fremdschlüssel ist eine Spalte, deren Werte auf Zeilen einer anderen Tabelle verweisen: Bestellung.KundeNr zeigt auf Kunde.KundeNr. Über diese beiden Spalten verbindet der JOIN die Tabellen. Steht ein Spaltenname in beiden Tabellen, schreibst du den Kurznamen davor, zum Beispiel k.KundeNr.

Was passiert bei einem JOIN ohne Bedingung?

Fehlt die Bedingung, die sagt, welche Zeilen zusammengehören, entsteht das Kreuzprodukt: Die Datenbank kombiniert jede Zeile der einen Tabelle mit jeder der anderen. Bei 5 Kunden und 6 Bestellungen sind das 5 · 6 = 30 Zeilen, und Ada steht plötzlich neben Bestellungen von Ben und Dana. Das passiert, wenn du zwei Tabellen mit Komma hinter FROM ohne Bedingung in WHERE aufschreibst, und bei CROSS JOIN. Ein JOIN ohne ON ist in PostgreSQL und SQL Server sogar ein Syntaxfehler. Die Bedingung hinter ON, zum Beispiel ON k.KundeNr = b.KundeNr, legt fest, was zusammengehört.

Was ist der Unterschied zwischen INNER JOIN und LEFT JOIN?

Ein INNER JOIN liefert nur Zeilenpaare, die die Bedingung erfüllen. Zeilen ohne Partner fallen weg. Ein LEFT JOIN behält alle Zeilen der linken Tabelle. Fehlt der Partner, steht in den Spalten der rechten Tabelle NULL. Im Beispiel liefert der INNER JOIN 6 Zeilen ohne Emil, der LEFT JOIN 7 Zeilen mit Emil und NULL bei der Bestellnummer.

Was bedeutet NULL, und warum findet WHERE x = NULL nichts?

NULL steht für einen fehlenden oder unbekannten Wert, nicht für die Zahl 0. Ein Vergleich mit = NULL ergibt nicht wahr, sondern unbekannt, und WHERE lässt nur wahre Bedingungen durch. Deshalb liefert WHERE b.BestellNr = NULL im Beispiel 0 Zeilen. Fehlende Werte prüfst du mit IS NULL oder IS NOT NULL. Mit LEFT JOIN und WHERE b.BestellNr IS NULL findest du Emil, der noch nie bestellt hat.

Warum liefert Ort = Köln OR Ort = Bonn AND Betrag > 20 zu viele Zeilen?

Weil AND stärker bindet als OR, ähnlich wie Punkt vor Strich. Die Datenbank liest die Bedingung als: Köln mit jedem Betrag, oder Bonn mit Betrag über 20. Im Beispiel kommen deshalb auch Ada mit 18,50 € und Cem mit 9,50 € vor: 4 Zeilen statt 2. Mit Klammern, (k.Ort = 'Köln' OR k.Ort = 'Bonn') AND b.Betrag > 20, bleiben Cem mit 32,00 € und Ada mit 24,00 €.

Hilfe bei SQL und Datenbanken?

Wir vermitteln Nachhilfe in Informatik, vor Ort oder online.

Finde Nachhilfe für Informatik

Lernvideo mit erfundenen Beispieldaten. Stimme, Musik und Bilder sind KI-erzeugt. Idee, Konzept und Redaktion: Menschlich.

Abschrift des Videos

Fünf Kunden, sechs Aufträge, zwei Tabellen. Und die Chefin fragt: Wer hat noch nie bestellt?

Freitagnachmittag im Pizzadienst. In der Datenbank stehen fünf Kunden und sechs Bestellungen, verteilt auf zwei Tabellen. Die Chefin will drei Dinge wissen: Wer wohnt in Köln? Wer aus Köln hat für mehr als zwanzig Euro bestellt? Und wer hat noch nie bestellt?

Und jetzt? Alles von Hand abtippen? Lieber nicht. Dafür gibt es SQL, die Sprache, mit der man relationale Datenbanken abfragt. SQL gehört zu den Themen von Teil zwei der IHK-Abschlussprüfung in den IT-Berufen. Solche Abfragen zu üben, lohnt sich also.

Wir brauchen dafür drei Wörter: SELECT, WHERE und JOIN. Die Ergebnistabelle füllt sich dabei Schritt für Schritt.

Fangen wir mit der Tabelle Kunde an. Sie hat drei Spalten: Kundennummer, Name und Ort. Welche Spalten willst du sehen, und aus welcher Tabelle? Genau diese zwei Fragen beantwortet die einfachste Abfrage.

SELECT Name, Ort FROM Kunde. Nach SELECT stehen die Spalten, durch Kommas getrennt. Nach FROM steht die Tabelle. Ergebnis: alle fünf Kunden, aber nur mit Name und Ort.

Mit SELECT Sternchen bekommst du alle Spalten. Sehr bequem. Ungefähr so bequem, wie den ganzen Kühlschrank auszuräumen, weil man die Milch sucht. Ist nach Name und Ort gefragt, schreibst du auch nur Name und Ort.

Jetzt die erste Frage der Chefin: Wer wohnt in Köln? Dafür filterst du Zeilen, nicht Spalten. Das macht WHERE.

SELECT Name FROM Kunde WHERE Ort gleich Köln. Die Datenbank prüft jede Zeile: Ada, ja. Ben, nein. Cem, ja. Dana, nein. Emil, ja. Drei Treffer.

Wichtig: Köln steht in einfachen Anführungszeichen. Ohne sie hält die Datenbank Köln für den Namen einer Spalte und meldet einen Fehler. Text kommt in einfache Anführungszeichen, Zahlen nicht. Neben gleich gibt es auch größer, kleiner und ungleich.

Zweite Frage: Wer aus Köln hat für mehr als zwanzig Euro bestellt? Schau in die Tabelle Bestellung: Bestellnummer, Kundennummer, Betrag. Da steht kein Name und kein Ort. Wie findet Ada also zu ihrer Bestellung?

Über die Kundennummer. In der Tabelle Kunde ist sie der Primärschlüssel: Jede Nummer gibt es nur einmal, und sie ist immer ausgefüllt. In der Tabelle Bestellung ist sie ein Fremdschlüssel: Sie zeigt auf den Kunden, der bestellt hat. Bestellung hundertdrei gehört zu Kunde eins, also zu Ada.

Genau diese Verbindung baut JOIN. FROM Kunde k JOIN Bestellung b ON k Punkt KundeNr gleich b Punkt KundeNr. k und b sind Kurznamen für die Tabellen. Hinter ON steht die Bedingung: Welche Zeilen gehören zusammen?

Die Datenbank legt jetzt jede Bestellung neben den passenden Kunden. Ada hat zwei Bestellungen, Cem auch zwei, Ben und Dana je eine. Sechs Zeilen. Und Emil? Fehlt. Er hat nie bestellt, und ein INNER JOIN zeigt nur Paare, die zusammenpassen.

Und was passiert ohne Verknüpfung? Schreibst du die beiden Tabellen nur mit Komma hintereinander, ohne Bedingung, oder als CROSS JOIN, kombiniert die Datenbank jede Zeile mit jeder: fünf Kunden mal sechs Bestellungen, dreißig Zeilen. Ada hat dann plötzlich auch Bens und Danas Bestellungen. Die Chefin ist bestimmt begeistert. Das nennt man Kreuzprodukt. Die Bedingung hinter ON legt fest, was wirklich zusammengehört.

Noch ein Detail: KundeNr steht in beiden Tabellen. Deshalb schreibst du k Punkt oder b Punkt davor. Sonst weiß die Datenbank nicht, welche Spalte gemeint ist.

Jetzt alles zusammen. Wer aus Köln hat für mehr als zwanzig Euro bestellt? Erst verbinden, dann filtern: der JOIN mit ON, danach WHERE k Punkt Ort gleich Köln AND b Punkt Betrag größer zwanzig.

Die Datenbank arbeitet dabei nicht einfach von oben nach unten. Logisch kommt zuerst FROM mit dem JOIN, dann WHERE, und erst danach SELECT. Übrig bleiben zwei Zeilen: Cem mit zweiunddreißig Euro und Ada mit vierundzwanzig Euro.

Und wenn die Chefin sagt: Köln oder Bonn, über zwanzig Euro? Du schreibst: Ort gleich Köln OR Ort gleich Bonn AND Betrag größer zwanzig, ohne Klammern. Plötzlich stehen auch Ada mit achtzehn Euro fünfzig und Cem mit neun Euro fünfzig in der Liste. Warum?

Weil AND stärker bindet als OR, ähnlich wie Punkt vor Strich. Die Datenbank liest: Köln mit jedem Betrag, oder Bonn über zwanzig Euro. Setz Klammern um Köln oder Bonn, dann stimmt es wieder: Cem und Ada.

Dritte Frage: Wer hat noch nie bestellt? Mit dem INNER JOIN geht das nicht, denn Emil fällt dort ja gerade raus. Wie holst du ihn zurück?

Mit LEFT JOIN. Er behält alle Zeilen der linken Tabelle, hier also alle Kunden. Wo keine Bestellung passt, stehen im Ergebnis in den Spalten der rechten Tabelle NULL-Werte. NULL steht für einen fehlenden oder unbekannten Wert, nicht für null Euro.

Jetzt nur noch filtern: WHERE b Punkt BestellNr IS NULL. Die Bestellnummer ist bei einer echten Bestellung nie NULL, deshalb passt nur Emil. Aber Achtung: Ein Vergleich mit gleich NULL ergibt nicht wahr, sondern unbekannt. WHERE lässt nur wahre Bedingungen durch, also bekommst du gar keine Zeile. Fehlende Werte prüfst du mit IS NULL.

Was musst du dir für die Prüfung merken? SELECT wählt Spalten, FROM die Tabelle, WHERE filtert Zeilen. Text kommt in einfache Anführungszeichen. Beim JOIN legt ON fest, was zusammengehört; Komma oder CROSS JOIN ohne Bedingung liefern jede Kombination. AND bindet stärker als OR, also Klammern setzen. Und fehlende Werte prüfst du mit IS NULL, nie mit gleich.

Die Chefin hat ihre drei Antworten: Drei Kunden wohnen in Köln, zwei Bestellungen von Kunden aus Köln liegen über zwanzig Euro, und Emil hat noch nie bestellt. Er bekommt einen Gutschein. Mit SELECT, WHERE und JOIN beantwortest du solche Fragen in fast jeder relationalen Datenbank. Auf unserer Übungsseite schreibst du die Abfragen selbst und siehst sofort, ob sie stimmen.

Wenn du in Informatik Unterstützung möchtest: Wir finden dir Nachhilfe, vor Ort oder online.

Spalten wählen, Reihen filtern, über die Nummer verbinden. Wer nie bestellt hat, hat leere Felder: ihn findest du mit links!

Quellen (Stand November 2026)