KWALIFIKACJA INF3 - STYCZEŃ 2024 (test 2)

PYTANIE NR 17.
Z przedstawionych tabel Klienci i Uslugi należy wybrać jedynie imiona klientów oraz odpowiadające im nazwy usług, które są droższe niż 10 zł. Kwerenda wybierająca te dane ma postać
Ilustracja przedstawia schemat bazy danych, który jest prawdopodobnie częścią pytania egzaminacyjnego związanego z
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawna kwerenda musi jednocześnie: zwrócić tylko kolumny imie i nazwa, połączyć tabele relacją (JOIN ... ON), a następnie przefiltrować rekordy warunkiem ceny cena > 10. Brak WHERE lub błędny warunek złączenia spowoduje zwrócenie nieprawidłowych danych.

Pełne wyjaśnienie:

Wynik ma zawierać jedynie imiona klientów oraz nazwy usług, ale tylko dla tych usług, których cena jest większa niż 10 zł. Do tego potrzebne są trzy elementy zapytania:

  • Selekcja kolumn w SELECT, czyli wskazanie dokładnie pól do zwrócenia: imie oraz nazwa.
  • Połączenie tabel (JOIN), bo dane pochodzą z dwóch tabel: klienci i uslugi. Warunek w ON określa, jak wiersze mają się ze sobą dopasować (zwykle klucz obcy w klienci wskazuje rekord w uslugi).
  • Filtrowanie w WHERE, bo kryterium "droższe niż 10 zł" to warunek ograniczający wyniki.

Zapytanie z warunkiem WHERE cena > 10 zwróci tylko te pary (klient, usługa), które spełniają próg cenowy. Jeśli pominie się WHERE, baza zwróci również usługi tańsze lub równe 10 zł, co łamie treść zadania. Jeśli warunek ON jest błędny (np. łączenie po niepowiązanych kolumnach id), wyniki mogą być przypadkowe, niekompletne albo nadmiarowe.

Wariant ze składnią w stylu FROM klienci, uslugi bez jawnego warunku złączenia tworzy iloczyn kartezjański (każdy klient z każdą usługą), a dodatkowo użycie cena < 10 odwraca kryterium. To typowe pułapki egzaminacyjne: brak JOIN/ON lub brak WHERE oraz pomylenie znaku nierówności.

Dobra praktyka w rozwiązaniach egzaminacyjnych to też doprecyzowanie pochodzenia kolumn (np. u.cena), aby nie było wątpliwości, z której tabeli pochodzi pole filtrowane.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
JOIN łączy wiersze z dwóch tabel na podstawie warunku dopasowania w ON. Dzięki temu możesz w jednym wyniku pokazać kolumny z tabeli klienci i uslugi, o ile rekordy są powiązane (np. klucz obcy wskazuje konkretną usługę).
ON definiuje, które kolumny muszą być równe, aby wiersze zostały połączone (np. uslugi.id = klienci.uslugi_id). To nie jest filtr "droższe niż 10", tylko opis relacji między tabelami. Filtry wartości zwykle trafiają do WHERE.
WHERE ogranicza wynik do rekordów spełniających warunek "droższe niż 10 zł", czyli cena > 10. Bez WHERE zapytanie zwróci także usługi tańsze lub równe 10 zł, więc nie spełni treści zadania.
Najczęstsze błędy to: łączenie po złych kolumnach (np. id = id bez relacji), pominięcie warunku filtrowania ceny, albo użycie przecinka w FROM bez warunku złączenia, co daje iloczyn kartezjański i przypadkowe wyniki.
W praktyce czasem można, ale na poziomie egzaminu bezpiecznie jest rozdzielać role: ON do powiązania tabel, WHERE do filtrowania wyników. Dzięki temu zapytanie jest czytelne i jednoznaczne, a interpretacja wyniku zgodna z poleceniem.
Gdy użyjesz składni FROM klienci, uslugi bez warunku łączącego, powstaje iloczyn kartezjański: każdy klient zostanie połączony z każdą usługą. Wynik będzie zwykle wielokrotnie większy i nie będzie odpowiadał rzeczywistym powiązaniom danych.
Trzeba znać schemat bazy: cena najczęściej należy do tabeli usług. Dobrą praktyką jest użycie aliasów i kwalifikacji kolumn, np. u.cena. To eliminuje niejednoznaczność i pomaga uniknąć błędów, gdy w obu tabelach są podobne nazwy pól.
Operator > oznacza "większe niż". W tym zadaniu wybierasz tylko te rekordy, w których wartość w kolumnie cena przekracza 10. Częstą pomyłką jest użycie <, które odwraca kryterium i wybiera tańsze usługi.
Przeczytaj zapytanie w trzech krokach: (1) jakie kolumny zwraca SELECT, (2) czy FROM/JOIN/ON faktycznie łączy właściwe tabele, (3) czy WHERE zawiera wymagany filtr. Jeśli brakuje jednego z tych elementów, wynik prawie na pewno nie spełnia polecenia.
Najczęściej stosuje się krótkie aliasy, np. klienci k i uslugi u. Wtedy zapis jest czytelniejszy: SELECT k.imie, u.nazwa ... WHERE u.cena > 10. To zmniejsza ryzyko pomyłek przy wielu kolumnach.
info

To pytanie poprawnie rozwiązuje 65% zdających egzamin. średnie

Według specjalistów z branży: "Poprawna kwerenda musi jednocześnie: zwrócić tylko kolumny imie i nazwa, połączyć tabele relacją (JOIN ..."

Źródła:

  • PostgreSQL Documentation: "SELECT" (JOIN, WHERE) – https://www.postgresql.org/docs/current/sql-select.html (dostęp: 2026-03-01)
  • MySQL 8.0 Reference Manual: "SELECT Statement" – https://dev.mysql.com/doc/refman/8.0/en/select.html (dostęp: 2026-03-01)
  • SQLite Documentation: "SELECT" (FROM, WHERE, JOIN) – https://www.sqlite.org/lang_select.html (dostęp: 2026-03-01)

Materiały:

  • Dokumentacja SQL używanego silnika (np. MySQL lub PostgreSQL) – rozdziały o SELECT, JOIN i WHERE
  • Ćwiczenia z projektowania relacji (PK/FK) i łączenia tabel na przykładowych bazach
  • Zadania praktyczne: pisanie kwerend z JOIN oraz filtrowaniem i testowanie wyników na danych

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego