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?
Hier ist eine visuelle Erklärung von SQL Joins von Jeff, die einige Ihrer Fragen beantworten können.
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:
Ein SQL INTERSECTION
gibt Zeilen zurück, die zwei separaten Tabellen gemeinsam sind, die bereits die gleichen Spalten haben müssen.
Dies erzeugt das gleiche Ergebnis wie der folgende Join:
%Vor% Nicht jede Datenbankmarke unterstützt den Operator INTERSECTION
.
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:
Diese Seite auf Jeff Atwoods Blog beschreibt andere Möglichkeiten.
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.
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:
Abrufen allgemeiner Zeilen mit INNER JOIN
(Dies zeigt keine Ausgabe an):
Abrufen allgemeiner Zeilen mit INTERSECT
(Dies zeigt die gemeinsame Zeile korrekt an):
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.
Tags und Links sql mysql join intersection union