it-swarm.com.de

Was ist der Unterschied zwischen Left, Right, Outer und Inner Joins?

Ich frage mich, wie all diese verschiedenen Verknüpfungen zu unterscheiden sind ...

538
MrM

Einfaches Beispiel: Nehmen wir an, Sie haben eine Tabelle Students und eine Tabelle Lockers. In SQL ist die erste Tabelle, die Sie in einem Join angeben, Students, die LEFT -Tabelle, und die zweite, Lockers, ist die RECHTE Tabelle.

Jeder Schüler kann einem Schließfach zugewiesen werden, daher gibt es eine LockerNumber -Spalte in der Student -Tabelle. Möglicherweise befindet sich mehr als ein Schüler in einem Schließfach. Vor allem aber zu Beginn des Schuljahres haben Sie möglicherweise einige ankommende Schüler ohne Schließfach 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 entspricht " zeige mir alle Schüler mit Schließfächern ".
Es fehlen alle Schüler ohne Schließfächer oder Schließfächer ohne Schüler.
Gibt 70 Zeilen zurück

LEFT OUTER JOIN wäre " zeige mir alle Schüler mit ihrem entsprechenden Schließfach, wenn sie eines haben ".
Dies kann eine allgemeine Studentenliste sein oder dazu dienen, Studenten ohne Schließfach zu identifizieren.
Gibt 100 Zeilen zurück

RIGHT OUTER JOIN wäre " zeige mir alle Schließfächer und die ihnen zugewiesenen Schüler, wenn 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 mit 70 Schülern in den 40 Schließfächern plus den 10 Schließfächern ohne Schüler)

FULL OUTER JOIN wäre albern und wahrscheinlich nicht viel zu gebrauchen.
Etwas wie " zeige mir alle Schüler und alle Schließfächer und richte sie zusammen, wo du kannst "
Gibt 110 Zeilen zurück (alle 100 Schüler, einschließlich derjenigen ohne Schließfächer. Plus die 10 Schließfächer ohne Schüler)

CROSS JOIN ist auch in diesem Szenario ziemlich albern.
Es wird das verknüpfte Feld lockernumber in der Schülertabelle nicht verwendet, sodass Sie im Grunde eine 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 abzustimmen.

778
BradC

Es gibt drei grundlegende Join-Typen:

  • INNER Join vergleicht zwei Tabellen und gibt nur Ergebnisse zurück, bei denen eine Übereinstimmung vorliegt. Datensätze aus der 1. Tabelle werden dupliziert, wenn sie mit mehreren Ergebnissen aus der 2. Tabelle übereinstimmen. INNER-Joins neigen dazu, Ergebnismengen zu verkleinern. Da Datensätze jedoch dupliziert werden können, kann dies nicht garantiert werden.
  • 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. Gehen Sie daher vorsichtig vor.
  • OUTER Join vergleicht zwei Tabellen und gibt Daten zurück, wenn eine Übereinstimmung verfügbar ist, oder NULL-Werte, wenn dies nicht der Fall ist. 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, dass alle Datensätze aus der 1. Tabelle beibehalten werden und NULL-Werte eingefügt werden, wenn die 2. Tabelle nicht übereinstimmt.
    • RIGHT bedeutet das Gegenteil: Behalte alle Datensätze aus der 2. Tabelle, egal was passiert, und füge NULL-Werte ein, wenn die 1. Tabelle nicht übereinstimmt.
    • FULL bedeutet, dass alle Datensätze aus beiden Tabellen beibehalten werden und in jede Tabelle ein NULL-Wert eingefügt wird, wenn keine Übereinstimmung vorliegt.

Häufig wird das Schlüsselwort OUTER in der Syntax weggelassen. Stattdessen ist es nur "LEFT JOIN", "RIGHT JOIN" oder "FULL JOIN". Dies geschieht, weil INNER- und CROSS-Joins in Bezug auf LEFT, RIGHT oder FULL keine Bedeutung haben und diese 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 "Invoice" zusammen mit den entsprechenden "InvoiceLines" 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 Geschäft, das auch Dienstleistungen verkauft, so dass nicht alle Rechnungsposten ein InventoryItem haben.
  • 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 ein Join erstellt werden soll, sodass Sie für jeden Tag innerhalb des Bereichs einen Datensatz erhalten. Durch wiederholtes KREUZ-Verknüpfen dieser Tabelle mit sich selbst können Sie so viele aufeinanderfolgende Ganzzahlen erstellen, wie Sie benötigen (vorausgesetzt, Sie beginnen bei 10 zur 1. Potenz, jeder Join addiert 1 zum Exponenten). Verwenden Sie dann die Funktion DATEADD (), um diese Werte zu Ihrem Basisdatum für den Bereich hinzuzufügen.
