Podzapytania: Operatory EXISTS, ANY, SOME, ALL w SQL cz. V
Ćwiczenia
Exists
Pobierzmy z bazy danych informacje o miastach, w których nie mieszkają żadni pracownicy:
SELECT Miasto FROM miastoZamieszkania AS mz WHERE NOT EXISTS (SELECT * FROM pracownicy WHERE mz.MiastoZamieszkaniaID = miasto);
Rezultat:
Miasto |
Londyn |
Oczywiście w tym ćwiczeniu musieliśmy użyć przeczenia (NOT
), NOT EXISTS
jest prawdziwe (zwraca true
) jeśli nie zostanie zwrócony przez podzapytanie żaden rekord, a właśnie o to nam chodziło w tej kwerendzie.
Informacje o pracownikach nie mieszkających w Krakowie:
SELECT imie, nazwisko FROM pracownicy WHERE EXISTS (SELECT * FROM miastoZamieszkania WHERE pracownicy.miasto = miastoZamieszkaniaID AND miasto <> 'Kraków')
Rezultat:
Imie | Nazwisko |
Jakub | Wawrzyniak |
Michał | Jakubiak |
ANY, SOME
UWAGA: Omawiany materiał działa na bazach danych firmy Microsoft.
Operator ANY
/SOME
jest prawdziwy (zwraca true
) jeśli którekolwiek ze zwróconych przez podzapytanie danych spełni poprzedzający go warunek logiczny. Jak pisałem na wstępie operator ten sprawdza wszystkie rekordy.
SELECT imie, nazwisko FROM pracownicy WHERE 'Madryt' <> ANY (SELECT miasto FROM miastoZamieszkania);
Rezultat:
Imię | Nazwisko |
Jan | Kowalski |
Adam | Adamiak |
Jakub | Wawrzyniak |
Michał | Jakubiak |
Oczywiście ANY
możemy zastąpić operatorem SOME
.
ALL
UWAGA: Omawiany materiał działa na bazach danych firmy Microsoft.
Operator ALL
działa w zasadzie tak samo jak ANY/SOME
z tym wyjątkiem, że sprawdza wszystkie dane. Wszystkie zwrócone przez podzapytanie rekordy muszą spełniać podany wcześniej warunek logiczny.
SELECT imie, nazwisko FROM pracownicy WHERE 'Londyn' <> ALL (SELECT miasto FROM miastoZamieszkania);
Rezultat:
Nie otrzymamy żadnego wyniku. 0 rekordów.
W tabeli miastoZamieszkania
znajduje się miasto „Londyn” dlatego warunek logiczny nie został spełniony.
Strony: 1 2
Polecam barco ten poradnik bardzo mi pomugł i dostałem dwujke :)