LEFT JOIN vs LEFT OUTER JOIN dans SQL Server
-
03-07-2019 - |
Question
Quelle est la différence entre LEFT JOIN
et LEFT OUTER JOIN
?
La solution
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 en dehors de la liste 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 spécifiez simplement JOIN . 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: jointure gauche SQL vs tables multiples sur la ligne FROM? .
Autres conseils
Pour répondre à votre question , il n'y a pas de différence entre LEFT JOIN et LEFT OUTER JOIN, ils sont exactement les mêmes que dit ...
Au niveau supérieur, il existe principalement 3 types de jointures:
- INNER
- OUTER
- CROSS
-
INNER JOIN : récupère les données si elles sont présentes dans les deux tableaux.
-
OUTER JOIN sont de types 3 :
-
LEFT OUTER JOIN
: récupère les données si elles sont présentes dans le tableau de gauche. -
RIGHT OUTER JOIN
- récupère les données si elles sont présentes dans le tableau 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,
[n X m]
relie tout à tout.
Similaire au scénario dans lequel nous répertorions simplement les tables à joindre (dans la clauseFROM
de l'instructionSELECT
), en utilisant des virgules pour les séparer.
Points à noter:
- Si vous ne faites que mentionner
JOIN
, il s'agit par défaut d'unINNER JOIN
. - Une jointure
OUTER
doit êtreLEFT
|DROIT
|FULL
vous ne pouvez pas simplement direOUTER JOIN
. - Vous pouvez supprimer le mot clé
OUTER
et simplement direLEFT JOIN
ouRIGHT JOIN
ouFULL JOIN
.
Pour ceux qui souhaitent mieux visualiser ceux-ci, veuillez cliquer sur ce lien: Explication visuelle des jointures SQL
Quelle est la différence entre une jointure gauche et une jointure externe gauche?
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'à ce jour, je n'ai jamais vu de différence entre ces deux Alors je suis allé plus loin et j'essaie 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 à cette question,
Donc, si vous consultez la documentation (du moins dans PostgreSQL), vous pouvez trouver cette phrase:
En d'autres termes,
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.
Les jointures à gauche
et Les jointures externes à gauche
sont un et le identiques . Le premier est le raccourci pour le second. On peut dire la même chose de la relation Jointure droite
et Jointure droite droite
. 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é
Rejoindre la gauche et Rejoindre externe gauche
Résultats
S'inscrire à droite et Jointure externe droite
Résultats
Je trouve plus facile de penser aux jointures dans l'ordre suivant:
- CROSS JOIN - produit cartésien des deux tables. TOUTES les jointures commencent ici
- INNER JOIN - un CROSS JOIN avec un filtre ajouté.
- OUTER JOIN - un INNER JOIN avec des éléments manquants (de la table LEFT ou RIGHT) ajouté ensuite.
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 que cela ne crée de confusion.
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 les résultats PARTIAL de la jointure OUTER. En effet:
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'existe 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 très simple.
Pour répondre à votre question
Dans SQL Server, la syntaxe des jointures OUTER est facultative
.
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 => ,
Fortement recommandé Dotnet Mob Artice: se joint à Sql Server
Il existe principalement trois types de JOIN
- Inner: récupère les données présentes dans les deux tables
- Seulement JOIN signifie INNER JOIN
-
Extérieur: sont de trois types
- LEFT OUTER - - récupère les données présentes uniquement dans le tableau de gauche & amp; condition correspondante
- RIGHT OUTER - - récupère les données présentes uniquement dans le tableau de droite & amp; condition correspondante
- FULL OUTER - - récupère les données présentes dans une table ou dans les deux
- (LEFT ou RIGHT ou FULL) OUTER JOIN peut être écrit sans écrire "OUTER"
-
Cross Join: joint tout à tout
Il n'y a que 3 jointures:
- A) Jointure = cartésienne (E.g: Tableau A, Tableau B)
- B) Jointure interne = JOIN (E.g: Table A jointure / Table de jointure interne B)
-
C) Jointure 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.
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 "APPLIQUER":
JOINS :
-
INNER JOIN = JOIN
-
OUTER JOIN
-
LEFT OUTER JOIN = LEFT JOIN
-
RIGHT OUTER JOIN = RIGHT JOIN
-
JOINT COMPLET OUTER = JOINT COMPLET
-
-
CROSS JOIN
SELF-JOIN : il ne s'agit pas exactement d'un type de jointure distinct. 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.
APPLIQUER :
- CROSS APPLY : similaire à INNER JOIN (mais présente l'avantage supplémentaire de pouvoir calculer quelque chose dans le tableau de droite pour chaque ligne du tableau de gauche et ne renvoie que les lignes correspondantes)
- OUTER APPLY : similaire à LEFT OUTER JOIN (mais présente l'avantage supplémentaire de pouvoir calculer quelque chose dans le tableau de droite pour chaque ligne du tableau de gauche et renvoie toutes les lignes de gauche. table indépendamment d'une correspondance sur la table de droite)
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 APPLICATION OUTER / CROSS en 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 la raison pour laquelle j’estime qu’après être à l’aise avec JOINS, un développeur SQL devrait essayer d’apprendre les opérateurs APPLY.