Klauzula WHERE i operatory OR i AND

 

Artykuł ten jest częścią serii Od 0 do TSQL którą znajdziesz tutaj.

Dziś w ramach kursu Od 0 do TSQL zajmiemy się operatorami porównania oraz klauzulą filtrującą WHERE. W poprzedniej części nauczyliśmy się wyświetlać określone dane z pojedynczej tabeli, jednak w większości przypadków pobranie wszystkich wpisów tabeli nie jest dla nas wygodne ze względu m.in na ilość wierszy. Z pomocą przychodzi nam tutaj słowo kluczowe WHERE pozwalające pobrać dane z tabeli na podstawie warunków, które jawnie wskażemy. Do przedstawienia możliwości tej klauzuli wykorzystamy znaną z poprzedniego artykułu tabelę Employees, podstawowa składnia SQL z wykorzystaniem WHERE została przedstawiona poniżej.

gdzie w miejscu expressions podajemy warunki filtracji. Np. Jeżeli chcemy wyświetlić Dane pracowników o nazwisku Fuller powinniśmy użyć następującego zapytania.

W rezultacie otrzymamy pożądany wynik.

Result

Oczywiście do dyspozycji mamy całą gamę operatorów porównania tj.:

  • =  równy
  • <> nierówny
  • !=  nierówny
  • > większy niż
  • < mniejszy niż
  • >= większy równy
  • <= mniejszy równy

Podążając tym tokiem myślenia napiszmy zapytanie wyświetlające wszystkich pracowników, którzy nie mają na nazwisko Fuller:

i rezultat:

Result

Warty odnotowania jest fakt, iż pole którego używamy do filtracji (umieszczamy w klauzuli WHERE) nie musi być wyświetlane w sekcji SELECT – tak więc poniższe zapytanie jest jak najbardziej poprawne i zwróci prawidłowy wynik.

Result

Oczywiście możemy łączyć warunki w klauzuli WHERE. Możemy to zrobić przy pomocy operatorów logicznych. Podstawowe operatory logiczne to:

  • AND
  • OR

Przykładowo jeżeli chcemy wyświetlić tych pracowników, którzy mieszkają w Londynie i zajmują stanowisko Sales Representative napiszemy poniższe zapytanie. Kluczowy w powyższym zdaniu jest spójnik “i” ponieważ wyświetlone zostaną tylko te rekordy tabeli, które spełniają oba warunki.

Result

Jeżeli w powyższym zapytaniu zamienimy operator AND na OR wynik będzie odmienny.

Result

W wyniku tego zapytania otrzymaliśmy wszystkich pracowników, którzy zajmują stanowisko ‘Sales Representative’ lub mieszkają w Londynie. Dzięki tym bardzo prostym operatorom możemy tworzyć nawet bardzo złożone warunki. Przy jednoczesnym wykorzystaniu obu operatorów warto pamiętać, że AND ma większy priorytet niż OR – najlepiej ten fakt będzie zobrazować na przykładzie poniższego zapytania.

Zapytanie to zwróci tych którzy pracują na stanowisku Sales Representative i mieszkają w Londynie oraz tych, którzy mają na nazwisko Callahan niezależnie od tego gdzie mieszkają i jakie stanowisko zajmują.

Result

Może to być troszeczkę mylące i niektórzy z Was mogli spodziewać się w rezultacie pracowników którzy zajmują stanowisko Sales Representative i mieszkają w Londynie lub mają na nazwisko Callahan. Oczywiście za pomocą powyższego zapytania rezultat ten nie jest możliwy do osiągnięcia ze względu na wyższy priorytet operatora AND nad operatorem OR. Możemy jednak tę logikę zmienić wprowadzając nawiasy okrągłe, które w języku TSQL pełnią taką samą rolę jak w matematyce – zmieniają kolejność wykonywania działań. Tak więc poniższe zapytanie ma zmieniony porządek wykonywania i zwróci opisywany przypadek.

Result

Tak więc polecam stosować nawiasy zamiast polegać na priorytecie AND i OR aby uniknąć błędów, które w rozbudowanym zapytaniu mogą być trudne do wykrycia.

Dzisiejszy artykuł wprowadził nas w tematykę filtrowania rezultatów TSQL, którą będziemy kontynuować w następnym epizodzie – ZAPRASZAM.

Spis dostępnych artykułów w ramach serii znajdziesz tutaj.

Follow me

Adrian Chodkowski

SQL geek, Data enthusiast, Consultant & Developer
Adrian Chodkowski
Follow me

3 Comments

  1. AvatarPiotr

    Dzięki za artykuł, jak widać diabeł tkwi w szczegółach (priorytetowanie operatorów).
    Czy można zatem przyjąć, że cały fragment warunku AND dla lepszego zrozumienia zawsze można otaczać nawiasami i tak patrzeć na zestaw warunków?

    Reply
  2. Adrian ChodkowskiAdrian Chodkowski (Post author)

    @Piotr ja dla przykładu jeżeli jednocześnie używam AND i OR to zawsze stosuje nawias – dla pewności i wygody 🙂

    Reply
    1. AvatarPiotr Ziuziański

      Ja też zawsze używam nawiasów – przynajmniej jestem pewny na 100% co się dzieje 🙂

      Reply

Leave a Comment

Your email address will not be published. Required fields are marked *