Modern SQL: Eröffnungs-Artikel


Gerade eben habe ich meine neue Webseite modern-sql.com in Betrieb genommen. Sie ist momentan noch sehr klein – nur sechs Seiten mit echtem Inhalt – wird aber in den nächsten Monaten und Jahren wachsen und schlussendlich vielleicht ein Buch werden, genauso wie auch aus Use-The-Index-Luke.com ein Buch wurde. Daher dachte mich mir, ich hole dich jetzt gleich mit an Board, damit du mit der Seite wachsen kannst.

Was ist also modern SQL? Noch eine SQL-Referenz? Mitnichten. Es gibt bereits genügend Referenzen im Internet. Und alle leiden an denselben Problemen:

  • Sie decken kaum mehr als entry-levelSQL-92 ab. Manche Anleitungen erwähnen nicht einmal, dass sie eigentlich einen proprietären Dialekt beschreiben.

  • Die Beispiele zeigen nur die Syntax, aber nicht wie man damit reale Probleme löst.

  • Sie dokumentieren nicht, welche Datenbanken welche Funktionen unterstützen.

Modern SQL ist anders:

  • Modern SQL basiert auf SQL:2016 – der aktuellen Version des ISO-Standards. Dennoch berücksichtigt modern SQL, dass manche Datenbanken noch gegen ältere Standards entwickelt werden oder nur einen Teil der Standard-Funktionen unterstützten.

  • Modern SQL zeigt, wie man reale Probleme mit aktuellen SQL-Funktionen löst. Es zeigt jedoch auch „konforme Alternativen“ um dasselbe Problem mit anderen (oft älteren) Standard-Methoden zu lösen. Wenn nötig und möglich werden auch „proprietäre Alternativen“ aufgezeigt.

    Beachte, dass es hier eine Hierarchie gibt: die empfohlene (die idiomatischste) Lösung zuerst, standardkonforme Alternativen danach und nur wenn nötig proprietäre Alternativen.

  • Modern SQL dokumentiert die Verfügbarkeit der SQL-Funktionen in sechs SQL-Datenbanken (Beispiel aus values):

BigQueryaDb2 (LUW)aaacMariaDBaaaaMySQLbbbOracle DBPostgreSQLaaaaSQL ServeraaSQLiteaaaaMehrzeilen insert … valuesValues als eigene AnweisungFrom|Join (values …) tWith t as (values …)
  1. Nur ohne Schlüsselwort row
  2. Nur mit Schlüsselwort row: values row('r1c1','r1c2'), row('r2c1', 'r2c2')
  3. Erfordert Spaltennamen in der With-Klausel: with x (c1,c2) as (values …) • Nur ohne Schlüsselwort row

Klick auf eine Funktion (z. B. „gültig, wo select gültig ist“) um zu sehen, wie sich die Verfügbarkeit entwickelt hat.

Hier kann man sehen, dass SQLite values erst seit Kurzem überall akzeptiert, wo select gültig ist. In dieser Ansicht ist für die Datenbanken, die eine Funktion nicht unterstützen, auch festgehalten welche Version geprüft wurde.

modern SQL wird unweigerlich beides werden: eine Hommage an den SQL-Standard und eine Beschwerde über die mangelnde Umsetzung. Die Verfügbarkeitsdokumentation und die oben erwähnten alternativen Lösungen (konforme und proprietäre) sorgen dafür, dass das Jammern produktiv bleibt. Sieh dir zum Beispiel select ohne from an.

Dies ist nur der erste Schritt einer langen Reise. Ich lade dich ein, dieser Reise per Twitter, E-Mail oder RSS zu folgen.

Über den Autor

Foto von Markus Winand

Markus Winand ist der SQL Renaissance Botschafter auf der Mission, Entwickler auf die Evolution von SQL im 21. Jahrhundert aufmerksam zu machen. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz und DSGVO | CC-BY-NC-ND 3.0 Lizenz