Teradata - Si unisce

Join viene utilizzato per combinare i record di più di una tabella. Le tabelle vengono unite in base alle colonne / ai valori comuni di queste tabelle.

Sono disponibili diversi tipi di join.

  • Inner Join
  • Join esterno sinistro
  • Right Outer Join
  • Join esterno completo
  • Self Join
  • Cross Join
  • Cartesian Production Join

INNER JOIN

Inner Join combina i record di più tabelle e restituisce i valori presenti in entrambe le tabelle.

Sintassi

Di seguito è riportata la sintassi dell'istruzione INNER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
INNER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Esempio

Considera la tabella dei dipendenti e la tabella dei salari seguenti.

EmployeeNo Nome di battesimo Cognome JoinedDate DepartmentNo Data di nascita
101 Mike James 27/3/2005 1 1/5/1980
102 Roberto Williams 4/25/2007 2 3/5/1983
103 Peter Paolo 21/03/2007 2 4/1/1983
104 Alex Stuart 2/1/2008 2 11/6/1984
105 Roberto James 1/4/2008 3 12/1/1984
EmployeeNo Schifoso Deduzione Retribuzione netta
101 40.000 4.000 36.000
102 80.000 6.000 74.000
103 90.000 7.000 83.000
104 75.000 5.000 70.000

La query seguente unisce la tabella Employee e la tabella Salary nella colonna comune EmployeeNo. A ciascuna tabella viene assegnato un alias A e B e alle colonne viene fatto riferimento con l'alias corretto.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
INNER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo);

Quando la query precedente viene eseguita, restituisce i seguenti record. L'impiegato 105 non è incluso nel risultato poiché non ha record corrispondenti nella tabella Salario.

*** Query completed. 4 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo   DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1            36000 
    102           2            74000 
    103           2            83000 
    104           2            70000

UNISCI ESTERNO

LEFT OUTER JOIN e RIGHT OUTER JOIN combinano anche i risultati di più tabelle.

  • LEFT OUTER JOIN restituisce tutti i record dalla tabella di sinistra e restituisce solo i record corrispondenti dalla tabella di destra.

  • RIGHT OUTER JOIN restituisce tutti i record dalla tabella di destra e restituisce solo le righe corrispondenti dalla tabella di sinistra.

  • FULL OUTER JOINcombina i risultati di entrambi LEFT OUTER e RIGHT OUTER JOINS. Restituisce righe corrispondenti e non corrispondenti dalle tabelle unite.

Sintassi

Di seguito è riportata la sintassi dell'istruzione OUTER JOIN. È necessario utilizzare una delle opzioni da LEFT OUTER JOIN, RIGHT OUTER JOIN o FULL OUTER JOIN.

SELECT col1, col2, col3…. 
FROM  
Table-1 
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN 
Table-2 
ON (col1 = col2) 
<WHERE condition>;

Esempio

Considera il seguente esempio della query LEFT OUTER JOIN. Restituisce tutti i record dalla tabella Employee e i record corrispondenti dalla tabella Salary.

SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay 
FROM  
Employee A 
LEFT OUTER JOIN 
Salary B 
ON (A.EmployeeNo = B. EmployeeNo) 
ORDER BY A.EmployeeNo;

Quando la query precedente viene eseguita, produce il seguente output. Per il dipendente 105, il valore NetPay è NULL, poiché non ha record corrispondenti nella tabella Salary.

*** Query completed. 5 rows found. 3 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo     NetPay 
-----------  ------------   ----------- 
    101           1           36000 
    102           2           74000 
    103           2           83000 
    104           2           70000 
    105           3             ?

CROSS JOIN

Cross Join unisce ogni riga della tabella di sinistra a ogni riga della tabella di destra.

Sintassi

Di seguito è riportata la sintassi dell'istruzione CROSS JOIN.

SELECT A.EmployeeNo, A.DepartmentNo, B.EmployeeNo,B.NetPay 
FROM  
Employee A 
CROSS JOIN 
Salary B 
WHERE A.EmployeeNo = 101 
ORDER BY B.EmployeeNo;

Quando la query precedente viene eseguita, produce il seguente output. EmployeeNo 101 dalla tabella Employee è unito a ogni record dalla tabella Salary.

*** Query completed. 4 rows found. 4 columns returned. 
*** Total elapsed time was 1 second. 
 EmployeeNo  DepartmentNo   EmployeeNo    NetPay 
-----------  ------------  -----------  ----------- 
    101           1            101         36000 
    101           1            104         70000 
    101           1            102         74000 
    101           1            103         83000