Opis słowny zawiera dwa poziomy warunków:
- pierwszy poziom: klient ma więcej niż 3000 punktów albo wykonał więcej niż 100 zakupów;
- drugi poziom: ostatnie zakupy były co najmniej w roku 2022 (czyli data nie jest wcześniejsza niż początek 2022).
Dlatego poprawna logika to: (A OR B) AND C. W praktyce zapisuje się to z nawiasami:
WHERE (punkty > 3000 OR liczbaZakupow > 100) AND ostatnieZakupy >= '2022-01'
Nawiasy są istotne, ponieważ w SQL operator AND ma wyższy priorytet niż OR. Bez nawiasów silnik mógłby zinterpretować warunek jako A OR (B AND C), a to daje inny zbiór wyników niż wymagany w treści.
Dlaczego pozostałe propozycje są błędne:
- Łączenie punkty > 3000 AND liczbaZakupow > 100 wymaga spełnienia jednocześnie obu kryteriów aktywności, mimo że w treści jest alternatywa ("albo"). To zbyt zawęża wynik.
- Użycie OR pomiędzy wszystkimi trzema warunkami powoduje, że wystarczy spełnić tylko warunek daty, aby rekord się pojawił. Treść wymaga natomiast, aby warunek daty był spełniony zawsze, razem z jednym z warunków aktywności.
- Zapis z trzema operatorami AND wymusza spełnienie wszystkich kryteriów, co jest sprzeczne z częścią "więcej niż 3000 punktów albo więcej niż 100 zakupów".
Wskazówka egzaminacyjna: najpierw zamień opis na symbole (A, B, C), ułóż formułę logiczną (tu: (A OR B) AND C), a dopiero potem przepisz na SQL. To minimalizuje ryzyko błędu priorytetu AND/OR.