KWALIFIKACJA INF3 - CZERWIEC 2021

PYTANIE NR 19.
Tabele: Klienci i Zgloszenia są powiązane relacją jeden do wielu. Aby wybrać jedynie opis zgłoszenia oraz odpowiadające mu nazwisko klienta dla zgłoszenia numer 5, należy wydać polecenie
Ilustracja przedstawia diagram bazy danych, który jest częścią pytania egzaminacyjnego z kwalifikacji zawodowej dla technika
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Poprawne zapytanie wybiera tylko kolumny opis i nazwisko, łączy tabele przez klucz obcy (Zgloszenia.Klienci_id z Klienci.id) i filtruje wynik do jednego rekordu warunkiem WHERE Zgloszenia.id = 5. Pozostałe propozycje mają błędny warunek złączenia lub filtr.

Pełne wyjaśnienie:

Aby zwrócić opis zgłoszenia oraz nazwisko klienta dla zgłoszenia o id=5, zapytanie musi spełnić trzy warunki:

  • Selekcja właściwych kolumn: w części SELECT powinny znaleźć się wyłącznie pola potrzebne w wyniku, czyli opis (z tabeli Zgloszenia) oraz nazwisko (z tabeli Klienci).
  • Poprawne złączenie tabel: relacja 1:N oznacza, że wiele rekordów w Zgloszenia wskazuje na jeden rekord w Klienci. Technicznie realizuje to klucz obcy w tabeli Zgloszenia (np. Klienci_id), który przechowuje wartość klucza głównego klienta (Klienci.id). Dlatego warunek ON powinien mieć postać: Klienci.id = Zgloszenia.Klienci_id.
  • Filtrowanie właściwego rekordu: pytanie dotyczy "zgłoszenia numer 5", więc ograniczenie ma dotyczyć identyfikatora zgłoszenia, czyli WHERE Zgloszenia.id = 5.

Zapytanie oznaczone jako poprawne spełnia wszystkie powyższe wymagania: zwraca dwie właściwe kolumny, łączy tabele po kluczu obcym i wybiera dokładnie to zgłoszenie, którego identyfikator wynosi 5.

Dlaczego pozostałe propozycje są niepoprawne?

  • Wariant z warunkiem Klienci.id = Zgloszenia.id myli identyfikator zgłoszenia z identyfikatorem klienta. To częsty błąd, bo oba pola nazywają się id, ale dotyczą innych encji. Wynik złączenia może być przypadkowy lub pusty.
  • Wariant z WHERE Klienci.id = 5 filtruje po kliencie o id=5, a nie po zgłoszeniu o id=5. Nawet jeśli klient 5 istnieje, zapytanie może zwrócić inne zgłoszenia (wszystkie tego klienta) albo nie to, o które pytano.
  • Wariant bez poprawnej klauzuli ON (sam JOIN i WHERE) nie definiuje warunku złączenia w sposób wymagany w typowym SQL. W praktyce prowadzi to do błędu składni lub do niezamierzonego iloczynu kartezjańskiego (w zależności od dialektu), a filtr Klienci.id = 5 nadal nie wybiera "zgłoszenia numer 5".

