A CTE (Common Table Expression), definita bil-WITH, hija sett ta' riżultati temporanju msemmi li tista' tirreferixxha fil-interrogazzjoni. CTEs jagħmlu interrogazzjonijiet kumplessi aktar leġġibili billi jqassmuha fi stadji loġiċi msemmija — u jippermettu interrogazzjonijiet rekursivi (għal ġerarkiji).
CTE bażiku — smija subquery għall-leġġibilità
WITH active_users AS ( -- define a named temporary result set
SELECT id, name FROM users WHERE active = true
)
SELECT * FROM active_users -- reference it like a table
WHERE name LIKE 'A%';
Il-WITH ... AS (...) tiddefinixxi CTE — interrogazzjoni msemmija li treferenzzaha aktar tard. Hija bħal subquery, imma msemmija u leġġibili, speċjalment għal interrogazzjonijiet kumplessi.
CTEs multipli — ktejb ta' stadji loġiċi
WITH
monthly_sales AS (
SELECT month, SUM(amount) AS total FROM orders GROUP BY month
),
avg_sales AS (
SELECT AVG(total) AS avg_total FROM monthly_sales -- a CTE can reference another
)
SELECT m.month, m.total
FROM monthly_sales m, avg_sales a
WHERE m.total > a.avg_total; -- months above the average
CTEs multipli jaqassmu interrogazzjoni kumplessa fi stadji leġġibili u sekwenzjali — kull wieħed jinbina fuq dak preċedenti. Din hija ħafna aktar ċara minn subqueries imqabbla fil-fond.
CTEs vs subqueries (leġġibilità)
Nested subqueries → hard to read when deeply nested
CTEs → name each step, read top-to-bottom like a sequence → much clearer
→ CTEs are often preferred for COMPLEX queries purely for readability/maintainability.
CTEs Rekursivi — għal ġerarkiji
-- traverse a hierarchy (e.g. all descendants of a category, an org chart)
WITH RECURSIVE subordinates AS (
SELECT id, name, manager_id FROM employees WHERE id = 1 -- base case (the top)
UNION ALL
SELECT e.id, e.name, e.manager_id
FROM employees e
JOIN subordinates s ON e.manager_id = s.id -- recursive step
)
SELECT * FROM subordinates; -- the whole tree under employee 1
CTEs Rekursivi (WITH RECURSIVE) jaqsmu data ġerarkika/tas-siġra (ċarts organizzazzjonali, siġar tal-kategoriji, bill-of-materials, mogħdijiet tal-grafu) — xi ħaġa li kieku difficli ħafna fil-SQL.
Għaliex hija importanti
CTEs huma feature importanti tal-SQL għal leġġibilità u rikursjoni, u l-fahm tagħhom huwa valwuż għat-tiktib ta' interrogazzjonijiet kumplessi mantenutabbli u għat-trattament ta' data ġerarkika.
Il-benefiċċju primaryu ta' kuljum huwa leġġibilità: interrogazzjonijiet kumplessi b'livelli multipli ta' subqueries isiru difficli biex jinqraw u jinzammu, filwaqt li CTEs jagħtuk il-possibbiltà li taqsam l-interrogazzjoni fi stadji loġiċi msemmija u sekwenzjali (aqra minn quddiem lejn wara bħal serje ta' operazzjonijiet), għalhekk titjib il-kjarezza b'mod drammmatiku — għal din ir-raġuni, CTEs spiss jippreferixxu minn subqueries imqabbla fil-fond għal interrogazzjonijiet kumplessi, għalhekk jagħmluha tool importanti għat-tiktib ta' SQL mantenutabbli.
Egwalment importanti hija l-kapaċità CTE rikursiva (WITH RECURSIVE), li tippermetti interrogazzjoni ta' data ġerarkika u strutturata bħal siġar (ċarts organizzazzjonali, siġar ta' kategoriji, bill-of-materials, traversal tal-grafu) — klassi ta' interrogazzjonijiet li kieku difficli ħafna jew impossibbli fil-SQL standard, għalhekk CTEs rekursivi huma s-soluzzjoni standard għat-traversal ta' data ġerarkika.
Il-fahm taż-żewġ użi — CTEs għaddekompożizzjoni ta' interrogazzjonijiet kumplessi fi stadji leġġibili, u CTEs rekursivi għat-traversal ġerarkiku — jkopri l-valur pratiku.
Billi interrogazzjonijiet kumplessi huma komuni f'applikazzjonijiet reali (u leġġibilità/mantenibilità għandhom importanza), u billi data ġerarkika (li CTEs rekursivi jħadduhiex sew) tidher ta' spiss (strutturi organizzazzjonali, kategoriji nested, data mitmewwia), il-fahm ta' CTEs huwa għarif importanti tal-livell senior li jtejbu l-mantenibilità tal-interrogazzjoni u jiftaħ interrogazzjoni ġerarkika — tool relevanti ta' spiss għat-tiktib ta' SQL ċar u sofistikati u suġett komuni li juri kapaċità avvanzata tal-SQL, partikolarment il-forma rikursiva għal data strutturata bħal siġra.
