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).