Scrivere il primo CTE
Sintassi di base di WITH e situazioni in cui un CTE migliora la leggibilità rispetto a una sottoquery
Scrivere il primo CTE è una lezione Coding Interview Prep gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Coding Interview Prep, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Coding Interview Prep include 4 lezioni in totale.
Che cos'è realmente una CTE
Una Common Table Expression (CTE) è un insieme di risultati temporaneo e denominato, definito con la parola chiave WITH, che esiste solo per la durata di una singola query. Gli intervistatori apprezzano le CTE perché rivelano se sa strutturare chiaramente la logica.
Consideri una CTE come un modo per assegnare un nome a una sottoquery, così da poterla usare come una tabella nell'istruzione principale che segue. Non crea un oggetto permanente e scompare non appena termina la query.
La sintassi di base di WITH
Ogni CTE inizia con WITH, un nome, la parola chiave AS e una query racchiusa tra parentesi. Dopo la parentesi di chiusura si scrive un'istruzione normale che utilizza la CTE tramite il suo nome.
WITH cte_name AS ( ... )definisce il blocco.- La query immediatamente successiva alla parentesi è la query principale.
- Il nome della CTE si comporta come il nome di una tabella da cui si può eseguire SELECT.
WITH recent_orders AS (
SELECT *
FROM orders
WHERE order_date >= '2024-01-01'
)
SELECT *
FROM recent_orders;Perché non usare semplicemente una sottoquery?
La stessa logica può essere scritta come una sottoquery inline nella clausola FROM. Perché, allora, gli intervistatori fanno domande sulle CTE?
- Leggibilità: un passaggio denominato si legge dall'alto verso il basso come una ricetta.
- Riutilizzo: può fare riferimento più volte alla stessa CTE invece di ripetere una sottoquery.
- Debug: può eseguire SELECT solo sulla CTE per esaminarla.
In un colloquio, la risposta corretta è solitamente: utilizzi una CTE quando rende la query più facile da leggere e manutenere.
Esempio svolto: filtrare e poi aggregare
Supponga che la domanda sia: trovare il ricavo totale degli ordini effettuati quest'anno. Una CTE consente di isolare il passaggio di filtraggio e poi di aggregare sul risultato denominato.
La query principale tratta recent_orders come se fosse una tabella reale, mantenendo l'aggregazione chiara e immediata.
WITH recent_orders AS (
SELECT amount
FROM orders
WHERE order_date >= '2024-01-01'
)
SELECT SUM(amount) AS total_revenue
FROM recent_orders;Assegnare un nome alle colonne di output
Può rinominare le colonne esposte da una CTE elencandole subito dopo il nome della CTE. È utile quando la query interna produce espressioni o desidera nomi più chiari nei passaggi successivi.
Se fornisce un elenco di colonne, questo deve corrispondere al numero di colonne restituite dalla query interna, altrimenti il database genera un errore.
WITH revenue (region, total) AS (
SELECT region, SUM(amount)
FROM orders
GROUP BY region
)
SELECT region, total
FROM revenue
ORDER BY total DESC;Una CTE è solo una query denominata
Un modello mentale che impressiona gli intervistatori è il seguente: una CTE è logicamente equivalente a sostituire la sua definizione inline. Il database può scegliere di inserirla inline o di materializzarla, ma dal punto di vista semantico il risultato è lo stesso che si otterrebbe incollando la sottoquery.
Questo significa che tutto ciò che è valido in una SELECT normale è valido anche all'interno di una CTE: join, GROUP BY, WHERE, funzioni finestra e altro ancora.
Esempio più approfondito: CTE con un join
Le CTE sono particolarmente utili quando è necessario preparare un lato di un join. Qui si calcola prima il numero di ordini per cliente, quindi lo si ricollega alla tabella dei clienti, così ogni riga del cliente contiene il proprio totale.
Noti come la query principale si legga quasi come una frase: dai clienti, esegui il join con i relativi conteggi degli ordini.
WITH order_counts AS (
SELECT customer_id, COUNT(*) AS num_orders
FROM orders
GROUP BY customer_id
)
SELECT c.name, oc.num_orders
FROM customers c
JOIN order_counts oc
ON oc.customer_id = c.id;Dove si trova una CTE nella query
Il blocco WITH deve comparire prima dell'istruzione che lo utilizza. La CTE è visibile solo nell'unica istruzione immediatamente successiva alla sua definizione.
- Non è possibile fare riferimento a una CTE in una query separata successiva.
- Una CTE definita per una SELECT non può essere riutilizzata da una SELECT diversa eseguita in seguito.
- L'ambito termina con il punto e virgola che chiude l'istruzione.
Le CTE funzionano con INSERT, UPDATE e DELETE
Una domanda frequente di approfondimento è la seguente: le CTE non sono limitate a SELECT. Nella maggior parte dei database moderni è possibile associare una clausola WITH anche alle istruzioni di modifica dei dati.
Questo consente di calcolare una volta un insieme di righe e poi agire su di esse, con una struttura molto più chiara rispetto a una sottoquery annidata nella clausola WHERE.
WITH stale AS (
SELECT id
FROM sessions
WHERE last_seen < NOW() - INTERVAL '30 days'
)
DELETE FROM sessions
WHERE id IN (SELECT id FROM stale);Errori comuni dei principianti
Gli intervistatori prestano attenzione a questi errori:
- Dimenticare la query principale dopo la CTE: un blocco
WITHda solo non è un'istruzione completa. - Inserire un punto e virgola tra la CTE e la query principale.
- Aspettarsi che la CTE persista tra più istruzioni.
- Fornire un elenco opzionale di nomi di colonne che non corrisponde alle colonne della query interna.
Come parlare delle CTE durante un colloquio
Quando Le viene chiesto di ristrutturare una sottoquery complessa, esponga il ragionamento: sposterò questa sottoquery di filtraggio in una CTE chiamata recent_orders, così l'aggregazione risulterà più chiara.
Dimostrare di scegliere le CTE per chiarezza e riutilizzo, e non in modo indiscriminato, comunica una maturità di livello intermedio. Menzioni che una CTE non rende intrinsecamente più veloce una query: il suo valore principale è la leggibilità.
Verifica rapida
Verifichi la Sua comprensione della sintassi e dell’ambito di base delle CTE.
Riepilogo: la prima CTE
Ha imparato che una CTE usa WITH name AS ( ... ) per assegnare un nome a un insieme di risultati temporaneo, a cui fa poi riferimento come a una tabella nell’istruzione seguente.
- Le CTE migliorano leggibilità, riutilizzo e facilità di debug rispetto alle sottoquery incorporate.
- Il loro ambito è limitato a una sola istruzione; dopodiché scompaiono.
- Funzionano con SELECT e con INSERT/UPDATE/DELETE.
- Non migliorano necessariamente le prestazioni.
Prossimo argomento: concatenare diverse CTE in una pipeline.
Domande Frequenti
La lezione «Scrivere il primo CTE» è gratuita?
Sì — il testo completo di «Scrivere il primo CTE» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Coding Interview Prep, passa a CoddyKit PRO. Il corso Coding Interview Prep include 4 lezioni in totale.
Cosa imparerò in «Scrivere il primo CTE»?
Sintassi di base di WITH e situazioni in cui un CTE migliora la leggibilità rispetto a una sottoquery Eserciti Coding Interview Prep con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Coding Interview Prep?
Non è richiesta alcuna esperienza precedente. Coding Interview Prep su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.
Quanto tempo richiede la lezione «Scrivere il primo CTE»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Coding Interview Prep?
Sì. Ogni lezione Coding Interview Prep include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.
Tutte le lezioni di questo corso
- Scrivere il primo CTE
- Concatenare più CTE
- CTE, sottoquery o tabella temporanea
- Ristrutturare query annidate in CTE