Warunki wstępne pojawienia się operatora JOIN
Wraz ze wzrostem ilości danych w tabelach często pojawiają się w nich zduplikowane wartości. Na przykład tabela produktów zawiera nazwy marek. które czasem się powtarzają. Przydałaby się dla nich osobna tabela marek, która zawierałaby np. takie dane:
- id - identyfikator marki;
- nazwa – nazwa marki;
- właściciel_firmy - nazwa firmy właściciela marki;
- company_contacts - kontakty firmy właściciela marki.
Następnie chcielibyśmy stworzyć tabelę adresów, w której moglibyśmy umieścić wszystkie adresy:
- id – id-adresy;
- kraj;
- region;
- miasto;
- ulica;
- dom;
- zamek błyskawiczny.
Ponadto w tej tabeli możliwe byłoby przechowywanie adresów nie tylko firm będących właścicielami marki, ale także adresów klientów i pracowników. A takie podejście jest po prostu konsekwencją wzrostu ilości danych (liczby wierszy w tabelach). Ułatwia to manipulowanie danymi w tabelach i zachowanie ich integralności.
Gdy masz 5 pracowników, możesz po prostu wpisać ich zawód w kolumnie zawodu . Jeśli masz 5 tysięcy pracowników w swojej firmie, potrzebujesz tabeli z listą x zawodów i ich obowiązków.
Nawiasem mówiąc, w języku Java jest coś podobnego. Jeśli masz dużo kodu w metodzie, istnieje chęć podzielenia go na kilka metod. Jeśli w klasie jest wiele metod, chcę podzielić ją na kilka klas.
Dlatego duże bazy danych mają tysiące tabel. I prawie wszystkie zapytania są wykonywane na kilku tabelach jednocześnie. A iloczyn kartezjański wierszy trzech tabel, z których każda ma tysiąc rekordów, to już miliard wierszy.
Ale samo filtrowanie miliarda wierszy za pomocą WHERE może zająć godziny. Dlatego twórcy języka SQL zaproponowali swoje rozwiązanie – operator JOIN.
Wprowadzenie do operatora JOIN
Operator JOIN służy do wyraźnego poinformowania serwera SQL, że nie potrzebujemy iloczynu kartezjańskiego wszystkich wierszy tabel dla wszystkich, ale inteligentnego sklejenia wierszy różnych tabel, które odnoszą się do siebie za pomocą identyfikatora (lub w inny sposób) . Serwer posiada osobny algorytm przetwarzania łączenia tabel z wykorzystaniem operatora JOIN, co pozwala na znacznie szybsze wykonywanie takich operacji. Ogólna postać operatora JOIN jest następująca:
table 1 JOIN table 2 ON condition
Tutaj jest napisane, że musisz połączyć tabele table1 i table2 w jedną tabelę i użyć warunku jako kryterium łączenia .
Weźmy nasz stary przykład:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
I przepisz to za pomocą operatora JOIN:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
Oba zapytania dadzą w naszym przypadku ten sam wynik, ale to tylko dlatego, że zapytania są bardzo proste. W PRZYSZŁOŚCI WHERE pozwala na zbudowanie dokładnie takiego filtra wierszy, a ten określony po ON pozwala na pisanie skomplikowanych skryptów do łączenia tabel. Możesz także używać aliasów (aliasów tabel) podczas korzystania z instrukcji JOIN. Przykład:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id