Quelle est la différence entre LEFT JOIN
et LEFT OUTER JOIN
?
Selon la documentation: FROM (Transact-SQL) :
<join_type> ::=
[ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
JOIN
Le mot clé OUTER
est marqué comme facultatif (entre crochets). Dans ce cas, cela signifie que le fait de le spécifier ou non ne fait aucune différence. Notez que, bien que les autres éléments de la clause join soient également marqués comme optionnels, les laisser les en sortie fera bien sûr une différence.
Par exemple, la partie type de la clause JOIN
est facultative. Dans ce cas, la valeur par défaut est INNER
si vous ne spécifiez que JOIN
name__. En d'autres termes, c'est légal:
SELECT *
FROM A JOIN B ON A.X = B.Y
Voici une liste de syntaxes équivalentes:
A LEFT JOIN B A LEFT OUTER JOIN B
A RIGHT JOIN B A RIGHT OUTER JOIN B
A FULL JOIN B A FULL OUTER JOIN B
A INNER JOIN B A JOIN B
Jetez également un coup d'œil à la réponse que j'ai laissée à cette autre question SO: La jointure gauche SQL vs plusieurs tables sur la ligne FROM? .
Pour répondre à votre question , il n'y a pas de différence entre LEFT JOIN et LEFT OUTER JOIN, elles sont exactement les mêmes que ...
INNER JOIN - récupère les données si elles sont présentes dans les deux tables.
OUTER JOIN sont de types 3 :
LEFT OUTER JOIN
- récupère les données si elles sont présentes dans la table de gauche.RIGHT OUTER JOIN
- récupère les données si elles sont présentes dans la table de droite.FULL OUTER JOIN
- récupère les données si elles sont présentes dans l'une des deux tables. CROSS JOIN , comme son nom l’indique, fait [n X m]
qui joint tout à tout.
Similaire au scénario dans lequel nous répertorions simplement les tables à joindre (dans la clause FROM
de l’instruction SELECT
name__), en utilisant des virgules pour les séparer.
Points à noter:
JOIN
name__, il s'agit par défaut d'un INNER JOIN
.OUTER
doit être LEFT
| RIGHT
| FULL
vous ne pouvez pas simplement dire OUTER JOIN
.OUTER
et simplement dire LEFT JOIN
ou RIGHT JOIN
ou FULL JOIN
.Pour ceux qui veulent mieux les visualiser, veuillez cliquer sur ce lien: Explication visuelle des jointures SQL
Quelle est la difference entre left join et left outer join?
rien. LEFT JOIN
et LEFT OUTER JOIN
sont équivalents.
Je suis un administrateur de base de données PostgreSQL. Autant que je sache, la différence entre les jointures externes et non externes est un sujet qui suscite de nombreuses discussions sur Internet. Jusqu'à aujourd'hui, je n'ai jamais vu de différence entre ces deux-là. Alors je suis allé plus loin et j'ai essayé de trouver la différence entre ceux-ci. À la fin, j'ai lu toute la documentation à ce sujet et j'ai trouvé la réponse,
Donc, si vous regardez la documentation (au moins dans PostgreSQL), vous pouvez trouver cette phrase:
En d'autres mots,
LEFT JOIN
et LEFT OUTER JOIN
SONT LES MÊMES
RIGHT JOIN
et RIGHT OUTER JOIN
SONT LES MÊMES
J'espère que cela pourra être utile pour ceux qui essaient encore de trouver la réponse.
Left Join
et Left Outer Join
sont un et le identique . Le premier est le raccourci pour le second. On peut dire la même chose de la relation Right Join
et Right Outer Join
. La démonstration illustrera l'égalité. Des exemples de travail de chaque requête ont été fournis via SQL Fiddle . Cet outil permettra une manipulation pratique de la requête.
Étant donné
Jointure gauche et Jointure externe gauche
Résultats
Jointure droite et Jointure extérieure droite
Résultats
Je trouve plus facile de penser aux jointures dans l'ordre suivant:
Jusqu'à ce que je découvre ce modèle (relativement) simple, JOINS était toujours un peu plus un art noir. Maintenant, ils ont un sens parfait.
J'espère que cela aide plus qu'il ne confond.
Pourquoi les positions GAUCHE/DROITE et GAUCHE EXTERNE/DROITE EXTERNE sont-elles les mêmes? Expliquons pourquoi ce vocabulaire. Comprenez que les jointures GAUCHE et DROITE sont des cas spécifiques de la jointure OUTER, et ne pourraient donc être autre chose qu'OUTER LEFT/OUTER RIGHT. La jointure OUTER est également appelée FULL OUTER par opposition aux jointures GAUCHE et DROITE qui sont PARTIAL résultats de la jointure OUTER. Effectivement:
Table A | Table B Table A | Table B Table A | Table B Table A | Table B
1 | 5 1 | 1 1 | 1 1 | 1
2 | 1 2 | 2 2 | 2 2 | 2
3 | 6 3 | null 3 | null - | -
4 | 2 4 | null 4 | null - | -
null | 5 - | - null | 5
null | 6 - | - null | 6
OUTER JOIN (FULL) LEFT OUTER (partial) RIGHT OUTER (partial)
Il est maintenant clair pourquoi ces opérations ont des alias, de même qu'il est clair qu'il n'y a que 3 cas: INNER, OUTER, CROSS. Avec deux sous-cas pour l'OUTER. Le vocabulaire, la façon dont les enseignants expliquent cela, ainsi que certaines réponses ci-dessus, donnent souvent l’impression qu’il existe de nombreux types de jointure. Mais c'est en fait très simple.
Pour répondre à ta question
Dans SQL Server jointure syntaxe OUTER est facultatif
Il est mentionné dans l'article msdn: https://msdn.Microsoft.com/en-us/library/ms177634 (v = sql.130) .aspx
La liste suivante montre donc les syntaxes de jointure équivalentes avec et sans OUTER
LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN
Autres syntaxes équivalentes
INNER JOIN => JOIN
CROSS JOIN => ,
Recommande fortement Dotnet Mob Artice: jointures dans SQL Server
C) rejoindre externe:
There are three type of outer join
1) Left Outer Join = Left Join
2) Right Outer Join = Right Join
3) Full Outer Join = Full Join
J'espère que ça aiderait.
Il existe principalement trois types de JOIN
Extérieur: sont de trois types
Cross Join: joint tout à tout
Le sucre syntaxique, il est plus évident pour le lecteur occasionnel que la jointure n'est pas interne.
Juste dans le contexte de cette question, je souhaite également publier les 2 opérateurs "APPLY":
REJOINT:
INNER JOIN = JOIN
OUTER JOIN
LEFT OUTER JOIN = LEFT JOIN
RIGHT OUTER JOIN = RIGHT JOIN
PLEIN OUTER JOIN = PLEIN JOIN
CROSS JOIN
SELF-JOIN : Ce n'est pas exactement un type de jointure séparé. Cela consiste essentiellement à joindre une table à elle-même en utilisant l'une des jointures ci-dessus. Mais j’ai pensé qu’il valait la peine d’être mentionné dans le contexte des discussions JOIN car vous entendrez souvent ce terme dans la communauté des développeurs SQL.
APPLIQUE:
https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/
https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/
Exemple concret, quand utiliser OUTER/CROSS APPLY dans SQL
Je trouve que l'opérateur APPLY est très bénéfique car il offre de meilleures performances que de devoir effectuer le même calcul dans une sous-requête. Elles remplacent également de nombreuses fonctions analytiques dans les anciennes versions de SQL Server. C'est pourquoi je pense qu'après avoir été à l'aise avec JOINS, un développeur SQL devrait essayer d'apprendre les opérateurs APPLY.