Introduzione ai tipi di join in SQL
Una clausola Join in SQL ha lo scopo di combinare righe da due o più tabelle. Il processo di combinazione delle righe dipende da una colonna ad esse correlata. I quattro diversi tipi di join in SQL sono denominati come join interno, join sinistro, join destro e full join. Prima di poter davvero iniziare a utilizzare qualsiasi tipo di join, abbiamo bisogno di un RDBMS o di un sistema di gestione di database relazionali in cui caricare i dati. Uno dei modi molto semplici per comprendere i join è l'uso del diagramma di Venn. L'uso di un diagramma di Venn semplifica la misurazione di tutte le relazioni possibili e logiche tra i diversi set di dati. Cerchiamo di capirlo uno per uno usando il diagramma di Venn. Più avanti capiremo la differenza tra questi usando alcuni esempi pratici. Supponiamo che nel nostro database siano presenti due set di dati archiviati sotto forma di Tabella 1 e Tabella 2. Esiste una relazione tra le due tabelle specificata sotto forma di chiave primaria e concetto di chiave esterna. Se si uniscono due tabelle con una sorta di relazione, la rappresentazione del diagramma di Venn dello scenario sarà qualcosa del genere,
La quantità di questa sovrapposizione determinerà l'entità della somiglianza tra le due tabelle, ovvero la tabella A e la tabella B. Ciò significa che il numero di record della tabella uno, che corrispondono ai record della tabella due, è rappresentato dalla sezione di sovrapposizione. Questo è un sottoinsieme di dati. Otteniamo quattro diversi tipi di join in base al sottoinsieme di dati che stiamo raccogliendo dalle due tabelle.
Sintassi di Join:
SELECT column-names FROM table-name1 JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Tipi di join in SQL
- Inner Join
- Sinistra Join
- Partecipa a destra
- Partecipazione completa
Di seguito spieghiamo i diversi tipi di join in dettaglio.
1. Join interno
In un join interno, selezioniamo solo i dati comuni in entrambe le tabelle. (cioè, parte 3 qui) Per renderlo più preciso, tutti i record di entrambe le tabelle corrispondenti alla condizione menzionata con il join vengono raccolti in questo join.
Sintassi di Inner Join:
SELECT column-names FROM table-name1 INNER JOIN table-name2 ON column-name1 = column-name2 WHERE condition
2. Join sinistro
Nel join sinistro, selezioniamo tutti i dati dalla tabella di sinistra e dalla tabella di destra selezioniamo solo il set di dati che corrisponde alla condizione menzionata con il join (qui area 1 + 3)
Sintassi del join sinistro:
SELECT column-names FROM table-name1 LEFT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
3. Partecipa a destra
Nel join destro, selezioniamo tutti i dati dalla tabella destra e dalla tabella sinistra selezioniamo solo il set di dati che corrisponde alla condizione menzionata con il join (qui 3 + 2)
Sintassi di Right Join:
SELECT column-names FROM table-name1 RIGHT JOIN table-name2 ON column-name1 = column-name2 WHERE condition
4. Partecipazione completa
Nell'unione completa, tutti i record di entrambe le tabelle vengono uniti e selezionati indipendentemente dalla condizione menzionata con l'unione soddisfatta o meno. (qui 1 + 2 + 3)
Sintassi di Full Join:
SELECT column-names FROM table-name1 FULL JOIN table-name2 ON column-name1 = column-name2 WHERE condition
Esempi di join in SQL
Considera le due tabelle riportate di seguito:
1. Esempio di un ORDER_DETAILS
L'ordine della tabella contiene i dettagli dell'ordine effettuato dal cliente, come l'id dell'ordine, il numero di prodotti ordinati, l'importo dell'ordine, l'id del cliente che ha effettuato l'ordine e la data in cui è stato effettuato l'ordine. Tale tipo di tavolo può essere utilizzato da qualsiasi sito Web online per la memorizzazione dei dettagli dell'ordine.
ORDER_DETAILS Tabella:
ID ordine | No_of_Items | Ammontare dell'ordine | Identificativo del cliente | Data dell'ordine |
123 | 3 | 5500 | P_1 | 2019/01/20 |
234 | 2 | 6500 | P_12 | 2019/02/10 |
345 | 1 | 10000 | P_13 | 2019/05/27 |
456 | 4 | 4000 | P_14 | 2019/11/07 |
567 | 2 | 20656 | P_1 | 2019/12/15 |
678 | 3 | 15000 | P_11 | 2019/10/27 |
2. Esempio di CUSTOMER_DETAILS
Ora prendiamo un altro tavolo in cui verranno archiviati i dettagli del cliente in modo da poter consegnare l'ordine ai rispettivi indirizzi. La tabella dei clienti avrà quindi i dettagli del cliente come id cliente (cust_id) che sarà unico per ogni cliente. Ora il nome e il cognome sono memorizzati nel campo chiamato - Cust_First_Name e Cust_Last_Name. Gli altri campi memorizzeranno le informazioni come l'id e-mail, il numero di cellulare del cliente insieme all'indirizzo, codice PIN, città e stato. Quindi, possiamo vedere che la nostra tabella dei clienti sarà simile a:
Tabella CUSTOMER_DETAILS:
Cust_Id | Cust_First_Name | Cust_Last_Name | Codice PIN | Indirizzo | Cust_Mobile | Città | Stato | Cust_email |
P_50 | Alice | Peter | 111111 | 330 xyz street | 123 | Bangalore | KA | |
P_12 | Giacomo | Dsouza | 155.511 | Colonia di 420 abc | 234 | Hyderabad | AP | |
P_15 | Harry | Vasaio | 123456 | 551 mg di strada | 444 | Noida | Delhi | |
P_40 | miley | Parker | 111121 | 11 piedi di strada | 224 | Bangalore | KA | |
P_10 | Herman | cespuglio | 123423 | 34 th thanco Street | 432 | Delhi | Delhi | |
P_18 | Dan | Marrone | 134523 | 50 a strada indipendente | 145 | Gurugram | Haryana | |
P_20 | Giacomo | Russel | 111111 | 101 mg di strada | 678 | Bangalore | KA | |
P_1 | miley | Madison | 100011 | 45 ° layout kaverappa | 987 | Chennai | TN |
Ora usando questo esempio, cerchiamo di capire la funzionalità dei join. Possiamo vedere che la relazione tra le due tabelle, ovvero la tabella ORDER_DETAILS e la tabella CUSTOMER_DETAILS, viene stabilita dalla chiave che ha il valore dell'ID cliente, ovvero Customer_Id, che è una chiave primaria nella tabella CUSTOMER_DETAILS e una chiave esterna nella ORDER_DETAILS tabella.
Alcuni punti importanti da notare qui prima di procedere sono:
- Non tutti i clienti nella nostra tabella CUSTOMER_DETAILS hanno effettuato una richiesta d'ordine.
- Non tutte le richieste d'ordine che abbiamo nella nostra tabella ORDER_DETAILS hanno un customer_id che è presente nella nostra tabella CUSTOMER_DETAILS, il che significa che per alcuni ordini non ci sono dettagli del cliente.
3. Join interno
Inner Join ti fornirà solo i record per i quali è soddisfatta la condizione.
Query:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
inner join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Produzione:
Cust_First_Name | Cust_email | No_of_Items | Ammontare dell'ordine | Data dell'ordine |
miley | 3 | 5500 | 2019/01/20 | |
Giacomo | 2 | 6500 | 2019/02/10 | |
miley | 2 | 20656 | 2019/12/15 |
4. Join sinistro
Left Join ti fornirà tutti i record dalla tabella di sinistra, ovvero la tabella CUSTOMER_DETAILS. Se non ci sono ordini effettuati dal cliente, verrà restituito un valore null per le colonne nella tabella ORDER_DETAILS.
Query:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
left join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Produzione:
Cust_First_Name | Cust_email | No_of_Items | Ammontare dell'ordine | Data dell'ordine |
Alice | NULLO | NULLO | NULLO | |
Giacomo | 2 | 6500 | 2019/02/10 | |
Harry | NULLO | NULLO | NULLO | |
miley | NULLO | NULLO | NULLO | |
Herman | NULLO | NULLO | NULLO | |
Dan | NULLO | NULLO | NULLO | |
Giacomo | NULLO | NULLO | NULLO | |
miley | 3 | 5500 | 2019/01/20 | |
miley | 2 | 20656 | 2019/12/15 |
5. Partecipa a destra
Bene, Join ti fornirà tutti i record dalla tabella giusta, ovvero la tabella ORDER_DETAILS. Se non sono stati trovati record dei clienti per l'ordine, verrà restituito un valore null per le colonne nella tabella CUSTOMER_DETAILS.
Query:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
right join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Produzione:
Cust_First_Name | Cust_email | No_of_Items | Ammontare dell'ordine | Data dell'ordine |
miley | 3 | 5500 | 2019/01/20 | |
Giacomo | 2 | 6500 | 2019/02/10 | |
NULLO | NULLO | 1 | 10000 | 2019/05/27 |
NULLO | NULLO | 4 | 4000 | 2019/11/07 |
miley | 2 | 20656 | 2019/12/15 | |
NULLO | NULLO | 3 | 15000 | 2019/10/27 |
6. Partecipazione completa
Full Join ti darà tutti i record specificati da entrambe le tabelle.
Query:
select Cust_First_Name, Cust_email, No_of_Items, Order_Amount, Order_Date
from CUSTOMER_DETAILS cd
full join ORDER_DETAILS od
on cd.Cust_Id = od.Customer_Id
Produzione:
Cust_First_Name | Cust_email | No_of_Items | Ammontare dell'ordine | Data dell'ordine |
Alice | NULLO | NULLO | NULLO | |
Giacomo | 2 | 6500 | 2019/02/10 | |
Harry | NULLO | NULLO | NULLO | |
miley | NULLO | NULLO | NULLO | |
Herman | NULLO | NULLO | NULLO | |
Dan | NULLO | NULLO | NULLO | |
Giacomo | NULLO | NULLO | NULLO | |
miley | 3 | 5500 | 2019/01/20 | |
miley | 2 | 20656 | 2019/12/15 | |
NULLO | NULLO | 1 | 10000 | 2019/05/27 |
NULLO | NULLO | 4 | 4000 | 2019/11/07 |
NULLO | NULLO | 3 | 15000 | 2019/10/27 |
Vantaggi dei join in SQL
- Esecuzione più rapida che significa recupero più rapido delle colonne desiderate.
- Ottimizzato, leggibile e comprensibile
- Aumento delle prestazioni.
Conclusione
Come visto, usiamo i JOIN per aggiungere e ottenere i campi da diverse tabelle.
- Inner Join recupera i record in cui viene soddisfatta la condizione specificata.
- Sinistra Join ti darà tutte le righe dalla tabella di sinistra, anche quando la condizione data non corrisponde.
- Right Join ti darà tutte le righe dalla tabella di sinistra, anche quando la condizione data non corrisponde.
- Full Join restituisce tutte le righe quando c'è una corrispondenza in una delle tabelle.
- Le query di join possono essere utilizzate con comandi come: SELEZIONA, INSERISCI, AGGIORNA, ELIMINA.
- I join vanno anche d'accordo con diverse clausole come: GROUP BY, SUB QUERIES, DOVE, FUNZIONI AGGREGATE, ecc.
Articolo raccomandato
Questa è stata una guida ai tipi di join in SQL. Qui discutiamo i diversi tipi di join in SQL e i suoi vantaggi insieme ad esempi. Puoi anche consultare i nostri altri articoli suggeriti per saperne di più -
- Vantaggi di NoSQL
- Strumenti di gestione SQL
- Database in SQL
- Carattere jolly in SQL
- I 6 migliori tipi di join in MySQL con esempi