SQL Spickzettel
Zuletzt aktualisiert
Daten abfragen (SELECT)
Der Kern von SQL: Zeilen aus einer oder mehreren Tabellen lesen.
| Operation | Syntax |
|---|---|
| Alle Spalten auswählen | SELECT * FROM users; |
| Bestimmte Spalten auswählen | SELECT id, name FROM users; |
| Eine Spalte umbenennen (Alias) | SELECT name AS full_name FROM users; |
| Eindeutige Werte | SELECT DISTINCT country FROM users; |
| Zeilen begrenzen | SELECT * FROM users LIMIT 10; |
| Überspringen, dann begrenzen (Paginierung) | SELECT * FROM users LIMIT 10 OFFSET 20; |
| Zeilen zählen | SELECT COUNT(*) FROM users; |
Zeilen filtern (WHERE)
Eingrenzen, welche Zeilen eine Abfrage zurückgibt.
| Operation | Syntax |
|---|---|
| Gleichheit / Vergleich | WHERE age >= 18 |
| Mehrere Bedingungen | WHERE age >= 18 AND country = 'US' |
| Eine der Bedingungen | WHERE role = 'admin' OR role = 'owner' |
| In einer Menge | WHERE country IN ('US', 'CA', 'MX') |
| Zwischen einem Bereich | WHERE price BETWEEN 10 AND 50 |
| Mustervergleich | WHERE email LIKE '%@gmail.com' |
| Ist / ist nicht null | WHERE deleted_at IS NULL |
| Negieren | WHERE status NOT IN ('archived') |
Sortieren & Gruppieren
| Operation | Syntax |
|---|---|
| Aufsteigend sortieren (Standard) | ORDER BY created_at |
| Absteigend sortieren | ORDER BY created_at DESC |
| Nach mehreren Spalten sortieren | ORDER BY country, name DESC |
| Zeilen gruppieren | SELECT country, COUNT(*) FROM users GROUP BY country; |
| Gruppen filtern | GROUP BY country HAVING COUNT(*) > 100 |
Joins
Zeilen aus zwei Tabellen anhand einer übereinstimmenden Spalte kombinieren.
| Join-Typ | Gibt zurück | Syntax |
|---|---|---|
| INNER JOIN | Nur Zeilen, die in beiden Tabellen übereinstimmen | FROM orders o INNER JOIN users u ON o.user_id = u.id |
| LEFT JOIN | Alle linken Zeilen + Übereinstimmungen (sonst NULLs) | FROM users u LEFT JOIN orders o ON o.user_id = u.id |
| RIGHT JOIN | Alle rechten Zeilen + Übereinstimmungen | FROM orders o RIGHT JOIN users u ON o.user_id = u.id |
| FULL OUTER JOIN | Alle Zeilen von beiden Seiten | FROM a FULL OUTER JOIN b ON a.id = b.a_id |
| CROSS JOIN | Jede Kombination (kartesisch) | FROM sizes CROSS JOIN colors |
| Self Join | Eine Tabelle, die mit sich selbst verknüpft wird | FROM employees e JOIN employees m ON e.manager_id = m.id |
Aggregatfunktionen
Einen einzelnen Wert über eine Gruppe von Zeilen berechnen.
| Funktion | Was sie tut |
|---|---|
COUNT(*) | Anzahl der Zeilen |
COUNT(col) | Anzahl der Nicht-Null-Werte |
SUM(col) | Summe einer numerischen Spalte |
AVG(col) | Durchschnittswert |
MIN(col) / MAX(col) | Kleinster / größter Wert |
STRING_AGG(col, ',') | Werte verketten (Postgres; GROUP_CONCAT in MySQL) |
Window-Funktionen
Über eine Menge von Zeilen berechnen, ohne sie zu einer einzigen zusammenzufassen.
| Funktion | Syntax |
|---|---|
| Zeilennummer | ROW_NUMBER() OVER (ORDER BY score DESC) |
| Rang (mit Lücken) | RANK() OVER (PARTITION BY country ORDER BY score DESC) |
| Dichter Rang | DENSE_RANK() OVER (ORDER BY score DESC) |
| Laufende Summe | SUM(amount) OVER (ORDER BY created_at) |
| Vorherige / nächste Zeile | LAG(score) OVER (ORDER BY date), LEAD(score) OVER (...) |
Daten ändern (INSERT, UPDATE, DELETE)
| Operation | Syntax |
|---|---|
| Eine Zeile einfügen | INSERT INTO users (name, email) VALUES ('Ada', 'ada@x.com'); |
| Mehrere Zeilen einfügen | INSERT INTO users (name) VALUES ('Ada'), ('Alan'); |
| Zeilen aktualisieren | UPDATE users SET active = true WHERE id = 1; |
| Zeilen löschen | DELETE FROM users WHERE active = false; |
| Upsert (Postgres/SQLite) | INSERT ... ON CONFLICT (email) DO UPDATE SET name = EXCLUDED.name; |
Tabellen definieren (DDL)
| Operation | Syntax |
|---|---|
| Eine Tabelle erstellen | CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL); |
| Eine Spalte hinzufügen | ALTER TABLE users ADD COLUMN age INTEGER; |
| Eine Spalte entfernen | ALTER TABLE users DROP COLUMN age; |
| Eine Tabelle löschen | DROP TABLE users; |
| Einen Index erstellen | CREATE INDEX idx_users_email ON users (email); |
| Fremdschlüssel | FOREIGN KEY (user_id) REFERENCES users (id) |
Jede SQL-Anweisung, Klausel und jeder Join, den du brauchst, auf einer Seite. Dieser SQL-Spickzettel ist eine Schnellreferenz zum Abfragen und Ändern relationaler Daten - die SELECT-Klauseln, die vier JOIN-Typen, Aggregation sowie das DDL und DML, mit dem du Tabellen erstellst und aktualisierst.
Die hier gezeigte Syntax ist Standard-ANSI-SQL und funktioniert in PostgreSQL, MySQL, SQLite und SQL Server, sofern nicht anders angegeben. Kopiere, was du brauchst, oder probiere jede Abfrage live im SQL-Playground aus - keine Datenbank zu installieren.
SQL-Spickzettel-FAQ
Ist dieser SQL-Spickzettel kostenlos?
Funktioniert das für MySQL, PostgreSQL und SQLite?
SELECT-, WHERE-, JOIN-, GROUP BY- und DDL-Syntax ist Standard-ANSI-SQL und läuft in MySQL, PostgreSQL, SQLite und SQL Server gleich. Einige fortgeschrittene Features unterscheiden sich je nach Dialekt - Upserts und String-Aggregation sind die häufigsten - und diese Zeilen weisen auf den Unterschied hin.Was ist der Unterschied zwischen INNER JOIN und LEFT JOIN?
INNER JOIN gibt nur die Zeilen zurück, die eine Übereinstimmung in beiden Tabellen haben. Ein LEFT JOIN gibt jede Zeile aus der linken (ersten) Tabelle zurück und füllt NULL für Spalten aus der rechten Tabelle ein, wenn es keine Übereinstimmung gibt - nützlich, wenn du alle Nutzer haben möchtest, auch wenn einige keine Bestellungen haben.Kann ich diese SQL-Befehle online üben?
SELECT über Joins bis zu Window-Funktionen.