JOIN
Po raz pierwszy w naszym kursie zbudujemy zapytanie do dwóch tabel jednocześnie. Nasze tabele z bazy "nowa_baza" zawierają informacje o ilości sprzedaży produktów do poszczególnych klientów ("sprzedaż") oraz o cenach produktów ("produkty"). Wykorzystując je obie, moglibyśmy pokusić się o wyświetlenie cen i wartości sprzedaży. W tym celu wykorzystamy polecenie JOIN, które pozwoli nam na tę operację (pod warunkiem, że obie tabele posiadają pola, które można wykorzystać do przypisania sobie poszczególnych rekordów):
W tym przypadku powinniśmy podać jawnie nazwy tabel przed nazwami pól, które wybieramy - dzięki temu unikniemy błędów w sytuacji, gdyby poszczególne tabele zawierały pola o takich samych nazwach. Po słowie FROM podajemy nazwę pierwszej tabeli, po JOIN kolejnej wraz z klauzulą ON w której przyrównujemy pola, wg których dane z tabel będą łączone (u nas wiemy, że "id_prod" z tabeli "sprzedaż" odpowiada "id" z tabeli "produkty"). Zauważmy, że wyświetlone zostały tylko i wyłącznie te rekordy, które są sobie równe - czyli dla odpowiednich rekordów w jednej tabeli znaleziono pozycje w drugiej - i tylko te zostały wyświetlone. Nie podanie jakiegokolwiek sformułowania poza JOIN (jak w powyższym przykładzie) oznacza stworzenie tzw. INNER JOIN - czyli szukania części wspólnej wg podanych warunków.
Wspomnieć trzeba, że łączyć można więcej tabel (każdą oddzielając sformułowaniem JOIN i wykorzystując więcej opcji ON), w definicji połączeń możemy używać także operatorów AND oraz OR wraz z nawiasami - jeśli jest taka potrzeba. Dla przykładu zmodyfikujemy powyższe zapytanie nadając odpowiednim tabelom aliasy, a tabelę "produkty" podłączymy dwukrotnie (tylko dla przykładu):
Podanie po nazwie tabeli określonego wyrażenia, tworzymy alias, którym możemy się posługiwać w zapytaniu - u nas to jest "s" dla tabeli "sprzedaz", "p" i "r" dla dwukrotnie podłączanej tabeli "produkty". Po pierwszej sekwencji JOIN ON, następuje ona po raz drugi - "doklejając" kolejny raz (ale z innym aliasem - dla przejrzystości i poprawności polecenia). Nasz przykład jest banalny, ale w rzeczywistości zdarza się, iż określona tabela w ramach jednego polecenia SQL jest podłączana wielokrotnie, przy czym za każdym razem wykorzystywane są inne warunki połączenia - wówczas aliasy są niezbędne. Poza JOIN (INNER JOIN) istnieją definicje innych sprzężeń:
LEFT/RIGHT JOIN
Definicja i użycie jest podobna jak poprzednie polecenie jednak skutek jest inny:
Użycie LEFT powoduje, że zapytanie najpierw wybiera wszystkie rekordy z tabeli pierwszej (po lewej) i dopiero potem wg podanego warunku dokleja te rekordy z tabeli dołączanej, które spełniają warunek je łączący. Jeśli jakieś rekordy z tabeli dołączanej nie spełniają podanego warunku - zapytanie wstawia w te pola wartość "NULL". Jeśli chcemy sytuację odwrócić, musimy użyć RIGHT JOIN:
lub zamienić tabele miejscami i ponownie użyć LEFT JOIN:
FULL JOIN
Specyficzne polecenie, które umożliwia zwrócenie wszystkich rekordów z obu tabel, przy czym tam gdzie nie jest wypełniony warunek łączący tabele - zwracany jest NULL (zaznaczone czerwoną ramką):
Na koniec warto zauważyć, że dzięki połączeniu danych o ilościach i cenach, możemy obliczyć wartości sprzedaży:
Dodaliśmy pole obliczeniowe, które jednocześnie nazwaliśmy jako "wartosc" dzięki użyciu polecenia AS.