Przejdź do głównej treści
eLearner.app
Moduł 14 · Lekcja 1 z 353/57 w kursie~12 min
Lekcje modułu (1/3)

Wprowadzenie do CTE (WITH)

Wprowadzenie do CTE (Z)

Prędzej czy później zdarza się to każdemu: musisz przefiltrować dane na podstawie wyniku agregacji, a następnie skorzystać z tego filtra i POŁĄCZYĆ go z innym zagregowanym zapytaniem. Zaczynasz pisać SELECT wewnątrz SELECT, co z kolei kończy się na FROM kolejnego SELECT.

Wynik? Spaghetti SQL, zapytanie nieczytelne dla żadnego człowieka.

CTE (wspólne wyrażenia tabelowe) pozwalają rozwikłać ten bałagan. Aktywujesz je za pomocą słowa kluczowego WITH, które pozwala zdefiniować tymczasowe nazwane zapytania, a następnie ponownie wykorzystać je jako „tabele wirtualne” w końcowym zapytaniu.

Podstawowa składnia

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;

Jak widać, główne zapytanie na dole odczytuje premium_customers tak, jakby to była prawdziwa tabela! I jest o wiele bardziej czytelny niż mega sprzężenie wewnętrzne z zagnieżdżonymi podzapytaniami.

Ćwiczenie#sql.m14.l1.e1
Próby: 0Ładowanie...

Chcemy bardzo drogich produktów. Użyj CTE o nazwie „luxury_products”, aby wybrać „id” i „cenę” z „produktów”, gdzie „cena > 500”. Następnie uruchom główne zapytanie na tym CTE i pokaż wszystko (*).

Ładowanie edytora...
Pokaż wskazówkę

Zacznij od Z produktami luksusowymi AS (...), a następnie WYBIERZ * Z produktów luksusowych.

Rozwiązanie dostępne po 3 próbach

Ćwiczenie#sql.m14.l1.e2
Próby: 0Ładowanie...

Chcemy znaleźć użytkowników, którzy piszą recenzje. Utwórz „recenzentów” CTE, którzy wyodrębnią unikalne (DISTINCT) wartości „identyfikator_klienta” z „opinii”. Następnie wyodrębnij „id”, „imię”, „nazwisko” z tabeli „klienci” i `JOIN` z CTE „recenzentów” w identyfikatorze.

Ładowanie edytora...
Pokaż wskazówkę

Z recenzentami JAK (WYBIERZ WYRÓŻNIJ identyfikator_klienta Z recenzji) WYBIERZ id, imię, nazwisko OD klientów DOŁĄCZ recenzentów NA klienci.id = recenzenci.klient_id;

Rozwiązanie dostępne po 3 próbach