Kurz: - SQLite-Dokumentation (sqlite.org) und PostgreSQL-Handbuch (postgresql.org/docs) - Übungsplattformen wie SQLBolt, SQLZoo oder Advent of SQL - Eigene Projekte mit echten Daten (CSV importieren, auswerten)
Teil des Kurses SQL
Aufbau einer Abfrage
SELECT [DISTINCT] spalten / ausdruecke
FROM tabelle [alias]
[JOIN andere ON bedingung]
[WHERE zeilenfilter]
[GROUP BY spalten]
[HAVING gruppenfilter]
[ORDER BY spalte [ASC|DESC]]
[LIMIT n [OFFSET m]];Befehle
| Bereich | Befehle |
|---|---|
| Abfragen | SELECT, WITH |
| Daten | INSERT, UPDATE, DELETE |
| Struktur | CREATE, ALTER, DROP (Tabelle, Index, View, Trigger) |
| Transaktionen | BEGIN, COMMIT, ROLLBACK, SAVEPOINT |
| Rechte | GRANT, REVOKE |
Operatoren
| Typ | Operatoren |
|---|---|
| Vergleich | = <> < <= > >= |
| Logik | AND OR NOT |
| Bereich/Liste | BETWEEN a AND b, IN (...), EXISTS (...) |
| Text | LIKE '%x_', ` |
| NULL | IS NULL, IS NOT NULL, COALESCE, NULLIF |
| Rechnen | + - * / % |
Aggregat- und Fensterfunktionen
| Aggregat | Fenster |
|---|---|
count sum avg min max group_concat | ROW_NUMBER RANK DENSE_RANK LAG LEAD NTILE |
mit GROUP BY / HAVING | mit OVER (PARTITION BY ... ORDER BY ...) |
Joins
| Join | Behält |
|---|---|
INNER JOIN | nur Treffer |
LEFT JOIN | alle links |
RIGHT JOIN | alle rechts |
FULL JOIN | alle beider Seiten |
CROSS JOIN | alle Kombinationen |
Dialekt-Unterschiede
| Aufgabe | SQLite | PostgreSQL | MySQL | SQL Server |
|---|---|---|---|---|
| Begrenzen | LIMIT n | LIMIT n | LIMIT n | TOP n / FETCH |
| Verketten | a || b | a || b | CONCAT(a, b) | a + b / CONCAT |
| Auto-ID | INTEGER PRIMARY KEY | GENERATED ... AS IDENTITY | AUTO_INCREMENT | IDENTITY |
| Aktuelle Zeit | datetime('now') | NOW() | NOW() | GETDATE() |
| Upsert | ON CONFLICT | ON CONFLICT | ON DUPLICATE KEY | MERGE |
| Bool | 0/1 | BOOLEAN | BOOLEAN | BIT |
Häufige Fehler
| Fehler | Ursache |
|---|---|
UPDATE/DELETE ohne WHERE | alle Zeilen betroffen |
= NULL | immer unbekannt; nutze IS NULL |
NOT IN mit NULL | liefert nie Treffer; nutze NOT EXISTS |
Spalte nicht in GROUP BY | Aggregation ohne Gruppierung |
count(*) nach LEFT JOIN | zählt auch leere Seite; nutze count(rechte_spalte) |
WHERE auf Aggregat | stattdessen HAVING |
| Ganzzahldivision | 7/2 = 3, nutze 7/2.0 |
| String-Verkettung mit Nutzereingaben | SQL-Injection; parametrisiere |
Weiterlernen
- SQLite-Dokumentation (sqlite.org) und PostgreSQL-Handbuch (postgresql.org/docs)
- Übungsplattformen wie SQLBolt, SQLZoo oder Advent of SQL
- Eigene Projekte mit echten Daten (CSV importieren, auswerten)
Merke
- Die Reihenfolge der Ausführung ist FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY, LIMIT
- Mit NULL vorsichtig sein:
IS NULL,COALESCE,EXISTS - Joins verbinden Tabellen, CTEs strukturieren Abfragen
- Indizes, Transaktionen und Normalisierung machen Datenbanken schnell und sicher
Quiz zur Selbstkontrolle
Welche Klausel läuft zuerst?
- FROM (richtig)
- SELECT
- ORDER BY
- LIMIT
Wie begrenzt SQL Server die Ergebniszeilen klassisch?
- TOP n (richtig)
- LIMIT n
- ROWNUM
- FIRST n
Wie schützt du dich vor SQL-Injection?
- Parametrisierte Abfragen (richtig)
- Alles kleinschreiben
- Spalten umbenennen
- Tabellen verstecken
Weiter im Kurs
Zurück: Datenbankentwurf und Normalisierung
Alle Kapitel: SQL im Überblick