Zapisz jako PDF

Transkrypt

Zapisz jako PDF
TI:WTBD/ZłączeniaWewnętrzne
W ogólniejszym poleceniu SELECT źródłem danych może być złączenie 2 lub więcej tabel -- tzn.
może ono występować w klauzuli FROM zamiast nazwy pojedynczej tabeli. Jest parę różnych
sposobów jego zapisania.
Złączenie wewnętrzne
tabela1, tabela2 WHERE warunek_złączenia
tabela1 JOIN tabela2 WHERE warunek_złączenia
tabela1 INNER JOIN tabela2 WHERE warunek_złączenia
tabela1 CROSS JOIN tabela2 WHERE warunek_złączenia
Każdy z tych zapisów w zasadzie oznacza to samo, mianowicie iloczyn kartezjański tabela1 x tabela2
ograniczony do podzbioru wierszy spełniających warunek_złączenia. Ale np. użycie CROSS JOIN w
przypadku SQLite zabrania optymalizatorowi zapytań zamiany kolejności tabel (nie ma to wpływu na
wynik, tylko na procedurę jego uzyskania).
Dla takich jak wyżej złączeń (tzn. wewnętrznych) istnieje też składnia pozwalająca zapisać warunek
złączenia w odrębnej klauzuli ON (zamiast w klauzuli WHERE), tzn.:
tabela1 JOIN tabela2 ON warunek_złączenia [JOIN tabela3 ON kolejny_warunek ...]
semantycznie jest to to samo, niektóre produkty mogą (nie jestem tego pewien) traktować takie
klauzule inaczej przy optymalizacji. Korzyść może być głównie dla czytelności zapisu: można
wyodrębnić warunki złączenia (tzn. te, które wynikają z powiązań między tabelami) od warunków,
służących selekcji interesujących nas danych -- pozostawiając te ostatnie w klauzuli WHERE.
Dodatkowo, w przypadku złączeń wielokrotnych, pozwala to umieścić warunki łączące blisko
odwołań to tabel, do których one się odnoszą -- co również może sprzyjać czytelności.
Aliasy
Podając odniesienie do tabeli w klauzuli FROM można zarazem określić dla niej alias:
baza1.tabela_o_długiej_nazwie [AS] alias, ...
(słowo AS jest opcjonalne). Służy to temu, by nie musieć wielokrotnie korzystać z (być może długiej)
nazwy tabeli przy kwalifikowaniu nazw kolumn w wyrażeniach po SELECT i warunkach.
Podobnie można wprowadzić aliasy dla wyrażeń określających kolumny tabeli wynikowej. Ich
zastosowanie jest jednak dość ograniczone.