140
Joel Coehoorn

Es gibt nur 4 Arten:

  1. Innerer Join: Der am häufigsten verwendete Typ. Für jedes Paar von Eingabezeilen, die mit den Join-Bedingungen übereinstimmen, wird eine Ausgabezeile erstellt.
  2. Left Outer Join: Das Gleiche wie ein Inner Join, außer dass eine Zeile mit den Werten aus der Tabelle ausgegeben wird, für die in der Tabelle auf der rechten Seite keine übereinstimmende Zeile gefunden werden kann links mit NULL für jeden Wert in der Tabelle rechts. Dies bedeutet, dass jede Zeile aus der Tabelle auf der linken Seite mindestens einmal in der Ausgabe erscheint.
  3. Right Outer Join: Entspricht einem Left Outer Join, außer dass die Rollen der Tabellen vertauscht sind.
  4. Vollständige äußere Verknüpfung: Eine Kombination aus linken und rechten äußeren Verknüpfungen. Jede Zeile aus beiden Tabellen wird mindestens einmal in der Ausgabe angezeigt.

Ein "Cross Join" oder "Cartesian Join" ist einfach ein innerer Join, für den keine Join-Bedingungen angegeben wurden, sodass alle Zeilenpaare ausgegeben werden.

Vielen Dank an RusselH für den Hinweis auf FULL-Joins, die ich weggelassen hatte.

47
j_random_hacker

SQL JOINS Unterschied:

Sehr einfach zu merken:

INNER JOIN zeigt nur Datensätze an, die beiden Tabellen gemeinsam sind.

OUTER JOIN Alle Inhalte der beiden Tabellen werden zusammengeführt, entweder sie stimmen überein oder nicht.

LEFT JOIN ist dasselbe wie LEFT OUTER JOINWählen Sie Datensätze aus der ersten Tabelle (ganz links) mit übereinstimmenden Datensätzen in der rechten Tabelle aus.)

RIGHT JOIN ist dasselbe wie RIGHT OUTER JOIN - (Wählen Sie Datensätze aus der zweiten Tabelle (ganz rechts) mit übereinstimmenden Datensätzen in der linken Tabelle aus.)

--- (enter image description here

18
Laxmi

Check out Join (SQL) auf Wikipedia

  • Innerer Join - Bei zwei Tabellen gibt ein innerer Join alle Zeilen zurück, die in beiden Tabellen vorhanden sind
  • left/right (outer) join - Bei zwei Tabellen werden alle Zeilen zurückgegeben, die entweder in der linken oder in der rechten Tabelle Ihres Joins vorhanden sind. Außerdem werden die Zeilen von der anderen Seite zurückgegeben, wenn die join-Klausel eine Übereinstimmung ist, oder Null wird für zurückgegeben diese Spalten

  • Full Outer - Bei zwei Tabellen werden alle Zeilen und Nullen zurückgegeben, wenn die linke oder rechte Spalte nicht vorhanden ist

  • Kreuzverbindungen - Kartesische Verbindung, die gefährlich sein kann, wenn sie nicht sorgfältig verwendet wird

9
JoshBerke

LEFT JOIN und RIGHT JOIN sind Arten von OUTER JOINs.

INNER JOIN ist die Standardeinstellung - Zeilen aus beiden Tabellen müssen der Join-Bedingung entsprechen.

4
RussellH

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 mache:

-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
4
lfvv

Innerer Join: Nur Zeilen anzeigen, wenn Daten aus beiden Tabellen vorhanden sind.

äußere Verbindung: (links/rechts) : Zeigt das gesamte Ergebnis von links an/rechte Tabelle mit der gepaarten Zeile ( s ), falls vorhanden oder nicht.

3
Pethő Jonatán

Zuerst musst du 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, werden viele bedeutungslose 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.

Right: Es wird entgegengesetzt zu Left Join zurückgegeben. 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.

Outer: 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. Wir können es leicht mit diesen Join-Methoden bekommen. Denken Sie daran, dass linker und rechter Join auch äußere Joins sind.

Sie können alle Datensätze nur durch Cross-Join abrufen. Aber es könnte teuer werden, wenn es um Millionen von Datensätzen geht. Machen Sie es sich einfach, indem Sie left, right, inner oder outer join verwenden.

vielen Dank

2
HM Nayem