Kolejność tabel w złączeniach zewnętrznych
Stwierdziliśmy wcześniej, że kolejność, w jakiej wymieniane są tabele w złączeniu wewnętrznym, nie jest istotna. Nie można powiedzieć tego samego o złączeniach zewnętrznych. Zarówno w przypadku złączeń lewostronnych, jak i prawostronnych kolejność wymieniania tabel ma znaczenie. Jednakże istnieje w tym zakresie pewna elastyczność w sytuacjach, w których wyliczane są co najmniej trzy tabele. Wówczas kolejność słów kluczowych LEFT (lub RIGHT) JOIN można dowolnie zmieniać.
Spójrzmy jeszcze raz na oryginalną klauzulę FROM z pierwotnej instrukcji SELECT:
FROM Klienci
LEFT JOIN Zamówienia
ON Klienci.IDKlienta = Zamówienia.IDKlienta
LEFT JOIN Zwroty
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia
Widzieliśmy już, że możemy najpierw wymienić tabelę Zwroty, a na końcu wyszczególnić tabelę Klienci, jeśli tylko zmienimy rodzaj złączenia na prawostronne, tak jak poniżej:
FROM Zwroty
RIGHT JOIN Zamówienia
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia
RIGHT JOIN Klienci
ON Klienci.IDKlienta = Zamówienia.IDKlienta
Czy jest zatem możliwe wymienienie najpierw tabeli Klienci, potem tabeli Zwroty, a na końcu tabeli Zamówienia? Tak, jeśli zastosujemy w jednej instrukcji SELECT zarówno złączenia zewnętrzne, jak i wewnętrzne i dodamy kilka nawiasów. Poniższy fragment zapytania jest równoznaczny z podanym powyżej:
FROM Klienci
LEFT JOIN (Zwroty
RIGHT JOIN Zamówienia
ON Zamówienia.IDZamówienia = Zwroty.IDZamówienia)
ON Klienci.IDKlienta = Zamówienia.IDKlienta
To, co początkowo wydawało się dość prostą instrukcją, teraz stało się niepotrzebnie skomplikowanym zapytaniem. Powyższy fragment instrukcji prezentujemy tylko po to, by pokazać, jak nie budować złączeń i że należy zwracać uwagę na tego rodzaju zapisy podczas analizy kodu. Radzimy zatem zawsze stosować słowo kluczowe LEFT JOIN i unikać wykorzystywania nawiasów przy tworzeniu złożonych klauzul FROM, w których wymienianych jest wiele tabel.
Język SQL. Przyjazny podręcznik. Wydanie II Autor: Larry Rockoff Wydawnictwo: Helion