Condiții preliminare pentru apariția operatorului JOIN
Pe măsură ce cantitatea de date din tabele crește, în ele apar adesea valori duplicate. De exemplu, tabelul de produse are nume de mărci. care se repetă uneori. Ar fi util să existe un tabel separat de mărci pentru ei, care să conțină, de exemplu, astfel de date:
- id - id-ul mărcii;
- nume – nume de marcă;
- company_owner - numele companiei proprietarului mărcii;
- company_contacts - contactele companiei proprietarului mărcii.
Apoi am dori să creăm un tabel de adrese în care să punem toate adresele:
- id – adrese de identitate;
- țară;
- regiune;
- oraș;
- stradă;
- casa;
- fermoar.
Mai mult, în acest tabel ar fi posibilă stocarea adreselor nu numai ale companiilor care dețin mărci, ci și adresele clienților și angajaților. Și această abordare este pur și simplu o consecință a creșterii cantității de date (numărul de rânduri din tabele). Acest lucru facilitează manipularea datelor din tabele și menținerea integrității acestora.
Când aveți 5 angajați, puteți introduce pur și simplu ocupația acestora în coloana ocupație . Dacă ai 5 mii de angajați în compania ta, atunci ai nevoie de un tabel cu o listă cu x profesii și responsabilitățile acestora.
În limbajul Java, apropo, există ceva asemănător. Dacă aveți mult cod într-o metodă, atunci există dorința de a-l împărți în mai multe metode. Dacă există multe metode într-o clasă, atunci vreau să o împart în mai multe clase.
De aceea bazele de date mari au mii de tabele. Și aproape toate interogările sunt executate pe mai multe tabele simultan. Iar produsul cartezian al rândurilor a trei tabele din fiecare dintre ele are o mie de înregistrări este deja un miliard de rânduri.
Dar doar filtrarea unui miliard de rânduri folosind WHERE poate dura ore întregi. Prin urmare, creatorii limbajului SQL și-au oferit soluția - operatorul JOIN.
Introducere în operatorul JOIN
Operatorul JOIN este folosit pentru a spune în mod explicit serverului SQL că nu avem nevoie de un produs cartezian al tuturor rândurilor de tabele pentru toate, ci de o lipire inteligentă a rândurilor de tabele diferite care se referă unele la altele folosind un ID (sau într-un alt mod) . Serverul are un algoritm separat pentru procesarea îmbinărilor de tabel folosind operatorul JOIN, ceea ce permite ca astfel de operațiuni să fie efectuate mult mai rapid. Forma generală a operatorului JOIN este următoarea:
table 1 JOIN table 2 ON condition
Aici scrie că trebuie să combinați tabelele table1 și table2 într-un singur tabel și să utilizați condiția ca criteriu de îmbinare .
Să luăm exemplul nostru vechi:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
Și rescrieți-l folosind operatorul JOIN:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
Ambele interogări vor da același rezultat în cazul nostru, dar acest lucru se datorează faptului că interogările sunt foarte simple. Pe viitor, WHERE vă permite să construiți exact filtrul de rând, iar cel specificat după ON vă permite să scrieți scripturi complexe pentru conectarea tabelelor. De asemenea, puteți utiliza aliasuri (aliase de tabel) când utilizați instrucțiunea JOIN. Exemplu:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id