54459 skanuj0317 (2)

54459 skanuj0317 (2)



332 PHP i MySQL dla każdego

Efektem działania podzapytania nie musi być pojedyncza wartość, jak w powyższych przykładach, ale może to być również zbiór wartości. W zapytaniu zewnętrznym niezbędne będzie w takim wypadku użycie operatora IN. Możemy zatem otrzymać np. szczegóły zamówień, które miały największą wartość, dla danego towaru. Podzapytanie pozwoli nam na wybranie zamówień o największych wartościach z podziałem na towary, a zapytanie zewnętrzne dokona złączenia tabel Zamówienia, Towary oraz Klienci. Cała instrukcja będzie miała postać:

SELECT Imię. Nazwisko. Nazwa. Data. Wartość FROM Zamówienia. Towary. Klienci WHERE Wartość IN

(SELECT MAX(Wartość) FROM Zamówienia GROUP BY Towarld)

AND Towary.Id = Zamówienia.Towarld AND Klienci.Id = Zamówienia.KlientId:

Efektem jej działania będzie tablica widoczna na rysunku 11.25.

Rysunek 11.25.

Podzapytanie wybierające wiele wartości


mysql> SELECT Imię, Nazwisko, Nazwa, Data, Wartość -> FROM Zamówienia, Towary, Klienci -> WHERE Wartość IN

-> (SELECT MAX(Wartosc) FROM Zamówienia GROUP BY Towarld) -> AND Towary.Id = Zamówienia.Towarld -> AND Klienci.Id = 2amowienia.KlientId;

Imię I Nazwisko | Nazwa | Data

Wartość

Andrzej

Andrzej

łan

Jan

Janusz

Nowak Nowak Kowalski Kowalski Malinowski

Śruby Nakrętki Nakrętki _ Płaskowniki

2005-01-01

2005-02-12

2005-01-01

200S-02-12

2005-01-01

22.35

22.35

12.44 15.88

12.44

5 rows in set (0.00 sec)

Podzapytania skorelowane

Dotychczas prezentowane podzapytania były wykonywane tylko raz podczas wywołania zapytania głównego, czyli najpierw było wywoływane podzapytanie, jego wynik był wstawiany do zapytania głównego, a następnie było wykonywane zapytanie główne. Zupełnie inaczej wygląda sytuacja w przypadku podzapytań skorelowanych. Są one wykonywane dla każdej wartości analizowanej przez zapytanie główne (fachowo: dla każdej krotki przetwarzanej przez zapytanie zewnętrzne). Ich cechą charakterystyczną jest odwołanie w zapytaniu skorelowanym do kolumny tabeli występującej w zapytaniu głównym. Jeśli w obu zapytaniach występuje ta sama tabela, niezbędne jest użycie aliasu. Zobaczmy to na przykładzie. W tym celu przygotujemy zmodyfikowaną wersję tablicy Towary, zawierającą następujące dane:

Id | Nazwa

| Grupa | Cena |

1 | Śruby

| 1 | 2.00 |

2 | Nakrętki

| 1 | 3.00 |

3 | Kątowniki

j 2 | 8.00 |

4 j Płaskowniki

| 2 | 9.00 j

5 j Gwoździe

1 I 1.00 I

6 | Panele

| 3 1 15.00 1


Wyszukiwarka

Podobne podstrony:
skanuj0284 (3) 298 PHP i MySQL dla każdego Wynik działania takiego zapytania został przedstawiony na
45553 skanuj0408 (2) 424 PHP i MySQL dla każdego Efekt działania zapytania, o ile jego wykonanie zak
28932 skanuj0180 (7) 192 PHP i MySQL dla każdego Jeżeli interesuje nas nie tyle wolna, ile całkowita
skanuj0161 (9) 172 PHP i MySQL dla każdego Zwraca ona ciąg strl, z którego począwszy od znaku o inde

więcej podobnych podstron