Przejdź do głównej treści

Kwalifikacja: INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych Algorytmy i podstawy informatyki

Słowa kluczowe: Kwerenda bazy danych Operatory logiczne w SQL SELECT w SQL WHERE w SQL

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.

Wymagane logowanie

Ocenianie trudności pytań jest dostępne tylko dla zalogowanych użytkowników. Zaloguj się, aby skorzystać z pełni możliwości platformy.

Twoja ocena pomoże innym uczniom w przygotowaniu do egzaminu, a Tobie pozwoli na dostęp do spersonalizowanych statystyk.

Zgłoś błąd w pytaniu

Rozwiń sekcję i zmień pole, którego dotyczy błąd. Wysłane zostaną tylko zmienione sekcje.

Błędna kwalifikacja
Błąd w treści pytania
Błąd w treści odpowiedzi
Błąd w obrazie
Dane kontaktowe (opcjonalnie)
Podaj email, jeśli chcesz otrzymać informację o rozpatrzeniu zgłoszenia.