2063 Stimmen

LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

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

342 Stimmen

Keine! Die OUTER Schlüsselwort ist optional.

30 Stimmen

Venn-Diagramme sind für die Beantwortung dieser Frage nicht geeignet. Die Antwort auf diese Frage lautet Keine . Siehe den ersten Kommentar.

7 Stimmen

Venn-Diagramme veranschaulichen die Differenz der Ausgangszeilen para Sonderfälle de innere vs. äußere Verknüpfung . Wenn keine Nullen oder doppelten Zeilen eingegeben werden (so können wir eine Tabelle als eine Menge von zeilenbewerteten Werten betrachten und normale mathematische Gleichheit verwenden) dann enthalten die linken und rechten Kreise die Ausgabetabellen/-mengen der linken und rechten Verknüpfung . Wenn jedoch Nullen oder doppelte Zeilen eingegeben werden, ist es so schwierig zu erklären, woraus die Kreise bestehen und wie sich diese Kreise zu den Ein- und Ausgabetabellen/-taschen verhalten, dass Venn-Diagramme nicht hilfreich sind. Siehe meine Kommentare zu anderen Missbräuchen des Venn-Diagramms hier.

2736voto

Lasse V. Karlsen Punkte 364542

Wie in der Dokumentation angegeben: FROM (Transact-SQL) :

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

Das Schlüsselwort OUTER ist als optional gekennzeichnet (in eckigen Klammern). In diesem speziellen Fall ist es egal, ob Sie OUTER oder nicht, macht keinen Unterschied. Beachten Sie, dass die anderen Elemente der Verknüpfungsklausel zwar ebenfalls als optional gekennzeichnet sind, die sie aus se einen Unterschied machen.

Zum Beispiel wird der gesamte Typenteil der JOIN Klausel ist optional, in diesem Fall ist der Standardwert INNER wenn Sie nur angeben JOIN . Mit anderen Worten: Das ist legal:

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

Hier finden Sie eine Liste gleichwertiger 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. mehrere Tabellen in der FROM-Zeile? .

enter image description here

167 Stimmen

Völlig richtig. OUTER ist aus Gründen der ANSI-92-Kompatibilität erlaubt.

24 Stimmen

@LasseV.Karlsen wäre es nicht besser, eine INNER JOIN auf der rechten Seite und nur JOIN auf der linken Seite in der Liste der Äquivalente?

12 Stimmen

@LasseV.Karlsen Ich meinte nur, dass die linke Seite die Kurzform und die rechte Seite die erweiterte Form hat. Ich dachte, es wäre kohärent, wenn Sie das Gleiche für JOIN s auch.

880voto

sactiw Punkte 20857

Um Ihre Frage zu beantworten Es gibt keinen Unterschied zwischen LEFT JOIN und LEFT OUTER JOIN, sie sind genau dasselbe das heißt...

Auf der obersten Ebene gibt es hauptsächlich 3 Arten von Verbindungen:

  1. INNERES
  2. OUTER
  3. CROSS

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

  2. OUTER JOIN sind von 3 Typen:

    1. LEFT OUTER JOIN - holt Daten ab, wenn sie in der linken Tabelle vorhanden sind.
    2. RIGHT OUTER JOIN - holt Daten ab, wenn sie in der richtigen Tabelle vorhanden sind.
    3. FULL OUTER JOIN - holt Daten ab, wenn sie in einer der beiden Tabellen vorhanden sind.
  3. CROSS JOIN tut, wie der Name schon sagt, Folgendes [n X m] die alles mit allem verbindet.
    Ähnlich dem Szenario, in dem wir einfach die Tabellen für die Verknüpfung auflisten (in der FROM Klausel des SELECT Anweisung), wobei sie durch Kommata getrennt werden.


Zu beachtende Punkte:

  • Wenn Sie nur erwähnen JOIN dann ist es standardmäßig ein INNER JOIN .
  • Eine OUTER Verbindung muss sein LEFT | RIGHT | FULL kann man nicht einfach sagen OUTER JOIN .
  • Sie können die OUTER Schlüsselwort und sagen Sie einfach LEFT JOIN o RIGHT JOIN o FULL JOIN .

Für diejenigen, die sich diese besser vorstellen wollen, sei auf diesen Link verwiesen: Eine visuelle Erläuterung von SQL-Joins

23 Stimmen

Sehr gute Antwort. Es wird klarer, wenn Sie sagen: "LEFT OUTER JOIN - holt alle Daten aus der linken Tabelle mit passenden Daten aus der rechten, wenn voreingestellt." für 2.1 (und ähnliche Änderung für 2.2)

3 Stimmen

Sie können auch eine Kreuzverknüpfung durchführen, indem Sie einfach "select * from TableA,TableB" eingeben.

4 Stimmen

Entschuldigung, wenn ich necrobumping bin, aber ist CROSS JOIN dasselbe wie FULL JOIN ?

449voto

Mitch Wheat Punkte 287474

Was ist der Unterschied zwischen Left Join und Left Outer Join?

Nichts . LEFT JOIN y LEFT OUTER JOIN gleichwertig sind.

14 Stimmen

Dies ist bei Microsoft SQL Server und allen anderen SQL-kompatiblen RDBMS der Fall.

8 Stimmen

Es wäre schön, wenn Sie einen Hinweis oder eine Erklärung hinzufügen würden, warum die OUTER ist fakultativ.

3 Stimmen

Es ist optional, weil es unnötig ist!

94voto

WorkSmarter Punkte 3528

Left Join y Left Outer Join sind eins und die dieselbe . Ersteres ist die Kurzform für Letzteres. Das Gleiche gilt für die Right Join y Right Outer Join Beziehung. Die Demonstration soll die Gleichheit veranschaulichen. Arbeitsbeispiele für jede Abfrage wurden bereitgestellt über SQL-Gefiedel . Mit diesem Tool können Sie die Abfrage direkt bearbeiten.

Gegeben

enter image description here

Linke Fuge y Linke äußere Verbindung

enter image description here

Ergebnisse

enter image description here


Rechts Verbinden y Rechter äußerer Join

enter image description here

Ergebnisse

enter image description here

82voto

andrefsp Punkte 767

Ich bin ein PostgreSQL DBA, soweit ich den Unterschied zwischen äußeren und nicht-äußeren Joins verstehen konnte, ist dies ein Thema, das überall im Internet diskutiert wird. Bis heute habe ich nie einen Unterschied zwischen diesen beiden gesehen; Also bin ich weiter gegangen und habe versucht, den Unterschied zwischen diesen zu finden. Am Ende habe ich die gesamte Dokumentation dazu gelesen und die Antwort darauf gefunden,

Wenn Sie also in der Dokumentation nachsehen (zumindest in PostgreSQL), können Sie diesen Satz finden:

"Die Worte INNER y OUTER sind in allen Formularen fakultativ. INNER ist die Standardeinstellung; LEFT , RIGHT y FULL eine äußere Verknüpfung implizieren."

Mit anderen Worten,

LEFT JOIN y LEFT OUTER JOIN SIND DIE GLEICHEN

RIGHT JOIN y RIGHT OUTER JOIN SIND DIE GLEICHEN

Ich hoffe, dass es ein Beitrag für diejenigen sein kann, die noch auf der Suche nach der Antwort sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X