Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

Łączymy korytarze Labiryntu

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.

Dwa warunki naraz

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.

Zagnieżdżone EXISTS

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 w SELECT

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

Przejdź do CodeWorlds