Ich frage mich, wie ich all diese verschiedenen Verknüpfungen unterscheiden kann ...
Ich frage mich, wie ich all diese verschiedenen Verknüpfungen unterscheiden kann ...
Antworten:
Einfaches Beispiel : Nehmen wir an, Sie haben eine Students
Tabelle und eine Lockers
Tabelle. In SQL ist die erste Tabelle, die Sie in einem Join angeben Students
, die Tabelle LEFT und die zweite Lockers
die Tabelle RIGHT .
Jeder Schüler kann einem Schließfach zugewiesen werden, sodass LockerNumber
die Student
Tabelle eine Spalte enthält . Möglicherweise befindet sich mehr als ein Schüler in einem einzigen Schließfach. Insbesondere zu Beginn des Schuljahres haben Sie jedoch möglicherweise einige ankommende Schüler ohne Schließfächer und einige Schließfächer, denen keine Schüler zugewiesen sind.
Nehmen wir für dieses Beispiel an, Sie haben 100 Schüler , von denen 70 Schließfächer haben. Sie haben insgesamt 50 Schließfächer , von denen 40 mindestens 1 Schüler und 10 Schließfächer keinen Schüler haben.
INNER JOIN ist gleichbedeutend mit " Zeig mir alle Schüler mit Schließfächern ".
Alle Schüler ohne Schließfächer oder Schließfächer ohne Schüler fehlen.
Gibt 70 Zeilen zurück
LEFT OUTER JOIN wäre " zeig mir alle Schüler mit ihrem entsprechenden Schließfach, wenn sie eines haben ".
Dies kann eine allgemeine Schülerliste sein oder zur Identifizierung von Schülern ohne Schließfach verwendet werden.
Gibt 100 Zeilen zurück
RIGHT OUTER JOIN wäre " Zeig mir alle Schließfächer und die ihnen zugewiesenen Schüler, falls es welche gibt ".
Dies kann verwendet werden, um Schließfächer zu identifizieren, denen keine Schüler zugewiesen sind, oder Schließfächer, denen zu viele Schüler zugewiesen sind.
Gibt 80 Zeilen zurück (Liste von 70 Schülern in den 40 Schließfächern plus 10 Schließfächer ohne Schüler)
FULL OUTER JOIN wäre albern und wahrscheinlich nicht sehr nützlich.
Etwas wie " Zeig mir alle Schüler und alle Schließfächer und ordne sie zu, wo du kannst ".
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 dumm.
Das verknüpfte lockernumber
Feld in der Schülertabelle wird nicht verwendet , sodass Sie im Grunde eine große riesige Liste aller möglichen Schüler-Schließfach-Paarungen erhalten, unabhängig davon, ob sie tatsächlich vorhanden sind oder nicht.
Gibt 5000 Zeilen zurück (100 Schüler x 50 Schließfächer). Könnte nützlich sein (mit Filterung) als Ausgangspunkt, um die neuen Schüler mit den leeren Schließfächern abzugleichen.
SELECT * FROM students RIGHT OUTER JOIN lockers...
Dies würde beispielsweise zu einem anderen Ergebnis führen als SELECT * FROM lockers RIGHT OUTER JOIN students...
. Tolle Antwort, aber ich würde gerne sehen, wie es mit vollständigen SQL
Fragen aktualisiert wird
Es gibt drei grundlegende Arten von Verknüpfungen:
INNER
join vergleicht zwei Tabellen und gibt nur Ergebnisse zurück, wenn eine Übereinstimmung vorliegt. Datensätze aus der 1. Tabelle werden dupliziert, wenn sie mit mehreren Ergebnissen in der 2. Tabelle übereinstimmen. INNER-Joins neigen dazu, Ergebnismengen kleiner zu machen. Da Datensätze jedoch 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. Mit dieser Art von Verknüpfung können Sie viele Ergebnisse erzielen, die möglicherweise nicht einmal von Bedeutung sind. Verwenden Sie sie daher mit Vorsicht.OUTER
join vergleicht zwei Tabellen und gibt Daten zurück, wenn eine Übereinstimmung verfügbar ist, oder andernfalls NULL-Werte. Wie beim INNER-Join werden dadurch Zeilen in der einen Tabelle dupliziert, wenn mehrere Datensätze in der anderen Tabelle übereinstimmen. OUTER-Joins neigen dazu, Ergebnismengen zu vergrößern, da sie selbst keine Datensätze aus der Menge entfernen. Sie müssen auch einen OUTER-Join qualifizieren, um zu bestimmen, wann und wo die NULL-Werte hinzugefügt werden sollen:
LEFT
bedeutet, alle Datensätze aus der 1. Tabelle zu behalten, egal was passiert, und NULL-Werte einzufügen, wenn die 2. Tabelle nicht übereinstimmt. RIGHT
bedeutet das Gegenteil: Behalten Sie alle Datensätze aus der 2. Tabelle bei und fügen Sie NULL-Werte ein, wenn die 1. Tabelle nicht übereinstimmt. FULL
bedeutet, alle Datensätze aus beiden Tabellen beizubehalten und in jede Tabelle einen NULL-Wert einzufügen, wenn keine Übereinstimmung vorliegt.Oft sehen Sie, dass das OUTER
Schlüsselwort in der Syntax weggelassen wird. Stattdessen ist es nur "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 für sich allein ausreichen, um einen OUTER-Join eindeutig anzuzeigen.
Hier ist ein Beispiel, wann Sie jeden Typ verwenden möchten:
INNER
: Sie möchten alle Datensätze aus der Tabelle "Rechnung" zusammen mit den entsprechenden "Rechnungszeilen" zurückgeben. Dies setzt voraus, 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. Dies ist ein Unternehmen, das auch Service verkauft, sodass nicht alle InvoiceLines über ein IventoryItem verfügen.CROSS
: Sie haben eine Zifferntabelle mit 10 Zeilen, die jeweils die Werte '0' bis '9' enthalten. Sie möchten eine Datumsbereichstabelle erstellen, für die eine Verknüpfung erstellt werden soll, sodass Sie für jeden Tag innerhalb des Bereichs einen Datensatz erhalten. Durch wiederholtes CROSS-Verknüpfen dieser Tabelle mit sich selbst können Sie so viele aufeinanderfolgende Ganzzahlen erstellen, wie Sie benötigen (vorausgesetzt, Sie beginnen bei 10 bis 1. Potenz, addiert jede Verknüpfung 1 zum Exponenten). Verwenden Sie dann die Funktion DATEADD (), um diese Werte zu Ihrem Basisdatum für den Bereich hinzuzufügen.Es gibt nur 4 Arten:
NULL
für jede Wert in der Tabelle rechts. Dies bedeutet, dass jede Zeile aus der Tabelle links mindestens einmal in der Ausgabe angezeigt wird. Ein "Cross Join" oder "Cartesian Join" ist einfach ein innerer Join, für den keine Join-Bedingungen angegeben wurden, was dazu führt, dass alle Zeilenpaare ausgegeben werden.
Vielen Dank an RusselH für den Hinweis auf FULL Joins, die ich weggelassen 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 wenn sie übereinstimmen oder nicht.
LEFT JOIN
ist dasselbe wie LEFT OUTER JOIN
- (Wählen Sie Datensätze aus der ersten Tabelle (ganz links) mit übereinstimmenden Datensätzen der rechten Tabelle aus.)
RIGHT JOIN
ist dasselbe wie RIGHT OUTER JOIN
- (Datensätze aus der zweiten Tabelle (ganz rechts) mit übereinstimmenden Datensätzen für die linke Tabelle auswählen.)
Schauen Sie sich Join (SQL) auf Wikipedia an
linker / rechter (äußerer) Join - Bei zwei Tabellen werden alle Zeilen zurückgegeben, die entweder in der linken oder rechten Tabelle Ihres Joins vorhanden sind, und die Zeilen von der anderen Seite werden zurückgegeben, wenn die Join-Klausel übereinstimmt oder für null null zurückgegeben wird diese Spalten
Full Outer - Bei zwei Tabellen werden alle Zeilen zurückgegeben und Nullen zurückgegeben, wenn entweder die linke oder die rechte Spalte nicht vorhanden ist
Cross Joins - Kartesische Joins und können gefährlich sein, wenn sie nicht sorgfältig verwendet werden
Es könnte hilfreich sein, es sichtbarer zu machen. Ein Beispiel:
Tabelle 1:
ID_STUDENT STUDENT_NAME
1 Raony
2 Diogo
3 Eduardo
4 Luiz
Tabelle 2:
ID_STUDENT LOCKER
3 l1
4 l2
5 l3
Was ich bekomme, wenn ich es tue:
-Inner join of Table 1 and Table 2:
- Inner join returns both tables merged only when the key
(ID_STUDENT) exists in both tables
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
-Left join of Table 1 and Table 2:
- Left join merges both tables with all records form table 1, in
other words, there might be non-populated fields from table 2
ID_ESTUDANTE NOME_ESTUDANTE LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
-Right join of table 1 and table 2:
- Right join merges both tables with all records from table 2, in
other words, there might be non-populated fields from table 1
ID_STUDENT STUDENT_NAME LOCKER
3 Eduardo l1
4 Luiz l2
5 - l3
-Outter join of table 1 and table 2:
- Returns all records from both tables, in other words, there
might be non-populated fields either from table 1 or 2.
ID_STUDENT STUDENT_NAME LOCKER
1 Raony -
2 Diogo -
3 Eduardo l1
4 Luiz l2
5 - l3
LEFT JOIN
und RIGHT JOIN
sind Arten von OUTER JOIN
s.
INNER JOIN
ist die Standardeinstellung - Zeilen aus beiden Tabellen müssen mit der Verknüpfungsbedingung übereinstimmen.
Innerer Join : Zeigt nur Zeilen an, wenn Daten aus beiden Tabellen vorhanden sind.
Outer - Joins : (links / rechts) : Zeigt alle ergeben sich aus der linken / rechten Tabelle mit den paarigen Zeile ( n ), wenn es vorhanden ist oder nicht.
Zuerst muss man verstehen, was Join macht. Wir verbinden mehrere Tabellen und erhalten ein bestimmtes Ergebnis aus den verknüpften Tabellen. Der einfachste Weg, dies zu tun, ist Cross Join .
Nehmen wir an, Tabelle A hat zwei Spalten A und B. Und Tabelle B hat drei Spalten C und D. Wenn wir Cross Join anwenden, wird eine Menge bedeutungsloser Zeilen erzeugt. Dann müssen wir mit dem Primärschlüssel übereinstimmen, um die tatsächlichen Daten zu erhalten.
Links: Es werden alle Datensätze aus der linken Tabelle und übereinstimmende Datensätze aus der rechten Tabelle zurückgegeben.
Rechts: Es wird entgegengesetzt zu Left Join zurückkehren. Es werden alle Datensätze aus der rechten Tabelle und übereinstimmende Datensätze aus der linken Tabelle zurückgegeben.
Inner: Das ist wie eine Kreuzung. Es werden nur übereinstimmende Datensätze aus beiden Tabellen zurückgegeben.
Außen: Und das ist wie eine Vereinigung. Es werden alle verfügbaren Datensätze aus beiden Tabellen zurückgegeben.
Manchmal benötigen wir nicht alle Daten, und wir sollten auch nur gemeinsame Daten oder Datensätze benötigen. Mit diesen Join-Methoden können wir es leicht bekommen. Denken Sie daran, dass linker und rechter Join auch äußerer Join sind.
Sie können alle Datensätze nur mit Cross Join abrufen. Aber es könnte teuer sein, wenn es um Millionen von Datensätzen geht. Machen Sie es sich einfach, indem Sie die linke, rechte, innere oder äußere Verbindung verwenden.
Vielen Dank