Rozdział 11. ♦ Więcej o SQL 311
Rozdział 11. ♦ Więcej o SQL 311
mysql> select tytuł, imię, nazwisko, isbn -> from książki, autorzy -> where książki.autorld = autorzy.id;
I tytuł |
imię |
nazwisko |
isbn i |
Uczeń Skrytobójcy Królewski Skrytobójca Wyprawa Skrytobójcy W ułamku sekundy bowca dusz Dotyk Zła_ Nie mów nikomu Bez skrupułów Bez pożegnania |
Robin Robin Robin Alex Alex Alex Harlan Harlan Harlan |
r |
8389004976 8389004933 8389004941 8323810915 8323816514 8323805547 8387834211 8388722255 8387834238 |
9 rows in set (0.00 sec) |
Rysunek 11.2.
Wynik zapytania łączącego tabele Autorzy i Książki
W SQL istnieją różne typy złączeń tabel. Podstawowe złączenia to: INNER JOIN, LEFT JOIN i RIGHT JOIN. Omówimy je pokrótce na kolejnych stronach. Wszystkie typy złączeń obsługiwane przez MySQL opisane są w dokumentacji tego pakietu.
Złączenie typu INNER JOIN, CROSS JOIN lub FULL JOIN to iloczyn kartezjański dwóch lub więcej tabel, który został opisany w poprzedniej sekcji. Złączenie tego typu uzyskujemy wymieniając nazwy tabel oddzielone przecinkami lub też stosując wymienione słowa kluczowe. Konstrukcja taka będzie miała schematyczną postać:
SELECT kolumnal. kolumna2.....kolumnaN
FROM tabel a 1 [INNER | CROSS | FULL] JOIN tabela2 [ON warunek]
[WHERE warunek]
Jeśli chcemy zatem uzyskać pełne złączenie przygotowanych wcześniej tabel Autorzy i Książki, zawierające kolumny Tytuł, Imię, Nazwisko i Isbn, należy zastosować jedną z instrukcji:
1. SELECT tytuł, imię. nazwisko, isbn FROM Książki JOIN Autorzy;
2. SELECT tytuł. imię. nazwisko, isbn FROM Książki INNER JOIN Autorzy;
3. SELECT tytuł, imię. nazwisko, isbn FROM Książki CROSS JOIN Autorzy;
4. SELECT tytuł. imię. nazwisko, isbn FROM Książki FULL JOIN Autorzy;
Są to odpowiedniki poznanej już instrukcji:
SELECT tytuł, imię. nazwisko, 1sbn FROM Książki, Autorzy:
I efekt ich działania będzie taki sam (rysunek 11.1 w sekcji „Złączenia”)
W przypadku JOIN, INNER JOIN oraz CROSS JOIN można również zastosować dodatkowe wyrażenie określające warunki złączenia. Jeśli zatem chcemy wyświetlić listę wszystkich książek wraz z imionami i nazwiskami ich autorów zamiast stosować warunek w sekcji WHERE, napiszemy:
SELECT tytuł. tmie. nazwisko, isbn FROM Książki INNER JOIN Autorzy ON Książki,autorid=Autorzy.id: