Źródło: Arkusze CKE
W bazie danych sklepu internetowego, w tabeli klienci znajdują się między innymi pola całkowite: punkty, liczbaZakupow oraz pole ostatnieZakupy typu DATE. Klauzula WHERE do kwerendy wybierającej dane klientów, którzy mają więcej niż 3000 punktów albo wykonali zakupy więcej niż 100 razy, a ostatnie zakupy wykonali co najmniej w roku 2022 ma postać
Warianty odpowiedzi
-
A
A. WHERE punkty > 3000 OR liczbaZakupow > 100 OR ostatnieZakupy >= '2022-01-01'
-
B
B. WHERE punkty > 3000 AND liczbaZakupow > 100 OR ostatnieZakupy >= '2022-01-01'
-
C
C. WHERE (punkty > 3000 OR liczbaZakupow > 100) AND ostatnieZakupy >= '2022-01'
-
D
D. WHERE punkty > 3000 AND liczbaZakupow > 100 AND ostatnieZakupy >= '2022-01-01'
Wyjaśnienie
W SQL kolejność wykonywania operatorów logicznych ma kluczowe znaczenie. Operator AND ma wyższy priorytet niż OR, co oznacza, że bez użycia nawiasów baza danych najpierw połączyłaby warunek liczby zakupów z datą ostatnich zakupów.
W naszym przypadku chcemy wyselekcjonować klientów, którzy spełniają przynajmniej jeden z dwóch warunków (dużo punktów LUB dużo zakupów), ale jednocześnie dla obu tych grup obowiązuje ten sam warunek dotyczący roku 2022.
Dlatego całą alternatywę musimy zamknąć w nawiasie: (punkty > 3000 OR liczbaZakupow > 100). Dopiero po tym nawiasie dopisujemy operator AND wraz z warunkiem daty. Tylko taka konstrukcja gwarantuje poprawną logikę zapytania.