Join interno vs Outer Join
Inner join e Outer join sono due dei metodi di unione SQL utilizzati nell'elaborazione delle query per i database. Appartengono alla famiglia delle clausole di join (le altre due sono Left e Right Joins). Tuttavia, c'è un Self Join che può essere utilizzato per situazioni specializzate. Lo scopo di Join è di combinare i campi utilizzando i valori comuni alle due tabelle. Questi join combinano record di più tabelle in un database. Crea set risultanti, che possono essere salvati come un'altra tabella.
Cos'è l'Inner Join?
L'operazione di unione SQL più comunemente utilizzata è l'unione interna. Può essere considerato come il tipo predefinito di join utilizzato nelle applicazioni. Join interno usa il predicato join per combinare due tabelle. Supponendo che le due tabelle siano A e B, il predicato di join confronterà le righe di A e B per trovare tutte le coppie che soddisfano il predicato. I valori delle colonne di tutte le righe soddisfatte delle tabelle A e B vengono combinati per creare il risultato. Può essere visto come prima cosa prendendo il cross join (prodotto cartesiano) di tutti i record e quindi restituendo solo i record che soddisfano il predicato di join. Tuttavia, in realtà, il prodotto cartesiano non viene calcolato perché è molto inefficiente. Al suo posto viene utilizzato Hash join o sort-merge join.
Cos'è Outer Join?
A differenza di Inner join, outer join mantiene tutti i record anche se non riesce a trovare un record corrispondente. Ciò significa che l'outer join necessita di un record per trovare un record corrispondente affinché appaia nel risultato. Invece, restituirà tutti i record, ma i record non corrispondenti avranno valori nulli. I join esterni sono divisi in tre sottocategorie. Vengono lasciati join esterno, join esterno destro e join esterno completo. Questa differenziazione si basa su quale riga della tabella (tabella sinistra, tabella destra o entrambe le tabelle) viene mantenuta quando vengono trovati record non corrispondenti. I join esterni a sinistra (noti anche come join a sinistra) mantengono tutti i record della tabella sinistra. Ciò significa che, anche se il numero corrispondente ai record è zero, allora avrà ancora i record nella tabella dei risultati, ma avrà valori nulli per tutte le colonne di B. In altre parole, tutti i valori della tabella sinistra vengono restituiti con i valori corrispondenti dalla destra tabella (o valori nulli quando non abbinati). Se i valori di più righe dalla tabella sinistra sono abbinati a una singola riga dalla tabella di destra, la riga dalla tabella di destra verrà ripetuta come richiesto. La giuntura esterna destra è praticamente simile alla giuntura esterna sinistra, ma il trattamento delle tabelle è venerato. Ciò significa che il risultato avrà tutte le righe della tabella destra almeno una volta con valori di tabella sinistra corrispondenti (e valori nulli per valori giusti non corrispondenti). Il join esterno completo è più completo di entrambi i join esterni sinistro e destro. Risulta combinando l'effetto dell'applicazione di entrambi i lati esterni sinistro e destro uniti.
Qual è la differenza tra Inner Join e Outer Join?
Inner Join non mantiene le righe non corrispondenti nel risultato, ma outer join manterrà tutti i record da almeno una tabella (a seconda di quale outer join è stato utilizzato). Quindi, il comportamento di non avere informazioni presenti su righe non corrispondenti nella tabella dei risultati è indesiderabile, è necessario utilizzare sempre uno dei join esterni (al posto di inner join). Inner join potrebbe non produrre un risultato se non vengono trovate corrispondenze. Ma join esterno produrrà sempre una tabella risultante, anche senza righe corrispondenti. Inner join restituirà sempre tabelle con valori (se restituiti). Ma i join esterni possono generare tabelle con valori nulli.