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

Słowa kluczowe: Operator IN w SQL Przedziały liczbowe SELECT ... WHERE w SQL SELECT w SQL

Kod

SELECT imie, pesel, wiek FROM dane WHERE wiek IN (18,30)
spowoduje wybranie
A. imion, nazwisk i numerów PESEL osób w wieku poniżej 18 lat.
B. imion, numerów PESEL i wieku osób z przedziału od 18 do 30 lat.
C. imion, numerów PESEL i wieku osób w wieku równym 18 lub 30 lat.
D. imion, numerów PESEL i wieku osób posiadających powyżej 30 lat.

Pytanie z egzaminu CKE, styczeń 2015 (arkusz E.14-X-15.01).

Zapytanie SELECT imie, pesel, wiek FROM dane WHERE wiek IN (18, 30) wybiera z tabeli dane tylko trzy kolumny: imie, pesel oraz wiek. Najważniejszy jest tu warunek WHERE wiek IN (18, 30). Operator IN w SQL oznacza sprawdzenie, czy wartość z kolumny znajduje się dokładnie na podanej liście wartości. Czyli baza zwróci rekordy osób, których wiek jest równy 18 albo równy 30. Nie chodzi tu o cały przedział od 18 do 30, tylko o dwie konkretne wartości. W praktyce takie zapytanie przydaje się np. gdy chcemy znaleźć klientów z wybranych grup wiekowych, uczniów z konkretnych roczników albo produkty o wybranych statusach. Gdyby potrzebny był przedział, lepsze byłoby WHERE wiek BETWEEN 18 AND 30 albo WHERE wiek >= 18 AND wiek <= 30. Moim zdaniem operator IN jest bardzo czytelny, ale tylko wtedy, gdy pamięta się, że działa jak lista dopuszczalnych wartości. Dobra praktyka to też wybieranie tylko potrzebnych kolumn, tak jak tutaj, zamiast używać SELECT *. Przy danych typu PESEL trzeba dodatkowo pamiętać o ochronie danych osobowych i ograniczaniu dostępu tylko do osób uprawnionych.
W tym zapytaniu łatwo pomylić operator IN z warunkiem zakresu, a to dość częsty błąd przy nauce SQL. Fragment WHERE wiek IN (18, 30) nie oznacza, że mają zostać pobrane osoby od 18 do 30 lat. Oznacza on tylko tyle, że wartość w kolumnie wiek musi być jedną z wartości wpisanych w nawiasie, czyli dokładnie 18 albo dokładnie 30. Jeżeli w tabeli będzie osoba w wieku 19, 25 albo 29 lat, to nie zostanie zwrócona przez to zapytanie, mimo że mieści się w potocznym rozumieniu przedziału 18-30. Do przedziałów w SQL używa się raczej BETWEEN 18 AND 30 albo warunku wiek >= 18 AND wiek <= 30, zależnie od tego, co jest czytelniejsze w danym projekcie. Nie pasuje też interpretacja związana z osobami poniżej 18 lat, bo do tego należałoby użyć WHERE wiek < 18. Dodatkowo zapytanie nie pobiera kolumny nazwisko, więc stwierdzenie o imionach, nazwiskach i PESEL-ach też nie zgadza się z listą po SELECT. Osoby powyżej 30 lat wymagałyby warunku WHERE wiek > 30, a tutaj liczba 30 jest jedną z dopuszczonych wartości, nie granicą dolną. Z mojego doświadczenia najlepiej czytać zapytanie SQL po kawałku: najpierw jakie kolumny są wybierane, potem z jakiej tabeli, a dopiero na końcu jaki filtr nakłada WHERE. To mocno zmniejsza ryzyko takich pomyłek.

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.