skanuj0319 (2)

skanuj0319 (2)



PHP i MySQL dla każdego

Należy zwrócić uwagę na argument nazwa, którym jest nazwa tablicy wynikowej zwróconej przez podzapytanie. Może być ona dowolna, zawsze jednak musi być obecna. Wynika to z faktu, że tablica (tablice) w klauzuli WHERE zawsze musi mieć nazwę, nawet jeśli ma być to jedynie nazwa tymczasowa. Przykładowa konstrukcja tego typu może mieć postać:

SELECT Imię. Nazwisko. Wartość. Data FROM

(SELECT * FROM Zamówienia. Klienci WHERE Zamówieni a.KlientId - Klienci.Id

)

AS ZAMKU

WHERE Wartość > 15:

W podzapytaniu zostało wykonane złączenie tablic Zamówienia i Klienci, i z tak powstałej tablicy zostały wybrane wiersze, w których wartość zamówienia była większa niż 15. Efektem działania całej instrukcji jest tablica o kolumnach Imię, Nazwisko, Wartość i Data, taka jak przedstawiona na rysunku 11.27.

Rysunek 11.27.

Wykorzystania podzapytania w klauzuli FROM


mysql> SELECT Imię, Nazwisko, Wartość, Data -> FROM

-> (SELECT * FROM Zamówienia, Klienci -> WHERE Zamówieni a.Klientld = Klienci.Id -> )

-> AS ZAHKLI -> WHERE Wartość > 15;

I Imię    |    Nazwisko    |    Wartość    |    Data    I

I Jan    I    Kowalski    I    15.88    I    2005-02-12    |

Andrzej    Nowak    22.35    2005-01-01

Andrzej I Nowak I 22.35 I 2005-02-12 I Janusz    |    Malinowski    18.48    2005-02-11    |

| Adam    |    Kowalski    |    15.26    |    2005-03-11    |

5 rows in set (0.00 sec)

Podzapytania w instrukcjach INSERT, UPDATE, DELETE

Zastosowanie podzapytań nie ogranicza się do instrukcji SELECT, mogą być one również wykorzystywane w przypadku instrukcji INSERT, UPDATE oraz DELETE. Przykładowo możemy utworzyć tabelę, która będzie przechowywała imiona i nazwiska klientów oraz wartości dokonanych przez nich zamówień. Być może będzie ona nam potrzebna tymczasowo do pobierania informacji statystycznych. Utworzymy ją za pomocą instrukcji:

CREATE TABLE Zam Tymczas(

Imię VARCHAR(45).

Nazwisko VARCHAR(45),

Wartość DECIMAL(5. 2)

Chcielibyśmy teraz wypełnić ją danymi. Przygotowywanie osobnych instrukcji INSERT dla każdego wiersza byłoby z pewnością bardzo czasochłonne, a jeśli w tabelach Klienci i Zamówienia byłoby dużo danych — wręcz niewykonalne. Dlatego też w takiej sytuacji należy posłużyć się instrukcją typu INSERT wykorzystującą odpowiednio przygotowane podzapytanie. Schematyczna postać takiego zapytania to:


Wyszukiwarka