Sobes.tech
Junior — Middle

Come si differenziano le espressioni ricorsive e non ricorsive nelle espressioni di tabella comune (CTE) in SQL?

sobes.tech AI

Risposta dell'AI

L'espressione di tabella comune (CTE) in SQL è un risultato temporaneo che può essere utilizzato nella query principale. Esistono due tipi di CTE: ricorsivi e non ricorsivi.

  • CTE non ricorsivo: è semplicemente un insieme temporaneo di dati con nome, definito da una singola query. Può essere usato per semplificare query complesse o riutilizzare sottoquery.

  • CTE ricorsivo: è un CTE che si riferisce a se stesso, consentendo di eseguire operazioni ricorsive, come attraversare gerarchie o grafi.

Esempio di CTE non ricorsivo:

WITH RecentOrders AS (
    SELECT * FROM Orders WHERE OrderDate > '2024-01-01'
)
SELECT * FROM RecentOrders WHERE CustomerID = 123;

Esempio di CTE ricorsivo (ricerca di tutti i subordinati di un dipendente):

WITH RECURSIVE Subordinates AS (
    SELECT EmployeeID, ManagerID, Name FROM Employees WHERE EmployeeID = 1 -- capo
    UNION ALL
    SELECT e.EmployeeID, e.ManagerID, e.Name
    FROM Employees e
    INNER JOIN Subordinates s ON e.ManagerID = s.EmployeeID
)
SELECT * FROM Subordinates;

In questo modo, i CTE ricorsivi consentono di costruire catene e gerarchie, mentre quelli non ricorsivi semplificano semplicemente la struttura della query.