Rozdział 11. ♦ Więcej o SQL 313
Rozdział 11. ♦ Więcej o SQL 313
mysql> SELECT tytuł, imię, nazvrisko, isbn
-> EROM książki LEFT 301N autorzy ON książki,autorid=autorzy.id;
tytuł |
imię |
nazwisko |
isbn |
Uczeń Skrytobójcy Królewski Skrytobójca Wyprawa Skrytobójcy W ułamku sekundy Łowca dusz Dotyk Zła Nie mów nikomu Bez skrupułów Bez pożegnania Klin |
Robin Robin Robin Al ex Alex Alex Harlan Harlan Harlan NULL |
Hobb Hobb Hobb Kava Kava Coben Coben NULL |
8389004976 8389004933 8389004941 8323810915 8323816514 8323805547 8387834211 8388722255 8387834238 8385103201 |
10 rows in set (0.00 sec)
Wynik zapylania typu LEFTJOIN
Wynik takiego zapytania jest widoczny na rysunku 11.4.
Rysunek 11.4.
Dane książki, dla której brakuje wpisu w tabeli Autorzy
mysql> SELECT tytuł, imię, nazwisko, isbn, autorld
-> FROM książki LEFT 301N autorzy ON książki.autorid=autorzy.id -> WHERE autorzy.id is nuli;
I tytuł | imię | nazwisko | isbn | autorld |
I Klin | NULL I NULL | 838S103201 | 5 | 1 row in set (0.00 sec)
Złączenie typu RIGHT JOIN działa analogicznie do LEFT J0IN, z tym że w tabeli wynikowej uwzględnia wiersze z drugiej tabeli, które nie mają swoich odpowiedników w tabeli pierwszej. Załóżmy np., że w tabeli Autorzy znajdzie się wpis zawierający w polu Autorld identyfikator, który nie występuje w tabeli Książki. Uzupełnijmy znaną nam tabelę Autorzy, tak by zawierała następujące dane:
| Id | Imię |
| Nazwisko | |
| 1 | Robin |
1 Hobb |
| 2 1 Alex |
j Kava |
| 3 j Harlan |
| Coben |
1 4 | Terry |
j Pratchett | |
Tabelę Książki pozostawiamy bez zmian (np. w postaci takiej, jak przedstawiona w poprzedniej sekcji). Tym samym w bazie istnieje wpis dotyczący autora, którego książek nie mamy w bazie. Wykonanie zapytania w postaci:
spowoduje uzyskanie wyniku widocznego na rysunku 11.5.
Łatwo wszakże zaważyć, że RIGHT JOIN i LEFT JOIN to funkcjonalne odpowiedniki. Wystarczy zmieniać kolejność tabel, aby uzyskać jedno bądź drugie zapytanie. Przykładowo, aby uzyskać wynik przedstawiony na rysunku 11.5, zamiast złączenia typu