Le “Common Table Expressions” (CTE) spiegate in modo semplice

Le “Common Table Expressions” (CTE) sono un potente strumento in SQL che permette di organizzare e semplificare le query complesse, strutturandole in blocchi più gestibili e leggibili.

Le CTE spiegate ad un bambino di 7 anni

In genere una query strutturata con le CTE è organizzata in questo modo:

WITH CTE1 AS (
  SELECT 
     ...
  FROM 
     ...
  WHERE 
     ...
  GROUP BY 
     ...
),

CTE2 AS (
  SELECT 
     ...
  FROM 
     ...
  WHERE 
     ...
  GROUP BY 
     ...
),

CTE3 AS (
  SELECT 
     ...
  FROM 
     ...
  WHERE 
     ...
  GROUP BY 
     ...
),

SELECT 
  ...
FROM 
  CTE3
ORDER BY 
  ....

Immagina che questa query sia come costruire un grande castello di Lego. Ogni pezzo del castello viene costruito in sezioni diverse, che alla fine metteremo tutte insieme. In SQL, queste sezioni si chiamano CTE, o “Common Table Expressions”, ma possiamo chiamarle “pezzi del castello”.

  1. cte1, cte2, cte3 (Pezzi del Castello): Queste sono come le istruzioni per costruire parti del nostro castello di Lego. Ogni parte, o “cte”, ha le sue istruzioni su come prendere i piccoli pezzi (dati) da una grande scatola (il database) e metterli insieme in un certo modo.
    • SELECT: Scegliamo quali pezzi di Lego (dati) vogliamo per costruire quella parte del castello.
    • FROM: Diciamo da quale scatola di Lego (tabella del database) prendiamo i pezzi.
    • WHERE: Usiamo solo i pezzi che si adattano a certe regole (come scegliere solo i pezzi rossi).
    • GROUP BY: Mettiamo insieme i pezzi che sono simili (come tutti i pezzi rossi insieme).
  2. Costruire il Castello (La Query Finale): Dopo aver costruito tutte le parti separate del nostro castello (cte1, cte2, cte3), è il momento di metterle tutte insieme.
    • SELECT … FROM cte3: Questo è come prendere la parte finale del castello che abbiamo costruito (cte3) e decidere quali parti di quella sezione mostrare.
    • ORDER BY: Infine, decidiamo in che ordine mostrare le parti del nostro castello finito, come ordinare i pezzi da più piccoli a più grandi o da più colorati a meno colorati.

In sintesi, pensa a come costruire il tuo castello di Lego e poi decidi in che modo vuoi che venga mostrato a chi lo guarda, magari mettendo prima la torre più alta o il cavaliere più coraggioso.

Spiegazione tecnica delle CTE

Passiamo a una spiegazione più diretta e tecnica. Le “Common Table Expressions” (CTE) sono un potente strumento in SQL che permette di organizzare e semplificare le query complesse, strutturandole in blocchi più gestibili e leggibili.

Una CTE è essenzialmente una query temporanea che si può referenziare all’interno di una query SQL più grande. Le CTE aiutano a suddividere le query complesse in parti più semplici, rendendo il codice più ordinato e facilitando il debugging.

Una tipica struttura di CTE inizia con la parola chiave WITH, seguita dal nome della CTE, e tra parentesi, la query che definisce la CTE. Questa struttura può essere ripetuta per definire più CTE all’interno della stessa query. Infine, si utilizzano queste CTE come se fossero tabelle regolari nella query principale.

Ecco un breve riepilogo di cosa fanno le parti di una CTE:

  • WITH: Introduce la definizione della CTE.
  • Nome della CTE: È come dare un nome a una tabella temporanea che si può usare nella query.
  • SELECT: Definisce quali dati selezionare per la CTE, proprio come in una normale query SQL.
  • FROM: Indica da dove prelevare i dati per la CTE.
  • WHERE: Filtra i dati per la CTE, lasciando passare solo quelli che soddisfano certe condizioni.
  • GROUP BY: Raggruppa i dati selezionati in base a uno o più attributi.

Le CTE possono essere particolarmente utili per:

  • Suddividere le query complesse in parti più piccole e gestibili.
  • Incrementare la leggibilità e la manutenibilità del codice SQL.
  • Eseguire ricorsioni in SQL, come camminare attraverso gerarchie di dati.

Spero che questa spiegazione sia chiara e utile!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

error: Questo contenuto è protetto!