Tabele: Firmy i Zamowienia są powiązane relacją jeden do wielu. Aby wybrać jedynie id zamówienia wraz z odpowiadającą mu nazwą firmy dla firm, których poziom jest równy 4, należy zastosować polecenie

A.
SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy WHERE poziom = 4;
B.
SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.id = Firmy.id WHERE poziom = 4;
C.
SELECT id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.Firmy_id = Firmy.id WHERE poziom = 4;
D.
SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.Firmy_id = Firmy.id WHERE poziom = 4;
Pytanie z egzaminu CKE, styczeń 2022 (arkusz EE.09-SG-22.01).
Poprawne polecenie to: SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.Firmy_id = Firmy.id WHERE poziom = 4;. Relacja jeden do wielu oznacza, że wiele rekordów z tabeli Zamowienia może wskazywać na jeden rekord z tabeli Firmy. Dlatego warunek złączenia musi porównywać klucz obcy Zamowienia.Firmy_id z kluczem głównym Firmy.id. Dopiero po połączeniu tabel warunek WHERE poziom = 4 ogranicza wynik do firm o wskazanym poziomie. W SELECT wybrano tylko identyfikator zamówienia oraz nazwę firmy. Do zapamiętania: przy JOIN używa się składni FROM tabela1 JOIN tabela2 ON tabela1.klucz_obcy = tabela2.klucz_główny WHERE warunek;. Gdy w obu tabelach występuje kolumna id, należy doprecyzować, z której tabeli ma pochodzić.
W tym zadaniu najważniejsze jest poprawne wskazanie kolumn łączących tabele. Polecenie SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy WHERE poziom = 4; zawiera JOIN, ale nie podaje warunku ON, więc nie określa, które rekordy zamówień odpowiadają którym firmom. W zależności od systemu SQL może to prowadzić do błędu składni albo nieprawidłowego złączenia. Polecenie SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.id = Firmy.id WHERE poziom = 4; porównuje identyfikator zamówienia z identyfikatorem firmy, a nie tak opisano relację w tabelach. Taki warunek mógłby dawać przypadkowe dopasowania. Polecenie SELECT id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.Firmy_id = Firmy.id WHERE poziom = 4; ma dobry warunek złączenia, lecz kolumna id jest niejednoznaczna, ponieważ występuje w obu tabelach. Poprawna postać to: SELECT Zamowienia.id, nazwa FROM Zamowienia JOIN Firmy ON Zamowienia.Firmy_id = Firmy.id WHERE poziom = 4;. Typowy błąd polega na myleniu klucza głównego tabeli z kluczem obcym przechowującym powiązanie.