Wyszukiwanie danych ze sobą niepołączonych
Podczas poprzednich zajęć wyszukiwaliśmy dane znajdujące się w różnych tabelach, które były ze sobą w jakiś sposób powiązane. Co zrobić, kiedy chcemy na przykład znaleźć klientów, którzy nigdy nie złożyli zamówienia, albo książki, które nigdy przez nikogo nie zostały kupione? Jednym ze sposobów, jest zastosowanie połączenia typu left join. Nastąpi wyszukanie w dwóch tabelach rekordów spełniających warunek połączenia, w ten sposób, że jeżeli w drugiej tabeli odpowiedni rekord nie zostaje odnaleziony, to wstawiane jest pole z wartością NULL. Dlaczego w nazwie typu połączenia mamy left? Jeżeli pierwszą tabelę nazwiemy lewą, natomiast drugą - tabelą prawą, to problem mamy wyjaśniony. Pokażemy to w ćwiczeniu, wcześniej jednak otwórz na oddzielnej karcie tabele naszej bazy ksiegarnia_internetowa
.
Ćwiczenie 4_2_3_1
Zastosujmy następujące zapytanie SQL
:
SELECT klienci.klient_id, klienci.nazwisko, zamowienia.zamowienie_id
FROM klienci LEFT JOIN zamowienia
ON klienci.klient_id=zamowienia.klient_id;
Warunek połączenia jest inaczej sformułowany, jak podczas poprzednich zajęć - korzystamy tutaj z klauzuli ON
W przypadku rekordów klientów Mirosław Mróz
oraz Jan Prędki
, nie ma połączenia z rekordami tabeli zamowienia
i dlatego w tych przypadkach, wartości pól zamowienie_id
są nieokreślone - NULL
.
Ćwiczenie 4_2_3_2
Wyszukamy teraz tylko tych klientów, którzy nic nie zamówili. W tym celu należy sprawdzić wartość pola klucza podstawowego prawej tabeli (u nas zamowienie_id
) i wybrać wiersze, w których wartość ta jest równa NULL
.
SELECT klienci.klient_id, klienci.nazwisko
FROM klienci LEFT JOIN zamowienia
USING(klient_id)
WHERE zamowienia.zamowienie_id IS NULL;
Zastosowaliśmy jeszcze inny sposób określania warunku połączenia. W LEFT JOIN
można zastosować jak porzednio klauzulę ON
, ale można również wykorzystać klauzulę USING
. W tym przypadku, nie można wskazać nazwy tabeli, z której ma pochodzić pole łączące, dlatego pola te muszą mieć jednakowe nazwy w obu łączonych tabelach.
Zapytania konstruowane podczas tych zajęć, można również tworzyć stosując podzapytania, które poznamy w dalszym toku nauki.