SQL Différences entre les jointures intérieures / extérieures


Exemple

SQL a différents types de jointure pour spécifier si des lignes correspondantes (non) sont incluses dans le résultat: INNER JOIN , LEFT OUTER JOIN , RIGHT OUTER JOIN et FULL OUTER JOIN (les mots-clés INNER et OUTER sont facultatifs). La figure ci-dessous souligne les différences entre ces types de jointures: la zone bleue représente les résultats renvoyés par la jointure et la zone blanche représente les résultats que la jointure ne renverra pas.

Diagrammes de Venn représentant les jointures SQL internes / externes

Cross Join SQL Présentation graphique ( référence ):

entrer la description de l'image ici

Vous trouverez ci-dessous des exemples de cette réponse.

Par exemple, il y a deux tableaux comme ci-dessous:

A    B
-    -
1    3
2    4
3    5
4    6

Notez que (1,2) sont uniques à A, (3,4) sont communs et (5,6) sont uniques à B.

Jointure interne

Une jointure interne utilisant l'une des requêtes équivalentes donne l'intersection des deux tables, c'est-à-dire les deux lignes qu'elles ont en commun:

select * from a INNER JOIN b on a.a = b.b;
select a.*,b.* from a,b where a.a = b.b;

a | b
--+--
3 | 3
4 | 4

Jointure externe gauche

Une jointure externe gauche donnera toutes les lignes dans A, plus toutes les lignes communes dans B:

select * from a LEFT OUTER JOIN b on a.a = b.b;

a |  b
--+-----
1 | null
2 | null
3 |    3
4 |    4

Jointure externe droite

De même, une jointure externe droite donnera toutes les lignes de B, plus toutes les lignes communes de A:

select * from a RIGHT OUTER JOIN b on a.a = b.b;

a    |  b
-----+----
3    |  3
4    |  4
null |  5
null |  6

Jointure externe complète

Une jointure externe complète vous donnera l'union de A et B, c'est-à-dire toutes les lignes de A et toutes les lignes de B. Si quelque chose dans A n'a pas de donnée correspondante dans B, alors la partie B est nulle et vice versa.

select * from a FULL OUTER JOIN b on a.a = b.b;

 a   |  b
-----+-----
   1 | null
   2 | null
   3 |    3
   4 |    4
null |    6
null |    5