Gyakori táblakifejezések használata
A Common Table Expressions (CTEs) egy olyan mechanizmust biztosít, amellyel meghatározhat egy olyan al lekérdezést, amelyet aztán a lekérdezés más részein is használhat. A származtatott táblával ellentétben a CTE a lekérdezés elején van definiálva, és a külső lekérdezésben többször is hivatkozhat gombra.
A CTE-k egy lekérdezésben definiált elnevezett kifejezések. Az albekérdezésekhez és a származtatott táblákhoz hasonlóan a CTE-k is lehetővé teszik a lekérdezési problémák kisebb, modulárisabb egységekre bontását. A CTE-k hatóköre a külső lekérdezés végrehajtására korlátozódik. Amikor a külső lekérdezés véget ér, a CTE élettartama is megszűnik.
Lekérdezések írása CTE-kkel az eredmények lekéréséhez
A CTE-k segítségével lekérheti az eredményeket. CTE létrehozásához egy WITH záradékban kell definiálnia azt a következő szintaxis alapján:
WITH <CTE_name>
AS (<CTE_definition>)
Ha például egy CTE használatával szeretné lekérni az egyes ügyfelek által évente leadott rendelésekre vonatkozó információkat, a következő lekérdezést futtathatja:
WITH CTE_year
AS
(
SELECT YEAR(orderdate) AS orderyear, custid
FROM Sales.Orders
)
SELECT orderyear, COUNT(DISTINCT custid) AS cust_count
FROM CTE_year
GROUP BY orderyear;
A CTE-t (CTE_year) a WITH záradékkal nevezheti el, majd az AS () használatával definiálhatja az alqueryt. Ezután hivatkozhat az eredményül kapott CTE-ra a külső lekérdezésben, amely ebben az esetben a végső Standard kiadás LECT utasításban (FROM CTE_year) történik. Az eredmény így nézne ki:
orderyear | cust_count |
---|---|
2019 | 67 |
2020 | 86 |
2021 | 81 |
Lekérdezések cte-kkel történő írásakor vegye figyelembe az alábbi irányelveket:
- A CTE-k a CTE Standard kiadás LECT záradékában hivatkozott oszlopok egyedi nevein kívül nevet is igényelnek a táblakifejezéshez.
- A CTE-k beágyazott vagy külső aliasokat is használhatnak az oszlopokhoz.
- A származtatott táblával ellentétben a CTE-ra többször is hivatkozhat ugyanabban a lekérdezésben egy definícióval. Több CTE is definiálható ugyanabban a WITH záradékban.
- A CTE-k támogatják a rekurziót, amelyben a kifejezés önmagára mutató hivatkozással van definiálva. A rekurzív CT-k túlmutatnak a modul hatókörén.