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 :)