Poznałeś już wszystkie narzędzia Labiryntu. Czas nauczyć się składać je razem - bo prawdziwe pytania do Biblioteki rzadko mieszczą się w jednym prostym podzapytaniu.
Nic nie stoi na przeszkodzie, by w jednym zapytaniu połączyć podzapytanie skalarne z operatorem IN. Wystarczy spiąć warunki słowem
AND:1SELECT tytul
2FROM ksiazki
3WHERE cena < (SELECT AVG(cena) FROM ksiazki)
4 AND autor_id IN (SELECT id FROM autorzy WHERE kraj = 'Grecja');To zapytanie znajdzie tanie księgi greckich autorów - tańsze od średniej i napisane przez twórcę z Grecji.
Podzapytania można zagnieżdżać - jedno wewnątrz drugiego. Tak zapytamy o autorów, którzy mają książki, ale żadna z nich nie została wypożyczona:
1SELECT a.imie, a.nazwisko
2FROM autorzy AS a
3WHERE EXISTS (
4 SELECT 1 FROM ksiazki AS k
5 WHERE k.autor_id = a.id
6 AND NOT EXISTS (
7 SELECT 1 FROM wypozyczenia AS w WHERE w.ksiazka_id = k.id
8 )
9);EXISTS sprawdza, że autor ma książkę, a zagnieżdżone NOT EXISTS - że tej książki nikt nie wypożyczył.Podzapytanie skalarne można też umieścić na liście kolumn SELECT - jako pojedynczą wyliczaną wartość obok zwykłych kolumn:
1SELECT tytul, cena, (SELECT AVG(cena) FROM ksiazki) AS srednia
2FROM ksiazki;Każdy wiersz pokaże tytuł, cenę księgi i - obok - średnią cenę całej Biblioteki. To wygodny sposób, by porównać wartość z tłem, nie tracąc szczegółów.
@name