POWRÓT NA STRONĘ SZKOŁY

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

Wyszukiwanie danych ze sobą niepołączonych - przykład 1
Rysunek 4_2_3_1. Wyszukiwanie danych ze sobą niepołączonych - przykład 1

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.

Wyszukiwanie danych ze sobą niepołączonych - przykład 2
Rysunek 4_2_3_2. Wyszukiwanie danych ze sobą niepołączonych - przykład 2

Zapytania konstruowane podczas tych zajęć, można również tworzyć stosując podzapytania, które poznamy w dalszym toku nauki.