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

Podzapytanie z operatorem IN

Co zrobić, gdy podzapytanie zwraca wiele wierszy? Wtedy nie porównamy ich pojedynczym

=
. Z pomocą przychodzi operator IN, który sprawdza, czy wartość znajduje się na liście zwróconej przez podzapytanie.

Wartość na liście

1SELECT tytul
2FROM ksiazki
3WHERE autor_id IN (SELECT id FROM autorzy WHERE kraj = 'Polska');

Najpierw podzapytanie zwraca listę

id
wszystkich autorów z Polski. Następnie zapytanie zewnętrzne wybiera te książki, których
autor_id
znajduje się na tej liście. W ten sposób jednym zapytaniem łączymy dwa regały:
ksiazki
i
autorzy
.

To czytelniejsze niż łączenie ręczne

Bez podzapytania musielibyśmy najpierw spisać

id
polskich autorów, a potem ręcznie wkleić je do zapytania:

1SELECT tytul FROM ksiazki WHERE autor_id IN (1, 4, 7);

Podzapytanie robi to za nas - i samo aktualizuje listę, gdy w Bibliotece przybywa autorów.

NOT IN

Operator

NOT IN
działa odwrotnie - wybiera wiersze, których wartość nie znajduje się na liście:

1SELECT tytul
2FROM ksiazki
3WHERE kategoria_id NOT IN (SELECT id FROM kategorie WHERE nazwa = 'Poezja');

Tak odnajdziemy wszystkie księgi spoza działu poezji.

@name

Przejdź do CodeWorlds