In SQL ist ein Join tatsächlich eine Kreuzung? Und es ist auch eine Verbindung oder eine "Sideway Union"?

8

Ich dachte immer an ein Join in SQL als eine Art Verknüpfung zwischen zwei Tabellen.

Zum Beispiel

%Vor%

In diesem Fall verknüpft es zwei Tabellen, um jedem Mitarbeiter einen Abteilungsnamen anstelle einer Abteilungs-ID anzuzeigen. Und irgendwie wie eine "Verknüpfung" oder "Union" Sideway ".

Aber nach dem Erlernen von innerem Join vs. äußerem Join zeigt es, dass ein Join (innerer Join) tatsächlich ein Schnittpunkt ist.

Wenn zum Beispiel eine Tabelle die ID 1, 2, 7, 8 hat, während eine andere Tabelle nur die ID 7 und 8 hat, lautet die Art, wie wir die Kreuzung erhalten haben:

%Vor%

um die zwei Datensätze von "7 und 8" zu erhalten. Es ist also eine Kreuzung.

So haben wir die "Kreuzung" von 2 Tabellen. Vergleichen Sie dies mit der Operation "Union" an 2 Tabellen. Kann man sich ein Join als "Schnittpunkt" vorstellen? Aber was ist mit dem "Linking" oder "Sideway Union" -Aspekt davon?

    
太極者無極而生 24.04.2010, 20:43
quelle

5 Antworten

9

Hier ist eine visuelle Erklärung von SQL Joins von Jeff, die einige Ihrer Fragen beantworten können.

    
James Kolpack 24.04.2010, 20:48
quelle
5

Sie sind auf dem richtigen Weg; Die von INNER JOIN zurückgegebenen Zeilen sind diejenigen, die die Join-Bedingungen erfüllen. Dies ist jedoch nur dann eine Schnittmenge, wenn Sie equality in Ihrer Join-Bedingung verwenden, die auf Spalten aus jeder Tabelle angewendet wird.

Beachten Sie auch, dass INTERSECTION bereits eine SQL-Operation ist und eine andere Bedeutung hat - und das ist nicht dasselbe wie JOIN .

Ein SQL JOIN kann einen neuen Typ von Zeile erzeugen, der alle Spalten aus beiden verbundenen Tabellen enthält. Zum Beispiel: col4, col5 und col6 existieren nicht in Tabelle A, aber sie existieren im Ergebnis eines Joins mit Tabelle B:

%Vor%

Ein SQL INTERSECTION gibt Zeilen zurück, die zwei separaten Tabellen gemeinsam sind, die bereits die gleichen Spalten haben müssen.

%Vor%

Dies erzeugt das gleiche Ergebnis wie der folgende Join:

%Vor%

Nicht jede Datenbankmarke unterstützt den Operator INTERSECTION .

    
Bill Karwin 24.04.2010 21:03
quelle
2

Ein Join "Links" oder "Erm" verbindet die Zeilen aus zwei Tabellen. Ich denke, das ist es, was Sie mit "Seitwärtsunion" meinen, obwohl ich persönlich denke, dass dies eine schreckliche Art ist, es zu formulieren. Aber es gibt verschiedene Arten von Joins, die etwas andere Dinge tun:

  • Eine innere Verbindung ist in der Tat eine Kreuzung.
  • Eine vollständige äußere Verknüpfung ist eine Vereinigung.

Diese Seite auf Jeff Atwoods Blog beschreibt andere Möglichkeiten.

    
Mark Byers 24.04.2010 20:49
quelle
0

Ein äußerer Join - bezieht sich nicht auf - Union oder Union All.

Zum Beispiel würde ein 'Null' nicht als Ergebnis der Union- oder Union-All-Operation auftreten, sondern von einem Outer-Join.

    
Manohar Reddy Poreddy 04.07.2015 05:31
quelle
0

INNER JOIN behandelt zwei NULL s als zwei verschiedene Werte. Wenn Sie also basierend auf einer Spalte, die NULL-Werte zulässt, beitreten und beide Tabellen NULL -Werte in dieser Spalte haben, ignoriert INNER JOIN diese Zeilen.

Um also alle gängigen Zeilen zwischen zwei Tabellen korrekt abzurufen, sollte INTERSECT verwendet werden. INTERSECT behandelt zwei NULL s als den gleichen Wert.

Beispiel (SQLite):

Erstellen Sie zwei Tabellen mit nullfähigen Spalten:

%Vor%

Fügen Sie NULL -Werte ein:

%Vor%

Abrufen allgemeiner Zeilen mit INNER JOIN (Dies zeigt keine Ausgabe an):

%Vor%

Abrufen allgemeiner Zeilen mit INTERSECT (Dies zeigt die gemeinsame Zeile korrekt an):

%Vor%

Fazit:

Auch wenn oft sowohl INTERSECT als auch INNER JOIN verwendet werden können, um die gleiche Ergebnisse , sie sind nicht gleich und sollten je nach Situation ausgewählt werden.

    
Yogesh Umesh Vaity 07.06.2016 05:56
quelle

Tags und Links