Sobes.tech
Junior — Middle

Чӣ гуна фарқият дорад байни изҳороти рекурсивӣ ва ғайри рекурсивӣ дар изҳороти умумии ҷадвал (CTE) дар SQL?

sobes.tech AI

Ҷавоб аз AI

Ифодаи умумии ҷадвал (CTE) дар SQL натиҷаи муваққатӣ мебошад, ки дар дархости асосӣ истифода мешавад. Ду навъи CTE вуҷуд дорад: рекурсивӣ ва ғайр-рекурсивӣ.

  • CTE ғайр-рекурсивӣ: ин танҳо маҷмӯи муваққатии маълумот бо номи, ки аз ҷониби як дархост муайян карда шудааст. Он метавонад барои содда кардани дархостҳои мураккаб ё барои такрории истифодаи зердархостҳо истифода шавад.

  • CTE рекурсивӣ: ин CTE аст, ки ба худ ишора мекунад, ки имкон медиҳад амалиётҳои рекурсивӣ, ба монанди гузаштан аз ҳиерархияҳо ё графҳо.

Маслиҳати CTE ғайр-рекурсивӣ:

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

Маслиҳати CTE рекурсивӣ (ҷустуҷӯи ҳамаи кормандони зердаст):

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

Тавре ки мебинем, CTE рекурсивӣ имкон медиҳад, ки занҷирҳо ва ҳиерархияҳоро бунёд кунанд, дар ҳоле ки CTE ғайр-рекурсивӣ танҳо сохтори дархостро содда мекунад.