Teradata - Rejoint
Join est utilisé pour combiner des enregistrements de plusieurs tables. Les tables sont jointes en fonction des colonnes / valeurs communes de ces tables.
Il existe différents types de jointures disponibles.
- Jointure interne
- Jointure externe gauche
- Jointure externe droite
- Jointure externe complète
- Auto-rejoindre
- Jointure croisée
- Jointure de production cartésienne
JOINTURE INTERNE
Inner Join combine les enregistrements de plusieurs tables et renvoie les valeurs qui existent dans les deux tables.
Syntaxe
Voici la syntaxe de l'instruction INNER JOIN.
SELECT col1, col2, col3….
FROM
Table-1
INNER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Exemple
Considérez le tableau des employés et le tableau des salaires suivants.
Numéro d'employé | Prénom | Nom de famille | JoinedDate | DépartementNon | Date de naissance |
---|---|---|---|---|---|
101 | Mike | James | 27/03/2005 | 1 | 05/01/1980 |
102 | Robert | Williams | 25/04/2007 | 2 | 05/03/1983 |
103 | Peter | Paul | 21/03/2007 | 2 | 01/04/1983 |
104 | Alex | Stuart | 2/1/2008 | 2 | 06/11/1984 |
105 | Robert | James | 1/4/2008 | 3 | 01/12/1984 |
Numéro d'employé | Brut | Déduction | Salaire net |
---|---|---|---|
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 requête suivante joint la table Employee et la table Salary sur la colonne commune EmployeeNo. Chaque table se voit attribuer un alias A & B et les colonnes sont référencées avec l'alias correct.
SELECT A.EmployeeNo, A.DepartmentNo, B.NetPay
FROM
Employee A
INNER JOIN
Salary B
ON (A.EmployeeNo = B. EmployeeNo);
Lorsque la requête ci-dessus est exécutée, elle renvoie les enregistrements suivants. L'employé 105 n'est pas inclus dans le résultat car il n'a pas d'enregistrements correspondants dans la table Salaire.
*** 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
JOINTURE EXTÉRIEURE
LEFT OUTER JOIN et RIGHT OUTER JOIN combinent également les résultats de plusieurs tables.
LEFT OUTER JOIN renvoie tous les enregistrements de la table de gauche et renvoie uniquement les enregistrements correspondants de la table de droite.
RIGHT OUTER JOIN renvoie tous les enregistrements de la table de droite et ne renvoie que les lignes correspondantes de la table de gauche.
FULL OUTER JOINcombine les résultats des JOINTES EXTÉRIEURES GAUCHE et DROITE. Il renvoie les lignes correspondantes et non correspondantes des tables jointes.
Syntaxe
Voici la syntaxe de l'instruction OUTER JOIN. Vous devez utiliser l'une des options de jointure externe gauche, jointure externe droite ou jointure externe complète.
SELECT col1, col2, col3….
FROM
Table-1
LEFT OUTER JOIN/RIGHT OUTER JOIN/FULL OUTER JOIN
Table-2
ON (col1 = col2)
<WHERE condition>;
Exemple
Prenons l'exemple suivant de la requête LEFT OUTER JOIN. Il renvoie tous les enregistrements de la table Employee et les enregistrements correspondants de la table 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;
Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. Pour l'employé 105, la valeur NetPay est NULL, car il n'a pas d'enregistrements correspondants dans la table 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 ?
JOINDRE CROISÉ
La jointure croisée joint chaque ligne de la table de gauche à chaque ligne de la table de droite.
Syntaxe
Voici la syntaxe de l'instruction 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;
Lorsque la requête ci-dessus est exécutée, elle produit la sortie suivante. EmployeeNo 101 de la table Employee est joint à chaque enregistrement de Salary Table.
*** 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