web-dev-qa-db-fra.com

LEFT JOIN vs LEFT OUTER JOIN dans SQL Server

Quelle est la différence entre LEFT JOIN et LEFT OUTER JOIN?

1435
KG Sosa

Selon la documentation: FROM (Transact-SQL) :

<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN

Le mot clé OUTERest 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 JOINest facultative. Dans ce cas, la valeur par défaut est INNERsi vous ne spécifiez que JOINname__. 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? .

enter image description here

2067

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 ...

Au niveau supérieur, il existe principalement 3 types de jointures:

  1. INTERNE
  2. EXTÉRIEUR
  3. TRAVERSER

  1. INNER JOIN - récupère les données si elles sont présentes dans les deux tables.

  2. OUTER JOIN sont de types 3 :

    1. LEFT OUTER JOIN - récupère les données si elles sont présentes dans la table de gauche.
    2. RIGHT OUTER JOIN - récupère les données si elles sont présentes dans la table de droite.
    3. FULL OUTER JOIN - récupère les données si elles sont présentes dans l'une des deux tables.
  3. 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 FROMde l’instruction SELECTname__), en utilisant des virgules pour les séparer.


Points à noter:

  • Si vous ne faites que mentionner JOINname__, il s'agit par défaut d'un INNER JOIN.
  • Une jointure OUTERdoit être LEFT| RIGHT| FULLvous ne pouvez pas simplement dire OUTER JOIN.
  • Vous pouvez supprimer le mot clé OUTERet 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

670
sactiw

Quelle est la difference entre left join et left outer join?

rien. LEFT JOIN et LEFT OUTER JOIN sont équivalents.

329
Mitch Wheat

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:

"Les mots INNER et OUTER sont facultatifs dans toutes les formes. INNER est la valeur par défaut; LEFT, RIGHT et FULL impliquent une jointure externe."

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.

62
andrefsp

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é

enter image description here

Jointure gauche et Jointure externe gauche

enter image description here

Résultats

enter image description here


Jointure droite et Jointure extérieure droite

enter image description here

Résultats

enter image description here

55
WorkSmarter

Je trouve plus facile de penser aux jointures dans l'ordre suivant:

  • CROSS JOIN - un 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és par la suite.

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.

38
frozenjim

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.

28
Yugo Amaryl

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 Serverenter image description here

24
mass

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/Jointure interne Table B)
  • 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.

19
Delickate

Il existe principalement trois types de JOIN

  1. Inner: récupère les données présentes dans les deux tableaux
    • Seulement JOIN signifie INNER JOIN
  2. Extérieur: sont de trois types

    • LEFT OUTER - - récupère les données présentes uniquement dans le tableau de gauche et la condition correspondante
    • RIGHT OUTER - - récupère les données présentes uniquement dans le tableau de droite et dans la 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"
  3. Cross Join: joint tout à tout

18
Harsh

Le sucre syntaxique, il est plus évident pour le lecteur occasionnel que la jointure n'est pas interne.

14
Unsliced

Juste dans le contexte de cette question, je souhaite également publier les 2 opérateurs "APPLY":

REJOINT:

  1. INNER JOIN = JOIN

  2. OUTER JOIN

    • LEFT OUTER JOIN = LEFT JOIN

    • RIGHT OUTER JOIN = RIGHT JOIN

    • PLEIN OUTER JOIN = PLEIN JOIN

  3. 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:

  1. 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 renvoyer uniquement les lignes correspondantes)
  2. 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 renverrait toutes les lignes de la table de gauche 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 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.

2
san