Eine Common Table Expression (CTE), auch bekannt als "WITH-Abfrage", ist ein benannter temporärer Resultatsatz, der innerhalb einer einzelnen SELECT
, INSERT
, UPDATE
oder DELETE
Anweisung definiert wird. CTEs sind in SQL eine mächtige Methode, um komplexe Abfragen zu strukturieren und lesbarer zu machen. Sie ähneln temporären Tabellen, existieren aber nur während der Ausführung der Abfrage, in der sie definiert sind.
Wichtige Aspekte:
Syntax: Eine CTE wird mit dem Schlüsselwort WITH
eingeleitet, gefolgt vom Namen der CTE, einer optionalen Spaltenliste in Klammern, dem Schlüsselwort AS
und der die CTE definierenden SELECT
-Anweisung.
Geltungsbereich: Der Geltungsbereich einer CTE ist auf die einzelne Abfrage beschränkt, in der sie definiert ist. Sie kann innerhalb dieser Abfrage mehrfach verwendet werden, existiert aber danach nicht mehr.
Rekursive CTEs: CTEs können rekursiv sein, d.h. sie können sich selbst referenzieren. Dies ist nützlich für die Abfrage hierarchischer Daten wie Organisationsstrukturen oder Stammbäume. Siehe Rekursive%20Abfragen für weitere Informationen.
Mehrere CTEs: Es können mehrere CTEs in einer einzigen Abfrage definiert werden, indem sie durch Kommas getrennt werden.
Vorteile:
Anwendungsfälle:
Performance: In manchen Fällen können CTEs die Performance von Abfragen verbessern, da der Datenbank-Optimierer die CTE separat betrachten und optimieren kann. Dies ist aber nicht immer der Fall, und es ist wichtig, die Performance mit und ohne CTE zu testen.
Beispiel (PostgreSQL):
WITH customer_total AS (
SELECT
customer_id,
SUM(amount) AS total_spent
FROM
payments
GROUP BY
customer_id
)
SELECT
c.customer_id,
c.name,
ct.total_spent
FROM
customers c
JOIN
customer_total ct ON c.customer_id = ct.customer_id
WHERE
ct.total_spent > 100;
Dieses Beispiel definiert eine CTE namens customer_total
, die die Gesamtausgaben jedes Kunden berechnet. Diese CTE wird dann in der Hauptabfrage verwendet, um die Kundennamen und die Gesamtausgaben für Kunden anzuzeigen, die mehr als 100 ausgegeben haben. Siehe auch SQL für eine allgemeine Einführung.
Ne Demek sitesindeki bilgiler kullanıcılar vasıtasıyla veya otomatik oluşturulmuştur. Buradaki bilgilerin doğru olduğu garanti edilmez. Düzeltilmesi gereken bilgi olduğunu düşünüyorsanız bizimle iletişime geçiniz. Her türlü görüş, destek ve önerileriniz için iletisim@nedemek.page