Informacje o nowych artykułach oraz akcjach edukacyjnych prosto na Twojej skrzynce e-mail!

Podzapytania: CTE (Common Table Expressions) cz. IV

W poprzedniej części tego artykułu omawiałem podzapytania jako źródło danych. Teraz będziemy kontynuować tą tematykę z tym, że zastosujemy w naszych kwerendach specjalne wyrażenie tabelaryczne CTE – Common Table Expressions specjalnie stworzone do tego typu konstrukcji.

Ogólna składnia CTE:

;WITH nazwaCTE AS
(podzapytanie wewnętrzne)
SELECT * FROM nazwaCTE; --podzapytanie główne

Przykład

;WITH nazwaCTE AS
(SELECT kol1, kol2 FROM tabela) -- podzapytanie (wewnętrzne)
SELECT * FROM nazwaCTE; -- zapytanie główne (zewnętrzne)

Ta sama kwerenda bez CTE:

SELECT * FROM (SELECT kol1, kol2 FROM tabela);

Przy korzystaniu z CTE należy zwrócić uwagę na kilka rzeczy:

  1. Nazwę CTE podaje się po słowie kluczowym: ;WITH (pamiętać o „;„),
  2. Do utworzonego CTE można się odwoływać dowolną ilość razy za pośrednictwem jego nazwy,
  3. Do CTE można się odwołać po jego zdefiniowaniu, jeżeli mamy jakieś rozbudowane zapytanie np. z kilkoma CTE to najpierw musimy je zdefiniować a potem się odwołać (nie można odwołać się do CTE, które zostało zdefiniowane później).

Ćwiczenie

Przejdźmy teraz do przykładu, który opisywałem już w poprzedniej części tego wpisu. Mamy więc następujące tabele:

komputery:

NazwaCena
ASUS T200TA2000
MacBook PRO6800
Lenovo YOGA 22500
Dell XPS6000

drukarki:

NazwaCena
HP DESJKET 170
Canon PIXMA MX395220
EPSON XP-215330

monitory:

NazwaCena
Samsung SyncMaster TA23A3501000
EIZO FlexScan EV2730Q3400
EIZO LCD EV2436WFS3-BK1800

Chcemy obliczyć średnią cenę sprzętu komputerowego, czyli średnią cenę z komputerów, drukarek oraz monitorów. Do tego celu wykorzystamy podzapytania oraz CTE:

;WITH cte AS
(
SELECT AVG(Cena) AS Cena FROM komputery
UNION ALL
SELECT AVG(Cena) AS Cena FROM drukarki
UNION ALL 
SELECT AVG(Cena) AS Cena FROM monitory
)
SELECT AVG(Cena) FROM cte;

Rezultat:

AVG(Cena)
2422

Spodobało się?

Jeśli tak, to zarejestruj się do newslettera aby otrzymywać informacje nowych artykułach oraz akcjach edukacyjnych. Gwarantuję 100% satysfakcji i żadnego spamowania!

, , , , ,

Dodaj komentarz

Odpowiedz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Pin It on Pinterest