SQL-Snippets
Alle Snippets für SQL — copy-&-paste-fertig, erklärt und aus der Praxis.
Mit Datum und Zeit rechnen in SQLite – strftime und date()
SQLite hat keinen echten Datumstyp – Zeitangaben sind Text oder Zahlen. Mit den eingebauten Funktionen date(), datetime() und strftime() gruppierst du trotzdem nach Monat, rechnest Tage dazu und formatierst sauber. Ich zeige die Muster, die ich ständig brauche.
Fremdschlüssel und ON DELETE CASCADE in SQLite
Ein Fremdschlüssel sorgt dafür, dass keine verwaisten Zeilen entstehen – und mit ON DELETE CASCADE räumt die Datenbank abhängige Daten automatisch mit auf. Wichtig bei SQLite: Du musst die Prüfung pro Verbindung erst einschalten.
CASE WHEN in SQL – Bedingungen direkt in der Abfrage
Mit CASE WHEN baust du Wenn-Dann-Logik direkt in SQL: abgeleitete Spalten, Kategorien aus Zahlen und der Trick, mit dem du in einer Abfrage nach mehreren Kriterien gleichzeitig zählst (bedingte Aggregation).
Lesbare SQL-Abfragen mit CTEs – die WITH-Klausel
Verschachtelte Unterabfragen werden schnell unleserlich. Mit einer Common Table Expression (WITH … AS) gibst du einer Zwischenabfrage einen Namen und liest sie von oben nach unten wie einen kleinen Rechenweg. Ich zeige ein Beispiel mit Zwischenschritt.
SQL-JOINs verständlich – INNER JOIN vs. LEFT JOIN
Zwei Tabellen zusammenführen ist Alltag – und die häufigste Fehlerquelle ist der falsche JOIN-Typ. Ich erkläre dir INNER JOIN und LEFT JOIN an einem konkreten Beispiel und warum ein LEFT JOIN dir Zeilen „verstecken" kann, wenn du im WHERE nicht aufpasst.
Auswerten mit GROUP BY, COUNT und HAVING – Daten gruppieren und filtern
Wie viele Einträge pro Kategorie? Welche Kunden haben mehr als drei Bestellungen? Genau dafür sind GROUP BY und HAVING da. Ich zeige dir an einem kleinen Beispiel, wie du aus rohen Zeilen eine echte Auswertung machst.
Warum ist die Abfrage langsam? EXPLAIN QUERY PLAN und der richtige Index
Wenn eine SQL-Abfrage kriecht, liegt es fast immer an einem fehlenden Index – die Datenbank liest dann die ganze Tabelle durch. Mit EXPLAIN QUERY PLAN siehst du das schwarz auf weiß, und ein Index macht aus SCAN ein schnelles SEARCH.
1000 Inserts in SQLite – mit einer Transaktion plötzlich 100× schneller
Wenn du viele Zeilen einzeln in SQLite schreibst, ist jeder INSERT eine eigene Transaktion und landet einzeln auf der Platte. Packst du alles in EIN BEGIN/COMMIT, wird der Import dramatisch schneller – und ist obendrein „alles oder nichts".
Ranglisten in SQL mit Fensterfunktionen – ROW_NUMBER, RANK und PARTITION BY
Für eine Rangliste brauchst du keine Zählerei im Code. ROW_NUMBER() und RANK() vergeben den Platz direkt in SQL – auch getrennt nach Gruppen. Ich zeige dir den Unterschied und wann du was nimmst.
Upsert in SQLite mit ON CONFLICT DO UPDATE
Einfügen oder aktualisieren in einem einzigen Statement – mit ON CONFLICT ... DO UPDATE. Kein vorheriges SELECT, kein Race Condition zwischen Prüfen und Schreiben.