312 PHP i MySQL dla każdeg:
Złączenie typu LEFT JOIN pozwala na uwzględnienie w wyniku danych, które nie mają swoich odpowiedników w złączanych tabelach. Oznacza to, że jeżeli w pierwszej tabeli znajdują się wiersze, które (ze względu na warunek złączenia) nie mają swoich odpowiedników w drugiej tabeli, i tak zostaną uwzględnione w złączeniu, a w puste kolumny zostaną wpisane wartości NULL. Takie zestawienia mogą być bardzo użyteczne. Powróćmy do przykładu z książkami i autorami. Może się również zdarzyć, że w tabeli Książki znajdą się dane książki, dla której nie będzie wpisu w tabeli Autorzy. Będzie to oczywiście błąd polegający na niespójności danych w bazie, ale jest to całkiem realna sytuacja. Uzupełnijmy więc tabelę Ksi azki, tak aby zawierała dane:
Książki
1 Id | |
Autorld | Tytuł |
| ISBN | |
1 I 1 |
1 | Uczeń Skrytobójcy |
| 8389004976 | |
1 2 | |
1 j Królewski Skrytobójca |
| 8389004933 | |
1 3 | |
1 j Wyprawa Skrytobójcy |
| 8389004941 | |
1 4 1 |
2 | W ułamku sekundy |
| 8323810915 | |
1 5 1 |
2 | Łowca dusz |
| 8323816514 | |
1 6 | |
2 | Dotyk Zła |
| 8323805547 | |
1 1 1 |
3 | Nie mów nikomu |
| 8387834211 | |
1 8 | |
3 j Bez skrupułów |
| 8388722255 j |
1 9 1 |
3 | Bez pożegnania |
| 8387834238 | |
1 io | |
5 | Klin |
| 8385103201 | |
Tabelę Autorzy pozostawmy bez zmian. Książka o identyfikatorze 10 ma autora o identyfikatorze 5. Taki identyfikator nie istnieje jednak w tabeli Autorzy. W takiej sytuacji zwyczajne zapytanie w postaci:
SELECT tytuł. imię. nazwisko, isbn FROM książki INNER JOIN autorzy ON książki.autorid-autorzy.id;
będzie miało taki sam wynik, jak przedstawiony w poprzedniej sekcji. Ponieważ w tabeli Książki nie ma książek napisanych przez autora o identyfikatorze 4, w tabeli wynikowej nie pojawiają się żadne dodatkowe wiersze. Zgubimy zatem dane jednej z książek. Zupełnie inaczej będzie jednak w przypadku złączenia LEFT JOIN. Jeśli zastosujemy instrukcję:
SELECT tytuł. imię. nazwisko, isbn FROM książki LEFT JOIN autorzy ON książki.autorid-autorzy.id:
w wyniku pojawią się dane książki o tytule Klin, a w kolumnach dotyczących imienia i nazwiska autora — wartości NULL, tak jak jest to widoczne na rysunku 11.3. W ten sposób mamy dane wszystkich książek, nawet jeśli są one niespójne.
W bardzo prosty sposób uzyskamy także dane wszystkich książek, dla których nie istnieją wpisy w tabeli Autorzy. Wystarczy wykonać zapytanie:
SELECT tytuł. imię. nazwisko, isbn. autorld
FROM książki LEFT JOIN autorzy ON książki.autorid-autorzy.id
WHERE autorzy.id is nuli: