Wypisz personalia wszystkich czytelników, którzy mieszkają w tej samej miejscowości, co Jan Kowalski1
Możemy to rozwiązać „na raty” -jeśli siedzimy przy bazie danych i chcemy po prostu się tego dowiedzieć, sprawdźmy najpierw, gdzie Janek mieszka:
SELECT MIASTO FROM CZYTELNIK WHERE IMIĘ = 'Jan'
AND NAZWISKO = 'Kowalski'
Dowiemy się dzięki temu skąd czytelników będziemy szukać:
Miasto
Warszawa
Kolejnym krokiem jest więc znalezienie wszystkich Warszawiaków:
SELECT IMIĘ, NAZWISKO |
FROM CZYTELNIK
WHERE MIASTO = 'Warszawa'
Imię Nazwisko
Piotr Modliński Jan Kowalski
Anna Iksińska Michał Kliczek Katarzyna Kolorado-Piłeczka Konrad Kielonek Bogusław Aureola Zdzisław Krecina
Nie zawsze jednak tego typu metoda jest najlepsza - może zdarzyć się, że będziemy potrzebowali zapisać pojedyncze zapytanie opisujące to, czego szukamy. Wówczas musimy skorzystać z tzw. podzapytania - jedno zapytanie będzie wewnątrz innego; w naszym przykładzie zamiast jawnie pisać nazwę miejscowości w drugim zapytaniu, wstawimy po prostu pierwsze2:
SELECT IMIĘ, NAZWISKO FROM CZYTELNIK
WHERE MIASTO = (SELECT MIASTO FROM CZYTELNIK WHERE IMIĘ = 'Jan'
AND NAZWISKO = 'Kowalski'
LIMIT 1)
Wynik działania jest dokładnie taki sam, jak przedstawiony w tabeli wyżej, ale mechanizm jest o wiele bardziej elastyczny. Nic nie stoi oczywiście na przeszkodzie, aby w podzapytaniu wystąpiło kolejne, bardziej zagnieżdżone podzapytanie...
Zakładamy tu, że w bazie jest tylko jeden Jan Kowalski!
Dopisana klauzula LIMIT 1 w podzapytaniu nie będzie miała żadnego wpływu na wykonanie zapytania jeśli mamy w bazie tylko jednego Jana Kowalskiego. Jeśli będzie ich więcej, wybrany zostanie tylko jeden, gdyż inaczej będzie błąd składniowy - w takim podzapytaniu musi być pojedyncza wartość. W dalszej części zastanowimy się co zrobić, jeśli będzie kilku Jasiów Kowalskich.