Sobes.tech
Junior — Middle

Kuidas erinevad rekursiivsed ja mitte-rekursiivsed avaldised üldtabeli avaldustes (CTE) SQL-is?

sobes.tech AI

Vastus AI-lt

SQL-is ühise tabeli avaldis (CTE) on ajutine tulemus, mida saab kasutada peamises päringus. On kahte tüüpi CTE: rekursiivsed ja mitte-rekursiivsed.

  • Mitte-rekursiivne CTE: see on lihtsalt nimetatud ajutine andmekogum, mis määratletakse ühe päringuga. Seda saab kasutada keerukate päringute lihtsustamiseks või alam-päringute korduvkasutamiseks.

  • Rekursiivne CTE: see on CTE, mis viitab iseendale, võimaldades teha rekursiivseid operatsioone, näiteks hierarhiate või graafide läbimist.

Näide mitte-rekursiivsest CTE-st:

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

Näide rekursiivsest CTE-st (kõigi alluvate töötajate otsimine):

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

Sellisel viisil võimaldavad rekursiivsed CTE-d luua ahelaid ja hierarhiaid, samas kui mitte-rekursiivsed lihtsustavad lihtsalt päringu struktuuri.