Rozdział 11. ♦ Więcej o SQL 331
w sekcji „Agregacja danych”. Wykorzystajmy podzapytanie proste do stwierdzenia, jaki jest identyfikator towaru, na który złożone zostało zamówienie o najniższej wartości. Wykonamy w tym celu instrukcję:
SELECT Towarld FROM Zamówienia WHERE Wartość =
(SELECT Min(Wartość) FROM Zamówienia);
Efekt działania takiej instrukcji jest widoczny na rysunku 11.23. Działanie jest następujące: najpierw wykonywane jest zapytanie:
SELECT Min(Wartosc) FROM Zamówienia
a jego wynik, wartość 2,28, jest wstawiany do warunku klauzuli WHERE. Następnie wykonywane jest zapytanie zewnętrzne, które tym samym będzie miało postać:
SELECT Towarld FROM Zamówienia WHERE Wartość - 2.28
Rysunek 11.23. mysq1> SELECT Towarld
Wykorzystanie -> FROM Zamówienia
... -> WHERE Wartość =
podzapytama prostego _> (select Min (Wartość) FROM Zamówienia);
I Towarld I lrowin set CO.00 sec)
Ostatecznie wynikiem jest tabela zawierająca identyfikator towaru o wartości 4.
Gdybyśmy chcieli dodatkowo otrzymać również nazwę towaru, na który zostało złożone zamówienie o najniższej wartości, musielibyśmy dokonać złączenia tabel Zamówi eni a i Towary. Podzapytanie musiałoby być w takim wypadku jednym z elementów warunku złożonego w klauzuli WHERE. Instrukcja realizująca tak postawione zadanie będzie miała następującą postać:
SELECT Towarld. Nazwa FROM Zamówienia. Towary WHERE Wartość =
(SELECT Min(Wartosc) FROM Zamówienia)
AND Towary.Id - Zamówienia.Towarld:
Efekt jej działania został przedstawiony na rysunku 11.24.
Rysunek 11.24.
Podzapytanie jako element warunku złożonego w klauzuli WHERE
mysq1> SELECT Towarld, Nazwa -> FROM Zamówienia, Towary -> WHERE wartość =
-> (SELECT MinCWartosc) FROM Zamówienia) -> AND Towary.Id = Zamówienia.Towarld;
I Towarld 1 Nazwa |
I 4 | Płaskowniki |