it-swarm.com.de

LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

Was ist der Unterschied zwischen LEFT JOIN und LEFT OUTER JOIN?

1467
KG Sosa

Gemäß der Dokumentation: FROM (Transact-SQL) :

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

Das Schlüsselwort OUTER ist als optional markiert (in eckigen Klammern eingeschlossen). In diesem speziellen Fall spielt es keine Rolle, ob Sie OUTER angeben oder nicht. Beachten Sie, dass auch die anderen Elemente der join-Klausel als optional markiert sind. Lassen Sie jedoch diese weg , um einen Unterschied machen.

Beispielsweise ist der gesamte Typ-Teil der JOIN -Klausel optional. In diesem Fall ist der Standardwert INNER, wenn Sie nur JOIN angeben. Mit anderen Worten, das ist legal:

SELECT *
FROM A JOIN B ON A.X = B.Y

Hier ist eine Liste von äquivalenten Syntaxen:

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

Schauen Sie sich auch die Antwort an, die ich auf diese andere SO Frage hinterlassen habe: SQL left join vs multiple tables on FROM line? .

enter image description here

Zur Beantwortung Ihrer Frage gibt es keinen Unterschied zwischen LEFT JOIN und LEFT OUTER JOIN, sie sind genau die gleichen , die gesagt haben ...

Auf der obersten Ebene gibt es hauptsächlich drei Arten von Joins:

  1. INNERE
  2. ÄUSSERE
  3. KREUZ

  1. INNER JOIN - ruft Daten ab, wenn sie in beiden Tabellen vorhanden sind.

  2. OUTER JOIN sind vom Typ 3 :

    1. LEFT OUTER JOIN - holt Daten, falls in der linken Tabelle vorhanden.
    2. RIGHT OUTER JOIN - holt Daten, falls in der rechten Tabelle vorhanden.
    3. FULL OUTER JOIN - Ruft Daten ab, wenn diese in einer der beiden Tabellen vorhanden sind.
  3. CROSS JOIN , wie der Name schon sagt, macht [n X m], das alles mit allem verbindet.
    Ähnlich wie in einem Szenario, in dem wir die zu verbindenden Tabellen einfach auflisten (in der FROM -Klausel der SELECT -Anweisung) und sie durch Kommas trennen.


Zu beachtende Punkte:

  • Wenn Sie nur JOIN erwähnen, ist dies standardmäßig ein INNER JOIN.
  • Ein OUTER Join muss LEFT | sein RIGHT | FULL Sie können nicht einfach OUTER JOIN sagen.
  • Sie können das Schlüsselwort OUTER löschen und einfach LEFT JOIN oder RIGHT JOIN oder FULL JOIN sagen.

Für diejenigen, die diese besser visualisieren möchten, gehen Sie bitte zu diesem Link: Eine visuelle Erklärung von SQL-Joins

678
sactiw

Was ist der Unterschied zwischen linker Verknüpfung und linker äußerer Verknüpfung?

Nichts. LEFT JOIN und LEFT OUTER JOIN sind gleichwertig.

334
Mitch Wheat

Ich bin ein PostgreSQL-DBA, soweit ich verstehen kann, dass der Unterschied zwischen äußeren und nicht äußeren Joins ein Thema ist, über das im gesamten Internet viel diskutiert wird. Bis heute habe ich keinen Unterschied zwischen diesen beiden gesehen; Also bin ich weiter gegangen und versuche, den Unterschied zwischen diesen zu finden. Am Ende las ich die gesamte Dokumentation darüber und fand die Antwort darauf.

Wenn Sie sich also die Dokumentation ansehen (zumindest in PostgreSQL), finden Sie diesen Ausdruck:

"Die Wörter INNER und OUTER sind in allen Formen optional. INNER ist die Standardeinstellung; LEFT, RIGHT und FULL impliziert einen Outer Join. "

In anderen Worten,

LEFT JOIN und LEFT OUTER JOIN SIND DIE GLEICHEN

RIGHT JOIN und RIGHT OUTER JOIN SIND DIE GLEICHEN

Ich hoffe, dass es ein Beitrag für diejenigen sein kann, die immer noch versuchen, die Antwort zu finden.

63
andrefsp

Left Join und Left Outer Join sind ein und dasselbe . Ersteres ist die Abkürzung für Letzteres. Gleiches gilt für die Beziehung Right Join und Right Outer Join. Die Demonstration wird die Gleichheit veranschaulichen. Arbeitsbeispiele für jede Abfrage wurden über SQL Fiddle bereitgestellt. Dieses Tool ermöglicht die praktische Bearbeitung der Abfrage.

Gegeben

enter image description here

Left Join und Left Outer Join

enter image description here

Ergebnisse

enter image description here


Right Join und Right Outer Join

enter image description here

Ergebnisse

enter image description here

57
WorkSmarter

Ich finde es einfacher, mir Joins in der folgenden Reihenfolge vorzustellen:

  • CROSS JOIN - ein kartesisches Produkt beider Tische. ALLE Verknüpfungen beginnen hier
  • INNER JOIN - ein CROSS JOIN mit einem hinzugefügten Filter.
  • OUTER JOIN - ein INNER JOIN mit fehlenden Elementen (aus der Tabelle LEFT oder RIGHT), die anschließend hinzugefügt werden.

