web-dev-qa-db-fra.com

FULL OUTER JOIN vs. FULL JOIN

Il suffit de jouer avec des requêtes et des exemples pour mieux comprendre les jointures. Je remarque que dans SQL Server 2008, les deux requêtes suivantes donnent les mêmes résultats:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name

Effectuent-ils exactement la même action pour produire les mêmes résultats, ou aurais-je des résultats différents dans un exemple plus complexe? Est-ce juste une terminologie interchangeable?

68
CptSupermrkt

En fait, ils sont les mêmes. LEFT OUTER JOIN est identique à LEFT JOIN et RIGHT OUTER JOIN est identique à RIGHT JOIN. C'est un moyen plus informatif de comparer de INNER Join.

Voir ceci article Wikipedia pour plus de détails.

84
John Woo

Microsoft® SQL Server ™ 2000 utilise ces mots-clés SQL-92 pour les jointures externes spécifiées dans une clause FROM:

  • LEFT OUTER JOIN ou LEFT JOIN

  • RIGHT OUTER JOIN ou RIGHT JOIN

  • FULL OUTER JOIN ou FULL JOIN

De MSDN

Le full outer join ou full join renvoie toutes les lignes des deux tables, en faisant correspondre les lignes chaque fois qu'une correspondance peut être faite et en plaçant NULLs aux endroits où aucune ligne correspondante n'existe.

28
Lion

Il est vrai que certaines bases de données reconnaissent le mot clé OUTER. Certains pas. Lorsqu'il est reconnu, il s'agit généralement d'un mot clé facultatif. Presque toujours, FULL JOIN et FULL OUTER JOIN font exactement la même chose. (Je ne peux pas penser à un exemple où ils ne le font pas. Quelqu'un d'autre peut-il penser à un?)

Cela peut vous amener à vous demander: "Pourquoi serait-ce même un mot clé s'il n'a pas de sens?" La réponse se résume au style de programmation.

Auparavant, les programmeurs s'efforçaient de rendre leur code aussi compact que possible. Chaque caractère signifiait un temps de traitement plus long. Nous avons utilisé des variables de 1, 2 et 3 lettres. Nous avons utilisé des années à deux chiffres. Nous avons éliminé tout espace blanc inutile. Certaines personnes continuent de programmer de cette façon. Ce n'est plus une question de temps de traitement. C'est plus une question de codage rapide.

Les programmeurs modernes apprennent à utiliser plus de variables descriptives et incorporent plus de remarques et de documentation dans leur code. En utilisant des mots supplémentaires tels que OUTER, assurez-vous que les autres personnes qui lisent le code auront plus de facilité à le comprendre. Il y aura moins d'ambiguïté. Ce style est beaucoup plus lisible et plus aimable pour les futurs utilisateurs qui devront gérer ce code.

8
MarvinM

Supprimez le sur TableA.name = TableB.name vous verrez le produit cartésien.

0
satish kumar Parida