Prerequisiti per la comparsa dell'operatore JOIN
Man mano che la quantità di dati nelle tabelle aumenta, spesso vengono visualizzati valori duplicati. Ad esempio, la tabella dei prodotti contiene nomi di marchi. che a volte si ripetono. Sarebbe utile avere una tabella di marca separata per loro, che conterrebbe, ad esempio, tali dati:
- id - identificativo del marchio;
- nome – marchio;
- company_owner - il nome dell'azienda proprietaria del marchio;
- company_contacts - contatti dell'azienda del proprietario del marchio.
Quindi vorremmo creare una tabella di indirizzi in cui inserire tutti gli indirizzi:
- id – indirizzi id;
- Paese;
- regione;
- città;
- strada;
- casa;
- cerniera lampo.
Inoltre, in questa tabella sarebbe possibile memorizzare gli indirizzi non solo delle aziende proprietarie del marchio, ma anche gli indirizzi dei clienti e dei dipendenti. E questo approccio è semplicemente una conseguenza della crescita della quantità di dati (il numero di righe nelle tabelle). Ciò semplifica la manipolazione dei dati nelle tabelle e il mantenimento della loro integrità.
Quando hai 5 dipendenti, puoi semplicemente inserire la loro occupazione nella colonna dell'occupazione . Se hai 5mila dipendenti nella tua azienda, allora hai bisogno di una tabella con un elenco di x professioni e le loro responsabilità.
Nel linguaggio Java, tra l'altro, c'è qualcosa di simile. Se hai molto codice in un metodo, allora c'è il desiderio di suddividerlo in diversi metodi. Se ci sono molti metodi in una classe, voglio suddividerla in più classi.
Ecco perché i database di grandi dimensioni hanno migliaia di tabelle. E quasi tutte le query vengono eseguite su più tabelle contemporaneamente. E il prodotto cartesiano delle righe di tre tabelle in ognuna delle quali ha mille record è già un miliardo di righe.
Ma solo filtrare un miliardo di righe usando WHERE può richiedere ore. Pertanto, i creatori del linguaggio SQL hanno offerto la loro soluzione: l'operatore JOIN.
Introduzione all'operatore JOIN
L'operatore JOIN viene utilizzato per dire esplicitamente al server SQL che non abbiamo bisogno di un prodotto cartesiano di tutte le righe di tabelle per tutti, ma di un incollaggio intelligente di righe di tabelle diverse che si riferiscono l'una all'altra utilizzando un ID (o in un altro modo) . Il server dispone di un algoritmo separato per l'elaborazione dei join delle tabelle utilizzando l'operatore JOIN, che consente di eseguire tali operazioni molto più rapidamente. La forma generale dell'operatore JOIN è la seguente:
table 1 JOIN table 2 ON condition
Qui dice che è necessario combinare le tabelle table1 e table2 in una tabella e utilizzare la condizione come criterio di unione .
Prendiamo il nostro vecchio esempio:
SELECT * FROM employee, task WHERE emploee.id = task.emploee_id
E riscrivilo usando l'operatore JOIN:
SELECT * FROM employee JOIN task ON emploee.id = task.emploee_id
Entrambe le query daranno lo stesso risultato nel nostro caso, ma solo perché le query sono molto semplici. In futuro, WHERE ti consente di creare esattamente il filtro di riga e quello specificato dopo ON ti consente di scrivere script complessi per collegare le tabelle. È inoltre possibile utilizzare alias (alias di tabella) quando si utilizza l'istruzione JOIN. Esempio:
SELECT * FROM employee e JOIN task t ON e.id = t.emploee_id