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

Kod SELECT imie, pesel, wiek FROM dane WHERE wiek NOT IN (18,30) wybiera

A. imiona, nazwiska oraz numery PESEL osób w wieku innym niż 18 i 30 lat
B. imiona, numery PESEL oraz wiek osób w wieku innym niż 18 i 30 lat
C. imiona, numery PESEL oraz wiek osób spoza przedziału od 18 do 30 lat
D. imiona, numery PESEL oraz wiek osób w wieku dokładnie 18 lub 30 lat
Zapytanie SELECT imie, pesel, wiek FROM dane WHERE wiek NOT IN (18, 30) zwraca dokładnie trzy kolumny: imie, pesel oraz wiek z tabeli dane, ale tylko dla tych rekordów, w których wartość pola wiek nie jest równa ani 18, ani 30. Operator NOT IN oznacza w SQL: nie należy do podanego zbioru wartości. W praktyce warunek wiek NOT IN (18, 30) działa podobnie jak wiek <> 18 AND wiek <> 30, o ile pole wiek nie ma wartości NULL. To ważny szczegół, bo rekordy z wiekiem NULL też nie przejdą tego warunku, ponieważ SQL traktuje porównanie z NULL jako wynik nieznany. Moim zdaniem to jedno z tych miejsc, gdzie warto czytać zapytanie bardzo dosłownie: SELECT mówi jakie kolumny pobieramy, FROM skąd, a WHERE filtruje wiersze. Takie filtrowanie przydaje się np. przy raportach, gdy chcemy wykluczyć konkretne grupy wiekowe, statusy zamówień albo wybrane identyfikatory produktów. Dobrą praktyką jest też pilnowanie, żeby nazwy kolumn w opisie wyniku zgadzały się z tym, co faktycznie jest po SELECT, bo tutaj nie ma nazwiska, jest PESEL i wiek.
W tym zapytaniu łatwo pomylić znaczenie operatora IN z NOT IN albo potraktować wartości w nawiasie jako granice przedziału. SQL jednak nie czyta zapisu (18, 30) jako zakresu od 18 do 30. To jest po prostu lista dwóch konkretnych wartości: 18 oraz 30. Gdyby chodziło o przedział, zwykle użyto by warunku BETWEEN 18 AND 30, ewentualnie porównań typu wiek >= 18 AND wiek <= 30. Dlatego opis mówiący o osobach spoza przedziału od 18 do 30 lat jest nieprecyzyjny i merytorycznie zły, bo osoba w wieku 19, 20 czy 29 lat zostanie wybrana przez to zapytanie, ponieważ jej wiek nie jest równy 18 ani 30. Z mojego doświadczenia to częsty błąd na początku nauki SQL: nawiasy kojarzą się z zakresem, a w IN oznaczają zbiór wartości do sprawdzenia. Niepoprawne jest też stwierdzenie, że zapytanie wybiera osoby w wieku dokładnie 18 lub 30 lat, bo wtedy powinno być wiek IN (18, 30), bez słowa NOT. Słowo NOT odwraca warunek logiczny. Trzeba również uważać na listę kolumn po SELECT. Zapytanie pobiera imie, pesel i wiek, a nie nazwisko. Jeśli w opisie wyniku pojawia się nazwisko, którego nie ma w SELECT, to taki opis nie zgadza się ze strukturą zapytania. W pracy z bazami danych takie detale są naprawdę istotne, bo raport może wyglądać poprawnie na oko, ale zawierać zupełnie inny zestaw danych niż zakładaliśmy.

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.