Inner Join 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 Join). Tuttavia, esiste un Self Join che può essere utilizzato per situazioni specializzate. Lo scopo di Join è 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'è Inner Join?
L'operazione SQL Join più comunemente usata è l'Inner Join. Può essere considerato come il tipo predefinito di join utilizzato nelle applicazioni. Inner join usa il predicato join per combinare due tabelle. Supponendo che le due tabelle siano A e B, il predicato join confronterà le righe di A e B per scoprire 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 considerato come prima prendere il cross join (prodotto cartesiano) di tutti i record e quindi restituire solo i record che soddisfano il predicato join. Tuttavia, in re altà, il prodotto cartesiano non viene calcolato perché molto inefficiente. Viene invece utilizzato l'hash join o il sort-merge join.
Cos'è l'Outer Join?
A differenza di Inner join, outer join conserva tutti i record anche se non riesce a trovare un record corrispondente. Ciò significa che l'outer join ha bisogno di un record per trovare un record corrispondente affinché appaia nel risultato. Invece, restituirà tutti i record, ma i record senza corrispondenza avranno valori null. I join esterni sono divisi in tre sottocategorie. Sono il join esterno sinistro, il join esterno destro e il join esterno completo. Questa differenziazione si basa su quale riga della tabella (tabella di sinistra, tabella di destra o entrambe le tabelle) viene conservata quando vengono trovati record non corrispondenti. I left outer join (noti anche come semplicemente left join) conservano tutti i record della tabella di sinistra. Ciò significa che, anche se il numero di record corrispondenti è zero, avrà ancora record nella tabella dei risultati, ma avrà valori nulli per tutte le colonne di B. In altre parole, tutti i valori della tabella di sinistra vengono restituiti con valori corrispondenti da destra tabella (o valori null se non corrispondenti). Se i valori di più righe della tabella di sinistra vengono abbinati a una singola riga della tabella di destra, la riga della tabella di destra verrà ripetuta come richiesto. Il join esterno destro è praticamente simile al join esterno sinistro, ma il trattamento delle tabelle è venerato. Ciò significa che il risultato avrà tutte le righe della tabella di destra almeno una volta con valori di tabella di sinistra corrispondenti (e valori nulli per valori di destra non corrispondenti). Il join esterno completo è più completo dei join esterni sinistro e destro. Risulta nella combinazione dell'effetto dell'applicazione dell'esterno sinistro e destro uniti insieme.
Qual è la differenza tra Inner Join e Outer Join?
Inner Join non mantiene le righe non corrispondenti nel risultato, ma l'outer join manterrà tutti i record di almeno una tabella (a seconda di quale outer join è stato utilizzato). Pertanto, 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). L'unione interna potrebbe non produrre un risultato se non vengono trovate corrispondenze. Ma il 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.