Bis ich dieses (relativ) einfache Modell herausgefunden habe, waren JOINS immer eher eine schwarze Kunst. Jetzt machen sie vollkommen Sinn.

Hoffe das hilft mehr als es verwirrt.

40
frozenjim

Warum sind LEFT/RIGHT und LEFT OUTER/RIGHT OUTER gleich? Lassen Sie uns erklären, warum dieses Vokabular. Beachten Sie, dass es sich bei den Verknüpfungen LINKS und RECHTS um bestimmte Fälle der Verknüpfung ÄUSSERES handelt und daher nichts anderes als ÄUSSERES LINKS/ÄUSSERES RECHTS sein kann. Der OUTER-Join wird auch als FULL OUTER bezeichnet, im Gegensatz zu LEFT- und RIGHT-Joins, die PARTIAL Ergebnisse des OUTER-Joins sind. Tatsächlich:

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)

Es ist jetzt klar, warum diese Operationen Aliase haben, und es ist klar, dass nur drei Fälle existieren: INNER, OUTER, CROSS. Mit zwei Unterkoffern für den OUTER. Der Wortschatz, die Art und Weise, wie Lehrer dies erklären, sowie einige der obigen Antworten lassen häufig den Eindruck entstehen, dass es viele verschiedene Join-Typen gibt. Aber es ist eigentlich sehr einfach.

28
Yugo Amaryl

Zur Beantwortung Ihrer Frage

In SQL Server Joins ist die Syntax OUTER optional

Es wird im folgenden MSDN-Artikel erwähnt: https://msdn.Microsoft.com/en-us/library/ms177634 (v = sql.130) .aspx

Die folgende Liste zeigt also Join-äquivalente Syntaxen mit und ohne OUTER

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

Andere äquivalente Syntaxen

INNER JOIN => JOIN
CROSS JOIN => ,

Ich kann Dotnet Mob Artice nur empfehlen: tritt SQL Server beienter image description here

24
mass

Es gibt nur 3 Joins:

  • A) Kreuzverbindung = kartesisch (z. B. Tabelle A, Tabelle B)
  • B) Inner Join = JOIN (Beispiel: Tabelle A Join/Inner Join-Tabelle B)
  • C) Äußere Verbindung:

       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    
    

Hoffe es würde helfen.

19
Delickate

Es gibt hauptsächlich drei Arten von JOIN

  1. Inner: holt Daten, die in beiden Tabellen vorhanden sind
    • Nur JOIN bedeutet INNER JOIN
  2. Außen: gibt drei Arten

    • LEFT OUTER - - ruft Daten ab, die nur in der linken Tabelle und im übereinstimmenden Zustand vorhanden sind
    • RECHTS AUSSEN - - ruft Daten ab, die nur in der rechten Tabelle und im übereinstimmenden Zustand vorhanden sind
    • FULL OUTER - - Ruft Daten ab, die eine oder beide Tabellen enthalten
    • (LINKS oder RECHTS oder VOLL) OUTER JOIN kann ohne "OUTER" geschrieben werden
  3. Cross Join: Verbindet alles mit allem

18
Harsh

Syntaktischer Zucker macht dem gelegentlichen Leser klarer, dass der Join kein innerer ist.

14
Unsliced

Nur im Zusammenhang mit dieser Frage möchte ich auch die 2 'APPLY'-Operatoren posten:

_ schließt sich _ an :

  1. INNER JOIN = JOIN

  2. OUTER JOIN

    • LEFT OUTER JOIN = LEFT JOIN

    • RIGHT OUTER JOIN = RIGHT JOIN

    • FULL OUTER JOIN = FULL JOIN

  3. CROSS JOIN

SELF-JOIN : Dies ist kein separater Join-Typ. Dies ist im Grunde genommen das Verknüpfen einer Tabelle mit sich selbst unter Verwendung eines der obigen Verknüpfungen. Ich war jedoch der Meinung, dass es wert ist, in den JOIN-Diskussionen erwähnt zu werden, da Sie diesen Begriff von vielen in der SQL Developer-Community hören werden.

_ _ anwenden :

  1. CROSS APPLY - Ähnlich wie INNER JOIN (Hat jedoch den Vorteil, dass für jede Zeile der linken Tabelle etwas in der rechten Tabelle berechnet werden kann und würde nur die passenden Zeilen zurückgeben)
  2. OUTER APPLY - Ähnlich wie LEFT OUTER JOIN (hat jedoch den Vorteil, dass für jede Zeile der linken Tabelle und in der rechten Tabelle etwas berechnet werden kann alle Zeilen aus der linken Tabelle zurückgeben, unabhängig von einer Übereinstimmung in der rechten Tabelle)

https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/

Beispiel aus der Praxis, wenn OUTER/CROSS APPLY in SQL verwendet werden soll

Ich finde den Operator APPLY sehr vorteilhaft, da er eine bessere Leistung bietet als die gleiche Berechnung in einer Unterabfrage. Sie ersetzen auch viele analytische Funktionen in älteren Versionen von SQL Server. Aus diesem Grund glaube ich, dass ein SQL-Entwickler, nachdem er mit JOINS vertraut ist, versuchen sollte, als Nächstes die APPLY-Operatoren zu lernen.

2
san