2013 m. vasario 16 d., šeštadienis

CTE



CTE – pirmiausia atsirado Server 2005.



WITH < CTE name > [  ( < column name > [ ,...n ]  )  ]
AS
(  < query returning tabular data >  )
< statement that will make use of the CTE >


CTE negali būti naudojami:

COMPUTER and COMPUTE BY
ORDER BY
INTO
The FOR XML, FOR BROWSE, and OPTION query clauses

CTE nekontroliuoja, kokia infomacija grąžinama – į ją tik sudedama informacija. Norint kontroliuoti, ką grąžiname, rašome atskirą SELECT’ą iš CTE ir išvedame kokius norime stulpelius, rikiuojame pagal poreikį.

Pavydžiui, jeigu turime lentelę Employees, kurioje yra du stulpeliai:

empName,
department 

Reikia išvesti empName, department tik tų skyrių, kuriuose daugiau nei 10 darbuotojų. Su CTE tai padaryti lengviau - reikės mažiau resursų:

WITH DepCounts (department, employees)
AS ( SELECT department, COUNT(*)
        FROM Employees
        GROUP BY department)
SELECT e.empName, e.department, d.employees
    FROM Employees AS e
    JOIN DepCounts AS d ON e.department = d.department
    WHERE d.employees > 10;

Tą patį galime padaryti su laikina lentele, bet reikės daugiau resursų:

SELECT empName, department,
    (SELECT COUNT(*) FROM Employees WHERE department = e.department)
    FROM Employees AS e
    WHERE 1 < (SELECT COUNT(*) FROM Employees
        WHERE department = e.department);


CTE naudojamas kas kart, kai vykdoma užklausa. Jeigu bus vykdoma daug SELCT ar INSERT operacijų - geriau naudoti laikinąsias lenteles.

Komentarų nėra:

Rašyti komentarą