Przejdź do głównej treści
  1. Strona główna
  2. Technik informatyk
  3. INF.03
  4. Pytanie

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

Zawód: Technik informatyk, Technik programista

Kategorie: Programowanie webowe Bazy danych

Tabela samochody zawiera poniższe rekordy.
idklasa_idmarkamodelrocznik
11fordka2017
22seattoledo2016
33opelzafira2018
42fiat500X2018
53opelinsignia2017
Po wykonaniu podanego zapytania SQL, jakie dane zostaną zwrócone?
SELECT model FROM samochody WHERE rocznik > 2017 AND marka = "opel";

Zapytanie zwraca wyłącznie wartość z kolumny model dla tych rekordów, które spełniają oba warunki jednocześnie. Warunek rocznik > 2017 oznacza, że interesują nas tylko samochody nowsze niż 2017, czyli z rocznikiem 2018 i późniejsze. W tabeli są dwa auta z rocznika 2018: opel zafira oraz fiat 500X. Drugi warunek, marka = 'opel', odrzuca fiata, więc zostaje tylko rekord: marka opel, model zafira, rocznik 2018. Ponieważ w części SELECT podano tylko kolumnę model, wynik nie zawiera marki ani rocznika, tylko sam tekst: zafira. To ważna rzecz w SQL: WHERE decyduje, które wiersze przejdą filtr, a SELECT decyduje, które kolumny z tych wierszy będą pokazane. Moim zdaniem to jedno z najczęstszych miejsc, gdzie łatwo się pomylić na początku nauki baz danych. W praktyce takie zapytania stosuje się np. w katalogu samochodów, sklepie internetowym albo panelu administracyjnym, gdy chcemy znaleźć konkretne rekordy według kilku kryteriów. Dobrą praktyką w standardowym SQL jest zapisywanie tekstów w apostrofach, czyli marka = 'opel', bo cudzysłów w niektórych systemach baz danych może oznaczać identyfikator kolumny lub tabeli.
W tym zapytaniu trzeba bardzo dokładnie rozdzielić dwie sprawy: filtrowanie rekordów i wybór kolumn do wyświetlenia. Warunek WHERE rocznik > 2017 AND marka = 'opel' nie oznacza, że należy pokazać wszystkie ople z tabeli. Operator AND wymaga spełnienia obu warunków naraz, więc opel insignia z rocznika 2017 odpada, bo 2017 nie jest większe od 2017. To drobny detal, ale w SQL znak > jest ścisły, czyli nie obejmuje wartości równej. Gdyby miało przejść także 2017, trzeba by użyć rocznik >= 2017. Częstym błędem jest też dopisywanie do wyniku marki, na przykład traktowanie wyniku jako „opel zafira”. Tymczasem SELECT model jasno mówi, że zwracana jest tylko kolumna model, bez kolumny marka. Baza danych nie dopisuje automatycznie innych pól tylko dlatego, że były użyte w warunku WHERE. Podobnie wynik „zafira; insignia” bierze się zwykle z zauważenia marki opel, ale pominięcia ograniczenia na rocznik. Natomiast „opel zafira; opel insignia” miesza oba błędy naraz: pokazuje zbyt wiele rekordów oraz zbyt wiele kolumn. Z mojego doświadczenia najlepiej analizować takie zapytanie etapami: najpierw odfiltrować wiersze po roczniku, potem po marce, a dopiero na końcu spojrzeć, co jest w SELECT. Tak działa to też w realnych aplikacjach, np. przy wyszukiwarkach ofert, raportach i panelach administracyjnych.

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. Wyślemy 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.