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: Bazy danych Algorytmy i podstawy informatyki

Z bazy danych należy zwrócić zapytaniem SQL nazwiska pracowników, którzy są kierownikami, a ich pensja znajduje się w przedziale jednostronnie domkniętym (3000, 4000>. Która z klauzul bada ten warunek?

A.
WHERE kierownik = true OR pensja > 3000 OR pensja <= 4000;
B.
WHERE kierownik = true AND pensja => 3000 AND pensja <= 4000;
C.
WHERE kierownik = true AND pensja > 3000 AND pensja <= 4000;
D.
WHERE kierownik = true AND pensja => 3000 OR pensja < 4000;

Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).

Warunek jest zapisany właściwie, bo dokładnie odwzorowuje treść zadania: pracownik musi być kierownikiem oraz jego pensja ma należeć do przedziału jednostronnie domkniętego (3000, 4000>. Taki zapis matematyczny oznacza: więcej niż 3000, ale maksymalnie 4000, czyli w SQL: pensja > 3000 AND pensja <= 4000. Do tego dochodzi warunek kierownik = true, więc wszystkie trzy warunki muszą być spełnione jednocześnie. Dlatego użycie operatora AND jest tutaj kluczowe. W praktyce taka klauzula WHERE odfiltruje np. kierownika z pensją 3500 albo 4000, ale nie zwróci kierownika z pensją 3000, bo lewy koniec przedziału jest otwarty. Moim zdaniem to bardzo dobre ćwiczenie, bo pokazuje różnicę między zwykłym porównaniem a precyzyjnym warunkiem zakresu. W SQL trzeba uważać też na BETWEEN, ponieważ BETWEEN 3000 AND 4000 obejmuje oba końce przedziału, więc tutaj nie pasowałby idealnie. Dobra praktyka to zapisywać takie warunki jasno i bez skrótów, szczególnie gdy później ktoś inny będzie czytał zapytanie w projekcie bazodanowym.
Najczęstszy problem w tym pytaniu polega na pomieszaniu znaczenia operatorów logicznych i operatorów porównania. Warunek z OR działa zupełnie inaczej niż wymagane filtrowanie jednoczesne. Jeśli użyje się OR między warunkami, baza danych może zwrócić rekord, który spełnia tylko jeden fragment, na przykład pracownika niebędącego kierownikiem, ale z pensją poniżej lub równą 4000. To już nie jest zgodne z poleceniem, bo polecenie mówi o pracownikach, którzy są kierownikami i jednocześnie mieszczą się w podanym zakresie pensji. W SQL operator AND zawęża wynik, a OR go rozszerza, i to jest jedna z podstawowych rzeczy przy budowie klauzuli WHERE. Pojawia się też typowy błąd składniowy: zapis => nie jest poprawnym operatorem większe lub równe w SQL. Poprawnie stosuje się >=, a w tym konkretnym zadaniu nawet nie >= 3000, tylko > 3000, bo przedział (3000, 4000> nie zawiera wartości 3000. Z kolei prawy koniec jest domknięty, więc musi być <= 4000, a nie < 4000. Z mojego doświadczenia takie pomyłki biorą się często z szybkiego czytania zapisu matematycznego albo z założenia, że zakres zawsze jest obustronnie domknięty. W zapytaniach SQL warto czytać warunek jak zdanie: kierownik jest prawdą oraz pensja większa od 3000 oraz pensja nie większa niż 4000. Wtedy od razu widać, że wszystkie części muszą być połączone operatorem AND.

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.