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