KWALIFIKACJA INF2 + INF3 - CZERWIEC 2014

PYTANIE NR 21.
Wynikiem polecenia SELECT tabelal.nazwisko, tabela2.wynagrodzenie FROM tabelal, tabela2 WHERE tabelal.id=tabela2.id_pracownika będzie pokazanie kolumn
A.
B.
C.
D.
Wyjaśnienie poprawnej odpowiedzi:
Polecenie SELECT wskazuje dwie kolumny: nazwisko z tabela1 oraz wynagrodzenie z tabela2. Warunek WHERE tabelal.id=tabela2.id_pracownika tworzy złączenie, więc zwrócone będą tylko wiersze, dla których identyfikator pracownika pasuje w obu tabelach.
To jest klasyczny JOIN w składni implicit.

Pełne wyjaśnienie:

Zapytanie składa się z dwóch kluczowych części: listy wybieranych kolumn oraz warunku dopasowania wierszy.

  • W części SELECT tabelal.nazwisko, tabela2.wynagrodzenie wskazano dokładnie, jakie pola mają znaleźć się w wyniku: kolumna nazwisko z pierwszej tabeli oraz kolumna wynagrodzenie z drugiej tabeli. To jest tzw. projekcja – wybór konkretnych kolumn do wyświetlenia.
  • W części FROM tabelal, tabela2 podano dwie tabele, z których mają pochodzić dane. Sama lista tabel bez dodatkowych warunków oznaczałaby iloczyn kartezjański (każdy wiersz z pierwszej tabeli łączyłby się z każdym wierszem z drugiej).
  • Dlatego kluczowy jest warunek WHERE tabelal.id=tabela2.id_pracownika. Ten zapis tworzy złączenie (logicznie odpowiadające INNER JOIN) po identyfikatorze pracownika. W efekcie wynik zawiera tylko te pary wierszy, dla których id z pierwszej tabeli jest równe id_pracownika z drugiej tabeli.

Poprawna interpretacja wyniku brzmi więc: zostaną pokazane dwie kolumny (nazwisko i wynagrodzenie) pochodzące z dwóch tabel, ale wyłącznie dla rekordów spełniających zależność kluczy w warunku WHERE.

Dlaczego pozostałe odpowiedzi są niepoprawne?

  • Odpowiedzi sugerujące dopasowanie po nazwisku są błędne, bo w zapytaniu nie ma warunku porównującego nazwiska; jedynym kryterium powiązania jest równość id i id_pracownika.
  • Stwierdzenia, że wynik pochodzi wyłącznie z jednej tabeli, są błędne: lista SELECT jawnie pobiera jedną kolumnę z pierwszej tabeli i jedną z drugiej.
  • Odpowiedź mówiąca tylko, że zostaną pokazane kolumny z tabel 1 i 2, jest niepełna, bo pomija najważniejszą część sensu zapytania: warunek złączenia, który decyduje, które wiersze w ogóle trafią do wyniku.

W praktyce warto pamiętać: kolumny po przecinku w SELECT mówią "co pokazuję", a warunek w WHERE mówi "kiedy pokazuję". To rozróżnienie często decyduje o poprawnej odpowiedzi na egzaminie.

Dodatkowe pytania

Dodatkowe pytania (FAQ):
Lista po słowie SELECT określa, jakie kolumny pojawią się w wyniku zapytania (projekcja). Jeśli podasz tabela.kolumna, jednoznacznie wskazujesz źródło danych. To nie określa jeszcze, które wiersze zostaną wybrane — o tym decydują warunki.
Taki zapis to tzw. złączenie w składni implicit. Logicznie działa jak INNER JOIN: najpierw rozważa pary wierszy z obu tabel, a potem warunek w WHERE zostawia tylko te pary, które spełniają zależność (np. równość kluczy).
Użycie zapisu tabela.kolumna zapobiega niejednoznaczności, gdy obie tabele mają kolumny o tej samej nazwie (np. id). Pomaga też czytelnie pokazać, skąd pochodzi dana wartość w wyniku, co jest ważne przy złączeniach.
To warunek dopasowania rekordów między tabelami. Oznacza, że wiersz z pierwszej tabeli zostanie połączony z wierszem z drugiej tylko wtedy, gdy identyfikator pracownika w obu tabelach jest zgodny. W praktyce często odpowiada relacji klucz główny–klucz obcy.
Tak. Gdy w FROM są dwie tabele rozdzielone przecinkiem, bez warunku dopasowania otrzymasz iloczyn kartezjański: każda kombinacja wierszy z t1 i t2. To zwykle generuje ogromne wyniki i jest typowym błędem w zapytaniach.
Najczęstsze pomyłki to: ignorowanie kwalifikatorów tabela.kolumna, mylenie warunku złączenia z filtrem po danych, oraz zakładanie, że łączenie odbywa się po "logicznym" polu (np. nazwisku), mimo że w zapytaniu łączy się po identyfikatorze.
Kolumny zwracane są zawsze w części po SELECT (to "co wyświetlasz"). Warunki wyboru/dopasowania są w WHERE (to "kiedy wyświetlasz"). Na egzaminie warto najpierw wypisać kolumny z SELECT, a dopiero potem sprawdzić, jaki warunek ogranicza wynik.
W nowoczesnym SQL i w projektach produkcyjnych zwykle lepiej stosować jawne INNER JOIN, bo jest czytelniejsze, ułatwia utrzymanie kodu i zmniejsza ryzyko przypadkowego iloczynu kartezjańskiego. Składnia implicit nadal działa, ale bywa uznawana za mniej zalecaną.
Warunek równości kluczy w WHERE przy dwóch tabelach w FROM najczęściej odpowiada złączeniu typu INNER JOIN, bo odrzuca niedopasowane wiersze. Dla złączeń z zachowaniem wierszy (LEFT/RIGHT) zwykle potrzebujesz jawnej składni JOIN.
Spójrz na kwalifikator przed nazwą kolumny, np. tabela2.wynagrodzenie oznacza, że wartość pochodzi z tabeli 2. Jeśli kwalifikatora nie ma, a nazwa kolumny może wystąpić w obu tabelach, zapytanie byłoby niejednoznaczne. To dobry sygnał kontrolny przy analizie.
info

Statystycznie 46% uczniów zna prawidłową odpowiedź. trudne

Według specjalistów z branży: "Polecenie SELECT wskazuje dwie kolumny: nazwisko z tabela1 oraz wynagrodzenie z tabela2."

Źródła:

  • MySQL 8.0 Reference Manual: SELECT Statement (Syntax) – https://dev.mysql.com/doc/refman/8.0/en/select.html (dostęp: 2026-03-02)
  • PostgreSQL Documentation: 7.2.1.2. From Clause / Joins – https://www.postgresql.org/docs/current/queries-table-expressions.html (dostęp: 2026-03-02)
  • SQLite Documentation: SELECT (The FROM clause and joins) – https://www.sqlite.org/lang_select.html (dostęp: 2026-03-02)

Materiały:

  • Dokumentacja SQL wybranego silnika (MySQL/PostgreSQL/SQLite) – sekcje SELECT oraz JOIN
  • Kursy/lekcje o relacyjnych bazach danych: klucze główne i obce
  • Ćwiczenia z łączenia tabel: INNER JOIN vs złączenie w składni implicit

Aktualizacja pytania: 31.03.2026



Aktualizacja pytania: 31.03.2026
📡 Brak połączenia internetowego