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;
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.
(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ą