skanuj0318 (2)

skanuj0318 (2)



Rozdział 11. ♦ Więcej o SQL 333

|    7    |    Wkręty    |    1    |    4.00    j

|    8    :    Deski    |    3    |    12.00    |

|    9    j    Płyty    |    3    |    19.00    |

Do tabeli zostały wprowadzone dodatkowe kolumny: Grupa, określająca grupę towarową, oraz Cena — określająca cenę towarów. Spróbujmy się teraz dowiedzieć, które z towarów mają cenę wyższą niż średnia cena w ich grupie? Jak to zrobić? Dla każdego towaru trzeba wyliczyć średnią cenę grupy i porównać ją z ceną z kolumny Cena. Nie wystarczy zatem prosta instrukcja warunkowa; trzeba wykorzystać podzapytanie skorelowane. Będzie ono miało postać:

SELECT Id. Nazwa. Cena. Grupa FROM TOWARY WHERE Cena >

(SELECT AVG(Cena)

FROM Towary AS Towary2 WHERE Towary.Grupa=Towary2.Grupa ):

Dla każdego towaru analizowanego w zapytaniu głównym w zapytaniu skorelowanym wyliczana jest średnia cena grupy towarów, do której ten towar należy. Ponieważ oba zapytania operują na tej samej tabeli, w zapytaniu skorelowanym tablica Towary została przemianowana na Towary2, tak aby warunek w klauzuli WHERE miał sens (inaczej warunek miałby postać Towary.Grupa-Towary.Grupa i zapytanie nie mogłoby być poprawnie wykonane). Wynik działania powyższego zapytania złożonego został przedstawiony na rysunku 11.26.

Rysunek 11.26.

Wynik działania zapytania zawierającego podzapytanie skorelowane


mysq1> SELECT Id, Nazwa, Cena, Grupa -> FROM TOWARY -> WHERE Cena >

-> (SELECT AVG(Cena)

-> FROM Towary AS Towary2

->    ^WHERE Towary.Grupa=Towary2.Grupa

I Id

Nazwa

Cena | Grupa I

2

3.00 | 1 |

7

4.00 | 1 |

Płyty

19.00 1 3 |

4 row<

in set (0.00 sec)

Podzapytania w klauzuli FROM

Podzapytanie może być użyte również w klauzuli FROM. Wynikiem podzapytania musi być w takim wypadku tablica, z której dane pobierane są przez zapytanie zewnętrzne. Ogólnie konstrukcja taka ma postać:

SELECT kolumny_zapy tani a FROM

(SELECT kolumnyjodzapytania FROM tabjice

WHERE warunki jiodzapytania ) AS nazwa

WHERE warunki_zapytania


Wyszukiwarka

Podobne podstrony:
skanuj0297 (3) Rozdział 11. ♦ Więcej o SQL 311 Rozdział 11. ♦ Więcej o SQL 311 mysql> select tytu
skanuj0299 (2) Rozdział 11. ♦ Więcej o SQL 313 Rozdział 11. ♦ Więcej o SQL 313 mysql> SELECT tytu
skanuj0303 (2) Rozdział 11. ♦ Więcej o SQL 317 Której funkcji należy użyć, aby dowiedzieć się, jaka
skanuj0305 (3) Rozdział 11. ♦ Więcej o SQL 319 SELECT Klientld. MIN(Wartosc) AS MIN. MAX(Wartosc) AS
skanuj0310 (2) Rozdział 11. ♦ Więcej o SQL 325 W przypadku już istniejącej tabeli jej typ może zosta
skanuj0314 (2) Rozdział 11. ♦ Więcej o SQL 329 Korzystanie z kluczy obcych wiąże się niestety z kilk
skanuj0301 (2) Rozdział 11. ♦ Więcej o SQL 315 Tabela 11.1. Funkcje

więcej podobnych podstron