Wskazówka egzaminacyjna: gdy w treści jest relacja 1:N i "odpowiadające mu dane", najpierw ustal, które pole jest kluczem obcym, a dopiero potem dobierz filtr w WHERE zgodnie z tym, który identyfikator podano (zgłoszenia czy klienta).

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Relacja jeden do wielu oznacza, że jeden rekord w tabeli nadrzędnej (np. Klienci) może mieć wiele powiązanych rekordów w tabeli podrzędnej (np. Zgloszenia). Realizuje się ją zwykle przez klucz obcy w tabeli "wiele", który wskazuje klucz główny tabeli "jeden".
Klucz obcy to pole, które przechowuje identyfikator rekordu z innej tabeli. Najczęściej ma nazwę sugerującą tabelę nadrzędną, np. Klienci_id. W praktyce w schemacie bazy lub w definicji tabeli (FOREIGN KEY) zobaczysz, że to pole odwołuje się do Klienci.id.
Warunek ON mówi bazie, jak łączyć wiersze z dwóch tabel. Bez ON (albo bez USING/NATURAL w określonych przypadkach) baza nie wie, które rekordy są powiązane i może powstać błędny wynik lub błąd składni. ON zwykle porównuje klucz główny z kluczem obcym.
Gdy interesują Cię tylko te rekordy, które mają dopasowanie w obu tabelach, stosuje się INNER JOIN (często zapis skrócony jako JOIN). W zadaniach typu "zgłoszenie i odpowiadający mu klient" to najczęstszy wybór, bo zakłada istnienie powiązania przez klucz obcy.
Ten warunek ogranicza wynik do konkretnego zgłoszenia o identyfikatorze 5. To ważne, bo treść mówi "dla zgłoszenia numer 5", a nie "dla klienta numer 5". W praktyce dzięki WHERE dostajesz jeden wiersz (lub brak), zamiast wielu zgłoszeń.
Bo taki filtr wybiera dane dla klienta o id=5, a klient może mieć wiele zgłoszeń o różnych id. Zwrócone zostaną wtedy zgłoszenia tego klienta, a niekoniecznie zgłoszenie o id=5. To częsty błąd wynikający z pomylenia identyfikatorów różnych tabel.
Stosuj zasadę: zawsze kwalifikuj kolumny nazwą tabeli, np. Zgloszenia.id, Klienci.id. Dodatkowo pamiętaj, że złączenie zwykle łączy Klienci.id z polem klucza obcego typu Zgloszenia.Klienci_id, a nie z identyfikatorem zgłoszenia.
Tak, aliasy ułatwiają zapis i czytelność, np. FROM Zgloszenia z JOIN Klienci k ON k.id = z.Klienci_id. Na egzaminie aliasy są zwykle akceptowane, o ile zapytanie jest jednoznaczne i poprawne składniowo w typowym dialekcie SQL.
Najpierw uruchom zapytanie bez WHERE, aby zobaczyć, czy pary zgłoszenie–klient wyglądają logicznie. Potem dodaj filtr dla konkretnego id. Jeśli wyniki są podejrzane, sprawdź warunek ON: czy porównuje klucz obcy z kluczem głównym, a nie dwa niezależne identyfikatory.
Ćwicz na prostych schematach 2–3 tabel: relacja 1:N (klient–zgłoszenie), N:M (produkty–zamówienia) i przypadki brakujących dopasowań (LEFT JOIN). Rób zadania z filtrami WHERE oraz wyborem konkretnych kolumn. Najważniejsze jest szybkie rozpoznanie klucza obcego i poprawnego ON.
info

Statystycznie 62% uczniów zna prawidłową odpowiedź. średnie

Specjaliści zwracają uwagę: "Poprawne zapytanie wybiera tylko kolumny opis i nazwisko, łączy tabele przez klucz obcy (Zgloszenia.Klienci_id z Klienci.id) i filtruje wynik do jednego rekordu warunkiem WHERE Zgloszenia.id = 5."

Źródła:

  • MySQL 8.0 Reference Manual: "JOIN Clause" (SELECT Syntax) — https://dev.mysql.com/doc/refman/8.0/en/join.html - dostęp 2026-02-27
  • PostgreSQL Documentation: "FROM Clause" i "Joins Between Tables" — https://www.postgresql.org/docs/current/queries-table-expressions.html - dostęp 2026-02-27
  • SQLite Documentation: "SELECT" i "JOIN" — https://sqlite.org/lang_select.html - dostęp 2026-02-27

Materiały:

  • Dokumentacja wybranego silnika bazy danych: sekcja JOIN/SELECT
  • Podręcznik do relacyjnych baz danych: klucze główne i obce, relacje 1:N
  • Ćwiczenia praktyczne z SQL na przykładowych bazach (np. helpdesk/CRM)

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego