Podzapytania: Podzapytania jako źródło danych w SQL cz. III
Do tej pory w poprzednich częściach tego artykułu omawiane były podzapytania, które były wstawiane np. w klauzuli SELECT albo WHERE. Oczywiście to nie wyczerpuje tego tematu, bowiem nasze podzapytanie można również umieścić w klauzuli FROM. Jest nawet do tego stworzone specjalne wyrażenie tabelaryczne – CTE (ang. Common Table Expressions).
Tabela klienci
na której uruchomimy przykładowe zapytanie:
ID | Imie | Nazwisko | Miasto |
1 | Jan | Kowalski | Warszawa |
2 | Michał | Łagoda | Kraków |
3 | Marcin | Kulczyk | Kraków |
4 | Radosław | Sikorski | Kraków |
5 | Monika | Kopacz | Gdańsk |
6 | Piotr | Grabiec | Toruń |
7 | Ewa | Pogodna | Bydgoszcz |
8 | Sebastian | Szybki | Warszawa |
Ćwiczenie
Przyjrzyjmy się teraz przykładowemu podzapytaniu jako źródło danych:
SELECT * FROM (SELECT Imie, Nazwisko FROM klienci);
Rezultat:
Imie | Nazwisko |
Jan | Kowalski |
Michał | Łagoda |
Marcin | Kulczyk |
Radosław | Sikorski |
Monika | Kopacz |
Piotr | Grabiec |
Ewa | Pogodna |
Sebastian | Szybki |
Nasza kwerenda pobrała wszystkie kolumny (*
) z utworzonej za pomocą podzapytania z klauzuli FROM
tabeli.
Tego typu techniki przydatne są między innymi, kiedy musimy wykonać jakąś operację na danych z kilku tabel i na dodatek informacje pobrane z każdej tabeli muszą również zostać wcześniej jakoś zmodyfikowane (np. musi zostać obliczona średnia, suma itp.).
Przypuśćmy na przykład, że musimy obliczyć średnią cenę komputerów, drukarek oraz monitorów sprzedawanych w sklepie komputerowym. Dane te są zapisane w trzech różnych tabelach. Zastosujemy więc tutaj podzapytanie które obliczy średnią cenę z tabeli komputery
, średnią cenę z tabeli drukarki
oraz średnią cenę z tabeli monitory
, a następne z tych trzech danych wywołamy zewnętrzne podzapytanie i obliczymy właściwą średnią.
Ten przykład został omówiony w kolejnej części tego artykułu.