KWALIFIKACJA INF3 - STYCZEŃ 2017

PYTANIE NR 19.
Dana jest tabela książki z polami: tytuł, autor (typu tekstowego), cena (typu liczbowego). Aby kwerenda SELECT zwróciła tylko tytuły, dla których cena jest mniejsza od 50 zł, należy zapisać:
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawne zapytanie musi zwracać tylko kolumnę tytułu, więc w części SELECT podaje się tytul, a nie *. Dodatkowo filtr jest warunkiem w WHERE: cena < 50 (dla pola liczbowego bez cudzysłowów i bez dopisku "zł"). To zapewnia zwrócenie wyłącznie tytułów tańszych niż 50.

Pełne wyjaśnienie:

W SQL zapytanie typu SELECT składa się (w podstawowej wersji) z trzech kluczowych elementów:

  • SELECT – wskazuje, jakie kolumny mają znaleźć się w wyniku (tzw. projekcja),
  • FROM – wskazuje tabelę, z której pobierane są dane,
  • WHERE – określa warunek filtrowania wierszy (tzw. selekcja rekordów).

Odpowiedź "SELECT tytul FROM ksiazki WHERE cena < 50;" jest poprawna, ponieważ:

  • zwraca tylko kolumnę tytul (zgodnie z treścią: "tylko tytuły"),
  • filtruje rekordy warunkiem cena < 50, czyli wybiera książki tańsze niż 50,
  • porównuje wartości liczbowe jako liczby (50 bez cudzysłowów i bez jednostki), co odpowiada polu "cena (typu liczbowego)".

Dlaczego pozostałe propozycje są niepoprawne?

  • "SELECT * FROM ksiazki WHERE cena < 50;" – warunek jest dobry, ale zwraca wszystkie kolumny (tytuł, autor, cena), a pytanie wymaga zwrócenia tylko tytułów.
  • "SELECT tytul FROM ksiazki WHERE cena > '50 zł';" – używa operatora > (odwrotny sens niż "mniejsza od 50") oraz porównuje do tekstu '50 zł', co nie pasuje do pola liczbowego.
  • "SELECT ksiazki FROM tytul WHERE cena < '50 zł';" – ma błędną składnię i logikę: miesza nazwy tabel/kolumn (w SELECT powinny być kolumny, a w FROM tabela), a dodatkowo porównuje liczbę do tekstu z jednostką.

Wskazówka egzaminacyjna: zawsze sprawdź dwa elementy naraz: co zwraca SELECT (jakie kolumny) oraz co filtruje WHERE (jakie wiersze). Błąd w jednym z nich dyskwalifikuje zapytanie, nawet jeśli drugi fragment wygląda poprawnie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Klauzula WHERE filtruje wiersze zwracane przez zapytanie. Oznacza to, że najpierw wybierane są rekordy z tabeli, a potem pozostają tylko te, które spełniają warunek (np. cena < 50). Bez WHERE zapytanie zwróciłoby wszystkie rekordy.
Wystarczy w części SELECT podać nazwę kolumny, np. SELECT tytul, zamiast używać gwiazdki. Zapis SELECT * zwraca wszystkie kolumny, co często jest zbędne w aplikacjach i na egzaminie bywa uznawane za błąd względem treści zadania.
Jeśli kolumna cena ma typ liczbowy, to w bazie przechowywana jest jako liczba (np. 50), a nie tekst z jednostką. Warunek '50 zł' to tekst i może powodować błąd lub niepoprawne porównania. Jednostkę waluty zwykle dodaje się dopiero na etapie prezentacji w aplikacji.
Nie zawsze, ale często bywa niezgodne z treścią pytania. Gdy polecenie mówi "zwróć tylko tytuły", to SELECT * zwróci także autor i cenę, więc odpowiedź jest merytorycznie niepoprawna. W praktyce dobór kolumn ma znaczenie dla wydajności i bezpieczeństwa danych.
Operator < oznacza "mniejsze niż". W zapytaniu WHERE cena < 50 zostaną wybrane tylko te rekordy, w których wartość w kolumnie cena jest mniejsza od 50. To podstawowy operator porównania używany w filtrach i raportach.
FROM wskazuje źródło danych (tabelę lub widok), np. ksiazki. WHERE nie wybiera tabeli, tylko ogranicza liczbę wierszy poprzez warunek. Częsty błąd to mieszanie tych ról lub próba umieszczania nazw kolumn w FROM.
W wielu narzędziach (konsola, edytory SQL) średnik ; kończy instrukcję i ułatwia rozdzielanie wielu poleceń. Niektóre biblioteki programistyczne wysyłają zapytanie bez średnika i też zadziała, ale na egzaminie najbezpieczniej trzymać się pełnej formy z średnikiem.
Najczęściej myli się: (1) zwracane kolumny (np. użycie SELECT * zamiast jednej), (2) operator porównania (< vs >), (3) typ danych (liczba w cudzysłowie lub z dopiskiem waluty), (4) literówki w nazwach tabel/kolumn. Na egzaminie sprawdzaj te elementy po kolei.
Takie zapytania są używane np. w katalogach produktów, księgarniach internetowych i panelach CMS: użytkownik wybiera filtr "do 50 zł", a backend generuje warunek cena < 50. Dobrą praktyką jest pobieranie tylko potrzebnych kolumn (np. tytuł), aby zmniejszyć transfer danych.
Ćwicz krótkie kwerendy: SELECT z jedną/dwiema kolumnami, WHERE z operatorami (<, >, =), a także podstawowe sortowanie (ORDER BY). Rozwiązuj zadania na prawdziwym silniku (np. SQLite lub MySQL) i zawsze porównuj: czy wynik zawiera właściwe kolumny i właściwie przefiltrowane rekordy.
info

Około 69% zdających odpowiada poprawnie na to pytanie. średnie

Według specjalistów z branży: "Poprawne zapytanie musi zwracać tylko kolumnę tytułu, więc w części SELECT podaje się tytul, a nie *."

Źródła:

  • PostgreSQL Documentation: "SELECT" (Queries), https://www.postgresql.org/docs/current/sql-select.html - accessed 2026-02-28
  • MySQL 8.0 Reference Manual: "SELECT Statement", https://dev.mysql.com/doc/refman/8.0/en/select.html - accessed 2026-02-28
  • SQLite Documentation: "SELECT" (lang_select), https://www.sqlite.org/lang_select.html - accessed 2026-02-28

Materiały:

  • Dokumentacja wybranego silnika bazy danych (np. MySQL/PostgreSQL/SQLite) – rozdział o SELECT
  • Ćwiczenia z pisania zapytań SELECT z WHERE dla różnych typów danych
  • Zadania egzaminacyjne INF.3 z działu: bazy danych i język SQL

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego