W schemacie relacyjnym tabela Zapisy pełni rolę tabeli łącznikowej (asocjacyjnej) dla relacji wiele-do-wielu między Studenci i Zajecia. Zawiera więc co najmniej dwa klucze obce: idStudenta (do Studenci.id) oraz idZajecia (do Zajecia.id).
Aby zwrócić wyłącznie nazwiska studentów oraz odpowiadające im idZajecia dla studentów z grupy 15, potrzeba:
- złączenia tabel Studenci i Zapisy po właściwych kolumnach kluczy: Studenci.id = Zapisy.idStudenta (to jest sens klauzuli ON),
- filtrowania wyników po kolumnie Studenci.grupa w klauzuli WHERE, aby ograniczyć wyniki do grupy 15,
- wskazania w SELECT dwóch kolumn: nazwisko (z Studenci) i idZajecia (z Zapisy).
Zapytanie oznaczone jako poprawne spełnia te warunki: wybiera nazwisko i idZajecia, wykonuje JOIN po prawidłowym kluczu obcym oraz zawiera WHERE grupa = 15. Ponieważ idZajecia znajduje się w tabeli Zapisy, dołączenie tabeli Zajecia nie jest konieczne, jeśli nie pobieramy np. nazwy zajęć.
Dlaczego pozostałe propozycje są błędne:
- Wariant bez WHERE zwróci rekordy dla wszystkich grup, więc nie spełnia warunku "dla studentów z grupy 15".
- Wariant z warunkiem Studenci.id = Zapisy.idZajecia łączy niepowiązane logicznie kolumny (klucz studenta z identyfikatorem zajęć). Taki JOIN daje semantycznie niepoprawne dopasowania i przypadkowe wyniki.
- Wariant bez klauzuli ON (przy INNER JOIN) jest w typowym SQL niepoprawny składniowo albo prowadzi do niezamierzonego iloczynu kartezjańskiego, a dodatkowo nie definiuje relacji między kluczami.
Wskazówka egzaminacyjna: zawsze sprawdzaj, w której tabeli faktycznie jest potrzebna kolumna. Jeśli pole jest w tabeli pośredniej (Zapisy), często da się uniknąć dodatkowego JOIN, co upraszcza zapytanie i zmniejsza ryzyko błędnego powiązania kluczy.