Tabela Pacjenci ma pola: imie, nazwisko, wiek, lekarz_id. Aby zestawić raport zawierający wyłącznie imiona i nazwiska pacjentów, którzy mają co najmniej 18 lat lub są zapisani do lekarza o id równym 6, można posłużyć się kwerendą SQL
A.
SELECT imie, nazwisko FROM Pacjenci WHERE wiek >= 18 AND lekarz_id = 6
B.
SELECT imie, nazwisko FROM Pacjenci WHERE wiek > 18 OR lekarz_id = 6
C.
SELECT imie, nazwisko FROM Pacjenci WHERE wiek >= 18 OR lekarz_id = 6
D.
SELECT imie, nazwisko WHERE wiek >= 18 OR lekarz_id = 6
Wybrana kwerenda jest poprawna, bo spełnia wszystkie warunki z treści zadania: pobiera tylko kolumny imie i nazwisko, korzysta z tabeli Pacjenci oraz filtruje rekordy warunkiem wiek >= 18 OR lekarz_id = 6. Konstrukcja SELECT imie, nazwisko FROM Pacjenci oznacza, że w raporcie nie pojawią się pola wiek ani lekarz_id, czyli wynik będzie zawierał wyłącznie dane wymagane w poleceniu. To jest dobra praktyka w SQL: nie pobieramy niepotrzebnych kolumn, bo raport jest czytelniejszy, a baza ma mniej danych do przesłania. Warunek WHERE ogranicza rekordy do pacjentów pełnoletnich lub przypisanych do lekarza o identyfikatorze 6. Operator OR jest tu kluczowy, bo wystarczy spełnienie jednego z warunków. Pacjent w wieku 20 lat przejdzie filtr nawet wtedy, gdy ma lekarz_id = 3, a pacjent w wieku 12 lat też przejdzie, jeśli ma lekarz_id = 6. Moim zdaniem to dobry przykład na to, że w SQL trzeba czytać treść zadania bardzo dosłownie, szczególnie słowa „lub”, „oraz”, „co najmniej”.
W tym zadaniu łatwo pomylić składnię SQL z samą logiką warunku, a obie rzeczy muszą być poprawne jednocześnie. Zapytanie SELECT nie może normalnie działać bez wskazania źródła danych, czyli klauzuli FROM Pacjenci. Samo podanie SELECT imie, nazwisko WHERE ... nie mówi silnikowi bazy danych, z której tabeli ma wziąć kolumny. W praktyce większość systemów bazodanowych zgłosiłaby błąd składni albo błąd dotyczący nieznanych kolumn. To taki typowy skrót myślowy: wiemy, że pytanie dotyczy tabeli Pacjenci, ale SQL tego „sam z kontekstu” nie zakłada. Druga pułapka dotyczy operatora porównania. W poleceniu jest „co najmniej 18 lat”, więc trzeba użyć wiek >= 18. Warunek wiek > 18 pominąłby pacjentów dokładnie osiemnastoletnich, a oni też powinni znaleźć się w raporcie. Z mojego doświadczenia to bardzo częsty błąd przy progach wiekowych, cenach minimalnych albo limitach punktów. Jeszcze inna sprawa to AND zamiast OR. AND wymaga spełnienia obu warunków naraz: pacjent musiałby mieć minimum 18 lat i jednocześnie być zapisany do lekarza o id 6. Treść mówi jednak „lub”, więc wystarczy jeden warunek. W bazach danych operatory logiczne nie są ozdobnikiem, tylko dokładnie określają zbiór rekordów w wyniku kwerendy.