Vor zwei Monaten erschien die Version 8.0 der relationalen Datenbank MySQL von Oracle. Zu den fehlenden Eigenschaften, die das Konkurrenzprodukt PostgreSQL schon seit der Version 8.4 aus dem Jahr 2009 beherrscht, gehören die Common Table Expressions (CTEs).

Diese Konstrukte in der Datenbank-Abfragesprache SQL gestatten es, komplexe Querys in überschaubare Chunks aufzuteilen, die danach ähnlich den bekannten Views über ihren Namen benutzt werden können, und das anders als bei einfachen Subquerys auch mehrfach.

Beispiel für die Nutzung von CTEs

In dem kurzen SQL-Listing im Artikelbild sehen Sie, dass die CTEs vor der Haupt-Query zunächst mit WITH definiert werden müssen. In meinem Beispiel werden in der ersten CTE die Online-Verkäufe aus einer imaginären Sales-Tabelle ausgewählt und dann in der zweiten CTE nach Monaten aggregiert.

Die Hauptabfrage berechnet den Anteil eines einzelnen Online-Verkaufs am Monatsumsatz. Common Table Expressions reduzieren dabei nicht nur Redundanzen, sondern verringern auch die Fehleranfälligkeit.

Wettbewerber MariaDB hat die CTEs schon seit der Version 10.1 implementiert – seit Version 10.2 vom Mai 2017 kann MariaDB das sogar auch rekursiv…