AP2Lernhub
Essentiell📊 42% Prüfungs-Häufigkeit🎯 ~155 Punkte kumuliert

SELECT-Abfragen

Daten lesen: WHERE, JOINs, Aggregation, Sortierung, Unterabfragen. Nach Pseudocode der zweitgrößte Punktbringer.

Warum Priorität „Essentiell"? Kommt praktisch in jeder Prüfung vor (100%). Hier nichts offen lassen.

Lernziele

  • SELECT-Abfragen mit WHERE, JOIN, GROUP BY, HAVING und ORDER BY schreiben
  • Aggregatfunktionen korrekt anwenden und WHERE vs. HAVING unterscheiden
  • Unterabfragen (korreliert / unkorreliert) lesen und schreiben

1. Grundgerüst

sql
SELECT  spalten / ausdrücke
FROM    tabelle1
JOIN    tabelle2 ON …
WHERE   bedingung
GROUP BY ausdruck
HAVING   aggregat-bedingung
ORDER BY ausdruck [ASC|DESC]
LIMIT    n;

2. Filter mit WHERE

sql
SELECT name, stadt
FROM kunde
WHERE stadt IN ('Berlin', 'Hamburg')
  AND name LIKE 'M%';

Operatoren: = <> < >=, BETWEEN a AND b, IN (…), LIKE 'Muster%', IS NULL.

3. JOINs

JoinEffekt
INNER JOINnur Zeilen mit Treffer auf beiden Seiten
LEFT JOINalle Zeilen der linken Tabelle, rechte ggf. NULL
RIGHT JOINspiegelbildlich
FULL OUTER JOINalle Zeilen beider Seiten, unpassende mit NULL
CROSS JOINkartesisches Produkt
sql
-- Alle Bestellungen mit Kundenname und Summe je Bestellung
SELECT b.id, k.name, SUM(bp.menge * a.preis) AS summe
FROM bestellung b
JOIN kunde k            ON k.id = b.kunde_id
JOIN bestellposition bp ON bp.bestellung_id = b.id
JOIN artikel a          ON a.id = bp.artikel_id
GROUP BY b.id, k.name
ORDER BY summe DESC;

4. Aggregation

FunktionZweck
COUNT(*)alle Zeilen
COUNT(spalte)Zeilen mit nicht-NULL-Wert
SUM / AVGSumme / Durchschnitt (ignorieren NULL)
MIN / MAXkleinster / größter Wert

5. WHERE vs. HAVING

sql
-- Kunden mit mindestens 3 Bestellungen in Berlin
SELECT k.name, COUNT(*) AS anzahl
FROM kunde k
JOIN bestellung b ON b.kunde_id = k.id
WHERE k.stadt = 'Berlin'        -- filtert Zeilen
GROUP BY k.name
HAVING COUNT(*) >= 3;           -- filtert Gruppen

6. Unterabfragen

sql
-- Alle Artikel, die teurer sind als der Durchschnitt
SELECT bezeichnung, preis
FROM artikel
WHERE preis > (SELECT AVG(preis) FROM artikel);
sql
-- Kunden, die noch nie bestellt haben
SELECT name
FROM kunde k
WHERE NOT EXISTS (
  SELECT 1 FROM bestellung b WHERE b.kunde_id = k.id
);

Übungen

SQL-ÜbungLiefere Name und Stadt aller Kunden aus Hamburg, alphabetisch nach Name sortiert.

Tabellen-Schema ansehen
-- Beispielschema für die Übungen
kunde (id, name, stadt)
artikel (id, bezeichnung, preis)
bestellung (id, kunde_id, datum)
bestellposition (id, bestellung_id, artikel_id, menge)
💡 WHERE für die Stadt, ORDER BY für die Sortierung.

SQL-ÜbungLiefere pro Kunde die Anzahl seiner Bestellungen (Spalten: name, anzahl). Kunden ohne Bestellung bitte mit 0 anzeigen.

Tabellen-Schema ansehen
-- Beispielschema für die Übungen
kunde (id, name, stadt)
artikel (id, bezeichnung, preis)
bestellung (id, kunde_id, datum)
bestellposition (id, bestellung_id, artikel_id, menge)
💡 Damit Kunden ohne Bestellung trotzdem auftauchen: LEFT JOIN.

SQL-ÜbungFinde alle Artikel, die teurer sind als der durchschnittliche Artikelpreis.

Tabellen-Schema ansehen
-- Beispielschema für die Übungen
kunde (id, name, stadt)
artikel (id, bezeichnung, preis)
bestellung (id, kunde_id, datum)
bestellposition (id, bestellung_id, artikel_id, menge)
💡 Unterabfrage mit AVG() in der WHERE-Klausel.

Verwandte Themen