Connexions internes (INNER
) et externes (OUTER
)
Une jointure joint toujours les lignes de deux ensembles de données (généralement appelés "gauche" et "droite"). Par défaut, seules les lignes qui satisfont à la condition de jointure (celles qui correspondent à au moins une ligne de l'autre ensemble de lignes selon la condition appliquée) sont intégrées au jeu de données résultant. Ce type de jointure (qui est le type par défaut) est appelé jointure interne (INNER JOIN).
Supposons que nous ayons deux tables :
ID | S |
---|---|
87 | Just some text |
35 | Silence |
CODE | X |
---|---|
-23 | 56.7735 |
87 | 416.0 |
Si nous joignons ces tables en utilisant cette requête
SELECT *
FROM A
JOIN B ON A.id = B.code
le résultat sera :
ID | S | CODE | X |
---|---|---|---|
87 | Just some text | 87 | 416.0 |
Autrement dit, la première ligne de la table A a été jointe à la deuxième ligne de la table B parce qu'elles satisfont ensemble à la condition de jointure "`A.id = B.code`". Les autres lignes ne correspondent pas et ne sont donc pas incluses dans la connexion. N'oubliez pas que la connexion par défaut est toujours interne (INNER).
Nous pouvons rendre cela explicite en spécifiant le type de connexion :
SELECT *
FROM A
INNER JOIN B ON A.id = B.code
mais généralement le mot "INNER" est omis.
Bien entendu, il peut y avoir des cas où une ligne de l'ensemble de données de gauche correspond à plusieurs lignes de l'ensemble de données de droite (ou vice versa).
Dans ce cas, toutes les combinaisons sont incluses dans l'ensemble de données résultant, et nous pouvons obtenir un résultat comme celui-ci :
ID | S | CODE | X |
---|---|---|---|
87 | Just some text | 87 | 416.0 |
87 | Just some text | 87 | -1.0 |
-23 | Don't know | -23 | 56.7735 |
-23 | Still don't know | -23 | 56.7735 |
-23 | I give up | -23 | 56.7735 |
Il est parfois nécessaire d'inclure tous les enregistrements de l'ensemble de données de gauche ou de droite dans le résultat, qu'il existe ou non un enregistrement correspondant dans l'ensemble de données apparié. Dans ce cas, il est nécessaire d'utiliser des connexions externes.
La connexion externe de gauche (LEFT OUTER) comprend tous les enregistrements de l'ensemble de données de gauche et les enregistrements de l'ensemble de données de droite qui satisfont à la condition de connexion.
La connexion externe de droite (RIGHT OUTER) comprend tous les enregistrements de l'ensemble de données de droite et les enregistrements de l'ensemble de données de gauche qui satisfont à la condition de connexion.
FULL OUTER inclut toutes les entrées des deux ensembles de données.
Dans toutes les connexions externes, les champs vides
(c'est-à-dire les champs de l'ensemble de données qui n'ont pas d'enregistrement correspondant) sont remplis avec NULL
.
Les mots clés LEFT
, RIGHT
ou FULL
avec le mot clé optionnel OUTER
sont utilisés pour désigner la connexion externe.
Considérez diverses connexions externes en utilisant les exemples de requêtes avec les tables A et B ci-dessus :
SELECT *
FROM A
LEFT OUTER JOIN B ON A.id = B.code
Identique à
SELECT *
FROM A
LEFT JOIN B ON A.id = B.code
ID | S | CODE | X |
---|---|---|---|
87 | Just some text | 87 | 416.0 |
235 | Silence | <null> | <null> |
SELECT *
FROM A
RIGHT OUTER JOIN B ON A.id = B.code
Identique à
SELECT *
FROM A
RIGHT JOIN B ON A.id = B.code
ID | S | CODE | X |
---|---|---|---|
<null> | <null> | -23 | 56.7735 |
87 | Just some text | 87 | 416.0 |
SELECT *
FROM A
FULL OUTER JOIN B ON A.id = B.code
Identique à
SELECT *
FROM A
FULL JOIN B ON A.id = B.code
ID | S | CODE | X |
---|---|---|---|
<null> | <null> | -23 | 56.7735 |
87 | Just some text | 87 | 416.0 |
235 | Silence | <null> | <null> |