Salt la conținutul principal
Modulul 14 · Lecția 1 din 353/57 în curs~12 min
Lecții din modul (1/3)

Introducere în CTE (CU)

Introducere în CTE (CU)

Mai devreme sau mai târziu, se întâmplă tuturor: trebuie să filtrați datele în funcție de rezultatul unei agregări, apoi să luați acel filtru și să-l UNEȚI cu o altă interogare agregată. Începeți să scrieți un SELECT în interiorul unui SELECT, care, la rândul său, ajunge în FROM a altui SELECT.

Rezultatul? Spaghetti SQL, o interogare care nu este citită pentru orice ființă umană.

CTE (Expresii comune de tabel) vă permit să descurcați această mizerie. Le activați cu cuvântul cheie WITH, care vă permite să definiți interogări cu nume temporare și apoi să le reutilizați ca „table virtuale” în interogarea finală.

Sintaxa de bază

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;

După cum puteți vedea, interogarea principală din partea de jos citește din premium_customers ca și cum ar fi un tabel real! Și este mult mai ușor de citit decât un mega inner-join cu subinterogări imbricate.

Exercițiu#sql.m14.l1.e1
Încercări: 0Se încarcă…

Vrem produsele foarte scumpe. Utilizați un CTE numit „produse_de lux” pentru a selecta „id” și „preț” din „produse”, unde „preț > 500”. Apoi rulați o interogare principală pe acest CTE și afișați totul (*).

Se încarcă editorul...
Afișează indiciu

Începeți cu WITH luxury_products AS (...) apoi SELECT * FROM luxury_products.

Soluție disponibilă după 3 încercări

Exercițiu#sql.m14.l1.e2
Încercări: 0Se încarcă…

Dorim să găsim utilizatori care scriu recenzii. Creați un CTE „revizori” care extrage valorile unice (DIstincte) „customer_id” din „reviews”. Apoi extrageți „id”, „first_name”, „last_name” din tabelul „clienți” și \`JOIN\` cu CTE pentru „revizori” pe id.

Se încarcă editorul...
Afișează indiciu

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

Soluție disponibilă după 3 încercări