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

liczba >= 10 AND liczba <= 100 W języku SQL przedstawiony warunek jest równoważny warunkowi

liczba >= 10 AND liczba <= 100
W języku SQL przedstawiony warunek jest równoważny warunkowi
A. NOT (liczba < 10 AND liczba > 100)
B. liczba LIKE '10%'
C. liczba BETWEEN 10 AND 100
D. liczba IN (10, 100)

Pytanie z egzaminu CKE, styczeń 2024 (arkusz EE.09-SG-24.01).

Warunek liczba >= 10 AND liczba <= 100 oznacza, że wartość w kolumnie liczba ma być jednocześnie nie mniejsza niż 10 i nie większa niż 100. W SQL dokładnie do tego służy operator BETWEEN, więc zapis liczba BETWEEN 10 AND 100 jest równoważny temu warunkowi. Ważna rzecz: BETWEEN jest domknięty z obu stron, czyli obejmuje wartości graniczne. Pasują więc 10, 11, 50, 100, ale nie pasuje 9 ani 101. To często pojawia się w praktyce, np. przy wyszukiwaniu produktów w zakresie cenowym, filtrowaniu wieku użytkowników, punktów egzaminacyjnych albo dat od jednego dnia do drugiego. Z mojego doświadczenia BETWEEN poprawia czytelność zapytań, szczególnie gdy filtr dotyczy zakresu. W dobrym stylu SQL warto pisać warunki tak, żeby były od razu zrozumiałe dla osoby czytającej zapytanie. Trzeba tylko pamiętać, że przy wartościach NULL wynik porównania nie jest TRUE, tylko UNKNOWN, więc taki rekord nie przejdzie zwykłego filtra WHERE bez dodatkowej obsługi NULL.
W tym pytaniu najłatwiej pomylić ogólne znaczenie zakresu z innymi operatorami SQL, które działają zupełnie inaczej. Zapis liczba IN (10, 100) nie oznacza przedziału od 10 do 100, tylko sprawdza, czy wartość jest dokładnie jedną z podanych wartości. Taki warunek zaakceptuje 10 oraz 100, ale odrzuci na przykład 50, mimo że 50 spełnia warunek liczba >= 10 AND liczba <= 100. To typowy błąd, bo nawias z dwiema liczbami wygląda trochę jak zakres, ale w SQL lista IN jest listą konkretnych dopuszczalnych wartości, a nie przedziałem.

Z kolei NOT (liczba < 10 AND liczba > 100) na pierwszy rzut oka może wyglądać jak próba zaprzeczenia wartości spoza zakresu, ale logicznie ten zapis jest problematyczny. Jedna liczba nie może być równocześnie mniejsza niż 10 i większa niż 100, więc środek nawiasu jest zawsze fałszywy dla zwykłych wartości liczbowych. Po zaprzeczeniu wychodzi warunek praktycznie zawsze prawdziwy, czyli przepuszcza także 5 albo 150. Poprawnym zaprzeczeniem wartości spoza zakresu byłoby raczej NOT (liczba < 10 OR liczba > 100), co zgodnie z prawami De Morgana daje liczba >= 10 AND liczba <= 100. Moim zdaniem to dobry przykład, że przy SQL warto bardzo uważać na AND i OR, bo jedna zamiana zmienia sens całego filtra.

Operator LIKE '10%' także nie pasuje do tego zadania. LIKE służy głównie do dopasowywania wzorców tekstowych, np. nazw zaczynających się od określonych znaków. Wzorzec '10%' oznacza tekst zaczynający się od 10, na przykład 10, 100, 1000 albo 10abc, zależnie od typu danych i konwersji w bazie. To nie jest sprawdzanie liczbowego zakresu. W profesjonalnych zapytaniach do baz danych warto dobierać operator do typu danych: dla liczb używa się porównań, BETWEEN albo funkcji liczbowych, a dla tekstu LIKE, ILIKE lub wyrażeń regularnych, jeśli dana baza je obsługuje.

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.