Direkt zum Hauptinhalt springen
eLearner.app
Modul 14 · Lektion 1 von 353/57 im Kurs~12 min
Lektionen des Moduls (1/3)

Einführung in CTEs (WITH)

Einführung in CTEs (MIT)

Früher oder später passiert es jedem: Sie müssen Daten basierend auf dem Ergebnis einer Aggregation filtern, dann diesen Filter nehmen und ihn mit einer anderen aggregierten Abfrage VERBINDEN. Sie beginnen mit dem Schreiben eines SELECT in einen SELECT, der wiederum im FROM eines weiteren SELECT endet.

Das Ergebnis? Spaghetti SQL, eine Abfrage, die für keinen Menschen lesbar ist.

Mit CTEs (Common Table Expressions) können Sie dieses Chaos entwirren. Sie aktivieren sie mit dem Schlüsselwort WITH, wodurch Sie temporäre benannte Abfragen definieren und diese dann in der endgültigen Abfrage als „virtuelle Tabellen“ wiederverwenden können.

Grundlegende Syntax

SQL
WITH premium_customers AS (
  SELECT customer_id, SUM(total_amount) AS total_spent
  FROM orders
  GROUP BY customer_id
  HAVING SUM(total_amount) > 1000
)
SELECT customers.first_name, premium_customers.total_spent
FROM customers
JOIN premium_customers ON customers.id = premium_customers.customer_id;

Wie Sie sehen können, liest die Hauptabfrage unten aus premium_customers, als wäre es eine echte Tabelle! Und es ist viel besser lesbar als ein Mega-Inner-Join mit verschachtelten Unterabfragen.

Übung#sql.m14.l1.e1
Versuche: 0Wird geladen…

Wir wollen die sehr teuren Produkte. Verwenden Sie einen CTE namens „luxury_products“, um „id“ und „price“ aus „products“ auszuwählen, bei denen „price > 500“ ist. Führen Sie dann eine Hauptabfrage für diesen CTE aus und zeigen Sie alles an (*).

Editor wird geladen…
Hinweis anzeigen

Beginnen Sie mit WITH Luxury_products AS (...) und wählen Sie dann * FROM Luxury_products aus.

Lösung nach 3 Versuchen verfügbar

Übung#sql.m14.l1.e2
Versuche: 0Wird geladen…

Wir möchten Benutzer finden, die Bewertungen schreiben. Erstellen Sie einen CTE „Reviewer“, der die eindeutigen (DISTINCT) „customer_id“-Werte aus „reviews“ extrahiert. Extrahieren Sie dann „id“, „first_name“, „last_name“ aus der Tabelle „customers“ und `JOIN` mit dem CTE „reviewers“ für id.

Editor wird geladen…
Hinweis anzeigen

WITH reviewers AS (SELECT DISTINCT customer_id FROM reviews) SELECT id, first_name, last_name FROM customer JOIN reviewers ON customer.id = reviewers.customer_id;

Lösung nach 3 Versuchen verfügbar