Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
SQL-Spickzettel
Dieser Spickzettel fasst die wichtigsten SQL-Grundbefehle und deren Reihenfolge zusammen. Er eignet sich ideal zur Prüfungsvorbereitung (AP1 / AP2) und als tägliche Referenz.
Grundstruktur
Die Standard-Struktur einer SQL-Abfrage folgt immer derselben Reihenfolge:
```sql SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT …; ```
Merke: Wenn du die Struktur immer vollständig aufschreibst, kannst du danach Schritt für Schritt alles ergänzen und Unnötiges streichen.
—
SchlĂĽsselbefehle im Ăśberblick
| SchlĂĽsselwort | Bedeutung | Beispiel |
|---|---|---|
| SELECT | Welche Spalten angezeigt werden | SELECT name, preis |
| FROM | Aus welcher Tabelle die Daten kommen | FROM produkte |
| WHERE | Filtert Zeilen vor der Gruppierung | WHERE lagerbestand > 100 |
| GROUP BY | Gruppiert gleiche Werte | GROUP BY kategorie |
| HAVING | Filtert nach der Gruppierung | HAVING AVG(preis) > 50 |
| ORDER BY | Sortiert die Ausgabe | ORDER BY preis DESC |
| LIMIT | Begrenzt die Zeilenanzahl | LIMIT 10 |
—
Beispiel 1 – Einfache Abfrage
Aufgabe: > Namen und Preise aller Produkte mit Lagerbestand > 100, nach Preis absteigend sortiert, max. 10 Einträge.
```sql SELECT name, preis FROM produkte WHERE lagerbestand > 100 ORDER BY preis DESC LIMIT 10; ```
Erklärung:
- `WHERE` filtert nur Zeilen mit Lagerbestand ĂĽber 100.
- `ORDER BY preis DESC` sortiert die Ausgabe absteigend.
- `LIMIT 10` zeigt nur die ersten 10 Ergebnisse an.
—
Beispiel 2 – Gruppierte Auswertung
Aufgabe:
Pro Kategorie den Durchschnittspreis fĂĽr Produkte mit Lagerbestand > 100 berechnen.
Nur Kategorien mit einem Durchschnittspreis > 50 anzeigen, absteigend sortiert, max. 10 Ergebnisse.
```sql SELECT kategorie, AVG(preis) AS durchschnittspreis FROM produkte WHERE lagerbestand > 100 GROUP BY kategorie HAVING AVG(preis) > 50 ORDER BY durchschnittspreis DESC LIMIT 10; ```
Erklärung:
* `AVG(preis)` berechnet den Durchschnittspreis je Kategorie. * `GROUP BY kategorie` fasst Produkte derselben Kategorie zusammen. * `HAVING` filtert nur Gruppen mit Durchschnitt > 50. * Das Alias `durchschnittspreis` kann in `ORDER BY` wiederverwendet werden.
—
Unterschied: WHERE vs. HAVING
| Vergleichspunkt | WHERE | HAVING |
|---|---|---|
| Zeitpunkt | Vor der Gruppierung | Nach der Gruppierung |
| Filtert | Einzelne Datensätze | Gruppenergebnisse |
| Beispiel | WHERE preis > 50 | HAVING AVG(preis) > 50 |
Merksatz:
„WHERE prüft Datensätze, HAVING prüft Gruppen.“
—
Wichtige Aggregatfunktionen
| Funktion | Beschreibung | Beispiel |
|---|---|---|
| COUNT() | Zählt Datensätze | COUNT(*) |
| SUM() | Summiert Werte | SUM(preis) |
| AVG() | Durchschnitt | AVG(preis) |
| MIN() | Kleinster Wert | MIN(preis) |
| MAX() | Größter Wert | MAX(preis) |
Hinweis: Aggregatfunktionen kannst du nur in Verbindung mit `GROUP BY` oder zur Gesamtauswertung nutzen.
—
Sortierung
```sql ORDER BY spalte [ASC|DESC] ```
| Parameter | Bedeutung |
|---|---|
| ASC | Aufsteigend (Standard) |
| DESC | Absteigend |
Beispiel:
```sql ORDER BY preis DESC, name ASC; ```
→ Sortiert zuerst nach Preis (absteigend), dann nach Name (aufsteigend).
—
LIMIT & OFFSET
| Befehl | Bedeutung |
| ———- | ———————————— |
| `LIMIT n` | Zeigt nur n Zeilen an |
| `OFFSET n` | Ăśberspringt n Zeilen vor der Ausgabe |
Beispiel:
```sql SELECT * FROM produkte ORDER BY preis DESC LIMIT 10 OFFSET 20; ```
→ Zeigt die Zeilen 21–30 der Sortierung.
—
Aliasnamen
Mit `AS` kannst du Spalten- oder Tabellennamen umbenennen:
```sql SELECT name AS produktname, preis AS einzelpreis FROM produkte AS p; ```
Aliases erleichtern lesbare Ergebnisse und sind in `ORDER BY` wiederverwendbar.
—
Joins (Ăśberblick)
| Join-Typ | Beschreibung | Beispiel |
| ————– | ————————————————- | ————————————————————————————- |
| INNER JOIN | Nur passende Datensätze beider Tabellen | `SELECT * FROM kunden INNER JOIN bestellungen ON kunden.id = bestellungen.kunden_id;` |
| LEFT JOIN | Alle Datensätze links + passende rechts | `SELECT * FROM kunden LEFT JOIN bestellungen ON kunden.id = bestellungen.kunden_id;` |
| RIGHT JOIN | Alle Datensätze rechts + passende links | `SELECT * FROM kunden RIGHT JOIN bestellungen ON kunden.id = bestellungen.kunden_id;` |
| FULL JOIN | Alle Datensätze beider Seiten (falls unterstützt) | `SELECT * FROM kunden FULL JOIN bestellungen ON …;` |
Merksatz:
„INNER = nur Treffer, LEFT = alles links + Treffer, RIGHT = alles rechts + Treffer.“
—
NĂĽtzliche PrĂĽfungsbefehle
```sql – Zeilen zählen SELECT COUNT(*) FROM produkte;
– Alle Kategorien ohne Wiederholung SELECT DISTINCT kategorie FROM produkte;
– Höchster Preis pro Kategorie SELECT kategorie, MAX(preis) FROM produkte GROUP BY kategorie;
– Preisaktualisierung UPDATE produkte SET preis = preis * 1.1 WHERE kategorie = 'Hardware';
– Neue Zeile einfügen INSERT INTO produkte (name, preis, lagerbestand) VALUES ('Monitor', 199, 50);
– Datensatz löschen DELETE FROM produkte WHERE name = 'Altgerät'; ```
—
Mini-Merksätze
* „SELECT zeigt, FROM liefert, WHERE filtert.“ * „GROUP BY fasst, HAVING prüft, ORDER BY sortiert.“ * „COUNT zählt, AVG mittelt, SUM addiert.“ * „Ohne WHERE = alles.“ * „Immer mit Semikolon abschließen.“
—
PrĂĽfungstipp
*SQL in Ruhe logisch lesen:*
1. FROM – welche Tabelle(n)? 2. WHERE – welche Bedingungen? 3. GROUP BY – wie gruppieren? 4. HAVING – was bleibt übrig? 5. ORDER BY – wie sortieren? 6. LIMIT – wie viele Zeilen?
—
Stand: date Quelle: Eigene Zusammenfassung nach Lernunterlagen / SQL.pdf
```