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