FULL OUTER JOIN vs. FULL JOIN

81

Spielen Sie einfach mit Abfragen und Beispielen herum, um die Verknüpfungen besser zu verstehen. Ich stelle fest, dass in SQL Server 2008 die folgenden zwei Abfragen dieselben Ergebnisse liefern:

SELECT * FROM TableA
FULL OUTER JOIN TableB
ON TableA.name = TableB.name

SELECT * FROM TableA
FULL JOIN TableB
ON TableA.name = TableB.name

Führen diese genau dieselbe Aktion aus, um dieselben Ergebnisse zu erzielen, oder würde ich in einem komplizierteren Beispiel auf unterschiedliche Ergebnisse stoßen? Ist das nur eine austauschbare Terminologie?

CptSupermrkt
quelle
2
Ja, beide Abfragen führen in SQL Server 2008 R2 zu denselben Ergebnissen.
CptSupermrkt

Antworten:

102

Eigentlich sind sie gleich. LEFT OUTER JOINist gleich wie LEFT JOINund RIGHT OUTER JOINist gleich wie RIGHT JOIN. Es ist eine informativere Art zu vergleichen INNER Join.

Weitere Informationen finden Sie in diesem Wikipedia-Artikel .

John Woo
quelle
3
Perfekt danke. So viele Tutorials, auf die ich gestoßen bin, verwenden diese nach ihrem eigenen Stil, ohne zu beachten, dass sie gleich sind.
CptSupermrkt
2
visuelle Darstellung von Joins: codeproject.com/Articles/33052/…
Hawkeye Parker
36

Microsoft® SQL Server ™ 2000 verwendet diese SQL-92-Schlüsselwörter für äußere Verknüpfungen, die in einer FROM-Klausel angegeben sind:

  • LEFT OUTER JOIN oder LEFT JOIN

  • RIGHT OUTER JOIN oder RIGHT JOIN

  • FULL OUTER JOIN oder FULL JOIN

Von MSDN

Das full outer joinoder full joingibt alle Zeilen aus beiden Tabellen zurück, wobei die Zeilen überall dort abgeglichen werden, wo eine Übereinstimmung hergestellt werden kann, und NULLs an den Stellen platziert werden, an denen keine übereinstimmende Zeile vorhanden ist.

Löwe
quelle
11

Es ist wahr, dass einige Datenbanken das Schlüsselwort OUTER erkennen. Einige nicht. Wo es erkannt wird, ist es normalerweise ein optionales Schlüsselwort. Fast immer machen FULL JOIN und FULL OUTER JOIN genau dasselbe. (Ich kann mir kein Beispiel vorstellen, wo sie es nicht tun. Kann sich noch jemand eines vorstellen?)

Dies kann dazu führen, dass Sie sich fragen: "Warum sollte es überhaupt ein Schlüsselwort sein, wenn es keine Bedeutung hat?" Die Antwort läuft auf den Programmierstil hinaus.

Früher bemühten sich Programmierer, ihren Code so kompakt wie möglich zu gestalten. Jedes Zeichen bedeutete eine längere Verarbeitungszeit. Wir haben Variablen mit 1, 2 und 3 Buchstaben verwendet. Wir haben zweistellige Jahre verwendet. Wir haben alle unnötigen Leerzeichen beseitigt. Einige Leute programmieren immer noch so. Es geht nicht mehr um Bearbeitungszeit. Es geht mehr um schnelles Codieren.

Moderne Programmierer lernen, beschreibendere Variablen zu verwenden und mehr Anmerkungen und Dokumentationen in ihren Code aufzunehmen. Verwenden Sie zusätzliche Wörter wie OUTER, um sicherzustellen, dass andere Personen, die den Code lesen, ihn leichter verstehen. Es wird weniger Mehrdeutigkeiten geben. Dieser Stil ist für die Menschen, die diesen Code in Zukunft pflegen müssen, viel lesbarer und freundlicher.

MarvinM
quelle