Ich frage mich, wie man all diese verschiedenen Verbindungen unterscheiden kann ...
Antworten
Zu viele Anzeigen?Einfaches Beispiel : Angenommen, Sie haben eine Students
Tabelle, und eine Lockers
Tisch. In SQL ist das die erste Tabelle, die Sie in einer Verknüpfung angeben, Students
ist die LINKS Tabelle und die zweite Tabelle, Lockers
ist die RECHTS Tisch.
Jedem Schüler kann ein Schließfach zugewiesen werden, so dass es eine LockerNumber
Spalte in der Student
Tisch. Möglicherweise befinden sich mehrere Schüler in einem einzigen Schließfach, aber vor allem zu Beginn des Schuljahres kann es vorkommen, dass Sie einige neue Schüler ohne Schließfächer haben und einige Schließfächer keinen Schülern zugewiesen sind.
Nehmen wir für dieses Beispiel an, Sie haben 100 Studenten 70 davon haben Schließfächer. Sie haben insgesamt 50 Schließfächer 40 davon haben mindestens 1 Schüler und 10 Schließfächer haben keinen Schüler.
INNER JOIN
ist gleichbedeutend mit " Zeige mir alle Schüler mit Schließfächern ".
Alle Schüler ohne Schließfächer oder alle Schließfächer ohne Schüler fehlen.
Gibt 70 Zeilen zurück
LEFT OUTER JOIN
wäre " Zeigen Sie mir alle Schüler mit ihrem jeweiligen Schließfach, falls sie eines haben ".
Dabei kann es sich um eine allgemeine Schülerliste handeln, aber auch um eine Liste von Schülern ohne Schließfach.
Gibt 100 Zeilen zurück
RIGHT OUTER JOIN
wäre " mir alle Schließfächer und die ihnen zugewiesenen Schüler zeigen, falls es welche gibt ".
Auf diese Weise können Schließfächer identifiziert werden, denen keine Schüler zugewiesen sind, oder Schließfächer mit zu vielen Schülern.
Gibt 80 Zeilen zurück (Liste der 70 Schüler in den 40 Schließfächern, plus die 10 Schließfächer ohne Schüler)
FULL OUTER JOIN
wäre albern und wahrscheinlich nicht sehr nützlich.
Etwas wie " Zeigen Sie mir alle Schüler und alle Schließfächer, und ordnen Sie sie zu, wo Sie können "
Gibt 110 Zeilen zurück (alle 100 Schüler, einschließlich derer ohne Schließfächer. Plus die 10 Schließfächer ohne Schüler)
CROSS JOIN
ist auch in diesem Szenario ziemlich albern.
Es verwendet nicht die verlinkten lockernumber
in der Tabelle "Schüler", so dass Sie am Ende eine riesige Liste aller möglichen Schüler-Schließfach-Kombinationen haben, unabhängig davon, ob sie tatsächlich existieren oder nicht.
Gibt 5000 Zeilen zurück (100 Schüler x 50 Schließfächer). Könnte (mit Filterung) als Ausgangspunkt für die Zuordnung der neuen Schüler zu den leeren Schließfächern nützlich sein.
Es gibt drei grundlegende Arten von Verbindungen:
INNER
join vergleicht zwei Tabellen und gibt nur Ergebnisse zurück, wenn eine Übereinstimmung besteht. Datensätze aus der ersten Tabelle werden dupliziert, wenn sie mit mehreren Ergebnissen in der zweiten Tabelle übereinstimmen. INNER-Joins führen in der Regel zu kleineren Ergebnismengen, aber da Datensätze dupliziert werden können, ist dies nicht garantiert.CROSS
join vergleicht zwei Tabellen und gibt jede mögliche Kombination von Zeilen aus beiden Tabellen zurück. Diese Art der Verknüpfung kann viele Ergebnisse liefern, die möglicherweise nicht einmal sinnvoll sind, daher ist bei der Verwendung Vorsicht geboten.OUTER
join vergleicht zwei Tabellen und gibt Daten zurück, wenn eine Übereinstimmung vorhanden ist, ansonsten NULL-Werte. Wie bei der INNER-Verknüpfung werden auch hier Zeilen in der einen Tabelle dupliziert, wenn mehrere Datensätze in der anderen Tabelle übereinstimmen. OUTER-Joins führen dazu, dass die Ergebnismengen größer werden, da sie selbst keine Datensätze aus der Menge entfernen. Sie müssen einen OUTER-Join auch qualifizieren, um zu bestimmen, wann und wo die NULL-Werte hinzugefügt werden sollen:LEFT
bedeutet, dass alle Datensätze aus der 1. Tabelle auf jeden Fall erhalten bleiben und NULL-Werte eingefügt werden, wenn die 2. Tabelle nicht übereinstimmt.RIGHT
bedeutet das Gegenteil: alle Datensätze aus der 2. Tabelle behalten, egal was passiert, und NULL-Werte einfügen, wenn die 1.FULL
bedeutet, alle Datensätze aus beiden Tabellen zu behalten und einen NULL-Wert in eine der beiden Tabellen einzufügen, wenn es keine Übereinstimmung gibt.
Oft sieht man die OUTER
Schlüsselwort in der Syntax weggelassen. Stattdessen heißt es einfach "LEFT JOIN", "RIGHT JOIN" oder "FULL JOIN". Dies geschieht, weil INNER- und CROSS-Joins keine Bedeutung in Bezug auf LEFT, RIGHT oder FULL haben und diese daher ausreichen, um einen OUTER-Join eindeutig anzuzeigen.
Im Folgenden finden Sie ein Beispiel dafür, wann Sie die einzelnen Typen verwenden sollten:
INNER
: Sie möchten alle Datensätze aus der Tabelle "Invoice" mit den entsprechenden "InvoiceLines" zurückgeben. Dabei wird davon ausgegangen, dass jede gültige Rechnung mindestens eine Zeile enthält.OUTER
: Sie möchten alle "InvoiceLines"-Datensätze für eine bestimmte Rechnung zusammen mit den entsprechenden "InventoryItem"-Datensätzen zurückgeben. Es handelt sich um ein Unternehmen, das auch Dienstleistungen verkauft, so dass nicht alle InvoiceLines einen IventoryItem haben.CROSS
: Sie haben eine Zahlentabelle mit 10 Zeilen, die jeweils die Werte '0' bis '9' enthalten. Sie möchten eine Tabelle mit einem Datumsbereich erstellen, um sie zu verknüpfen, so dass Sie am Ende einen Datensatz für jeden Tag innerhalb des Bereichs haben. Durch wiederholtes CROSS-joining dieser Tabelle mit sich selbst können Sie so viele aufeinanderfolgende Ganzzahlen erstellen, wie Sie benötigen (da Sie bei 10 hoch 1 beginnen, wird bei jedem Join 1 zum Exponenten addiert). Verwenden Sie dann die Funktion DATEADD(), um diese Werte zu Ihrem Basisdatum für den Bereich zu addieren.
Es gibt nur 4 Arten:
- Innere Verbindung : Der häufigste Typ. Für jedes Paar von Eingabezeilen, die mit den Join-Bedingungen übereinstimmen, wird eine Ausgabezeile erzeugt.
- Linke äußere Verknüpfung : Dasselbe wie eine innere Verknüpfung, mit dem Unterschied, dass, wenn es eine Zeile gibt, für die keine passende Zeile in der rechten Tabelle gefunden werden kann, eine Zeile ausgegeben wird, die die Werte aus der linken Tabelle enthält, mit
NULL
für jeden Wert in der Tabelle auf der rechten Seite. Das bedeutet, dass jede Zeile der linken Tabelle mindestens einmal in der Ausgabe erscheint. - Rechte äußere Verknüpfung : Dasselbe wie ein Left Outer Join, nur mit umgekehrten Rollen der Tabellen.
- Vollständige äußere Verknüpfung : Eine Kombination aus linken und rechten Outer-Joins. Jede Zeile aus beiden Tabellen wird mindestens einmal in der Ausgabe erscheinen.
Ein "Cross-Join" oder "Cartesian-Join" ist einfach ein Inner-Join, für den keine Join-Bedingungen angegeben wurden, was dazu führt, dass alle Zeilenpaare ausgegeben werden.
Danke an RusselH für den Hinweis auf FULL joins, den ich übersehen hatte.
SQL JOINS Unterschied:
Sehr einfach zu merken:
INNER JOIN
nur Datensätze anzeigen, die beiden Tabellen gemeinsam sind.
OUTER JOIN
Der gesamte Inhalt der beiden Tabellen wird zusammengeführt, entweder sie stimmen überein oder nicht.
LEFT JOIN
ist identisch mit LEFT OUTER JOIN
- (Wählen Sie Datensätze aus der ersten (linken) Tabelle mit passenden Datensätzen aus der rechten Tabelle aus).
RIGHT JOIN
ist identisch mit RIGHT OUTER JOIN
- (Wählen Sie Datensätze aus der zweiten (rechten) Tabelle mit übereinstimmenden Datensätzen der linken Tabelle aus).
Vérifiez Join (SQL) auf Wikipedia
-
Inner Join - Bei zwei Tabellen gibt ein Inner Join alle Zeilen zurück, die in beiden Tabellen vorhanden sind.
-
linke/rechte (äußere) Verknüpfung - Bei zwei Tabellen werden alle Zeilen zurückgegeben, die entweder in der linken oder der rechten Tabelle Ihrer Verknüpfung vorhanden sind, und die Zeilen der anderen Seite werden zurückgegeben, wenn die Verknüpfungsklausel übereinstimmt, oder es wird null für diese Spalten zurückgegeben
-
Full Outer - Bei zwei Tabellen werden alle Zeilen zurückgegeben, und es werden Nullen zurückgegeben, wenn entweder die linke oder die rechte Spalte nicht vorhanden ist
-
Cross Joins - kartesische Verbindungen, die bei unvorsichtiger Anwendung gefährlich sein können
- See previous answers
- Weitere Antworten anzeigen