Gyakori táblakifejezések használata

Befejeződött

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.