2010-04-11 9 views

Antwort

7

Die einzige Art von Join wirklich brauchen ist LEFT OUTER JOIN. Jede andere Art von Join kann in Form von einem oder mehreren linken Outer-Joins und möglicherweise einige Filterung neu geschrieben werden. Warum brauchen wir alle anderen? Will man die Leute nur verwirren? Wäre es nicht einfacher, wenn es nur eine Art von Join gäbe?

Sie könnten auch fragen: Warum haben beide a <= b und b >= a? Tun diese nicht einfach dasselbe? Können wir nicht einfach einen von ihnen loswerden? Es würde die Dinge vereinfachen!

Manchmal ist es einfacher, <= zu >= zu tauschen, anstatt die Argumente um zu tauschen. In ähnlicher Weise sind ein linker Join und ein rechter Join genau das Gleiche, wenn die Operanden getauscht werden. Aber wiederum ist es praktisch, beide Optionen zu haben, anstatt dass die Leute ihre Abfragen in einer bestimmten Reihenfolge schreiben müssen.

Eine andere Sache, die Sie fragen könnte, ist: In der Logik, warum tun wir AND, OR, NOT, XOR, NAND, NOR, etc? All dies kann in Bezug auf NAND s umgeschrieben werden! Warum nicht einfach NAND haben?Nun, es ist awkward ein OR in Bezug auf NAND s zu schreiben, und es ist nicht so offensichtlich, was die Absicht ist - wenn Sie OR schreiben, wissen die Leute sofort, was Sie meinen. Wenn Sie eine Reihe von NAND s schreiben, ist es nicht offensichtlich, was Sie erreichen wollen.

In ähnlicher Weise, wenn Sie a FULL OUTER JOIN b tun möchten, können Sie einen linken Join und einen rechten Join machen, entfernen Sie doppelte Ergebnisse und dann Union alle. Aber das ist ein Schmerz und so gibt es eine Kurzformel dafür.

Wann verwenden Sie jedes? Hier ist eine vereinfachte Regel:

  • Wenn Sie immer eine Ergebniszeile für jede Zeile in der LINKEN Tabelle möchten, verwenden Sie einen LINKEN ÄUSSEREN JOIN.
  • Wenn Sie immer eine Ergebniszeile für jede Zeile in der RECHTEN Tabelle möchten, verwenden Sie eine RECHTE OUTER-Verknüpfung.
  • Wenn Sie immer eine Ergebniszeile für jede Zeile in einer der Tabellen wünschen, verwenden Sie einen FULL OUTER JOIN.
  • Wenn Sie nur eine Ergebniszeile wünschen, wenn in beiden Tabellen eine Zeile vorhanden ist, verwenden Sie einen INNEREN JOIN.
  • Wenn Sie alle möglichen Zeilenpaare, eine Zeile aus jeder Tabelle, wollen, verwenden Sie ein CROSS JOIN.
1

inner join - verbindet Reihen von beiden Sätzen des Spiels auf bestimmte Kriterien.

outer join - wählt alle Elemente eines Satzes aus, zusammen mit passenden oder leeren (falls nicht übereinstimmen) Elementen aus dem anderen Satz. Äußere Verknüpfungen können left oder right sein, um anzugeben, welcher Satz in seiner Gesamtheit zurückgeführt.

1

Um die anderen Antworten klarer zu machen - SIE unterschiedliche Ergebnisse erhalten die Verbindung nach Sie wählen, wenn die Spalten auf Sie Nullwerte enthalten sind Beitritt - zum Beispiel.

So - für jedes Real-life Szenario ist es kommt, dass sie paßt (entweder Sie die Linien ohne die Daten oder nicht in der Nullwert Beispiel wollen).

0

Meine Antwort geht davon aus 2 Tabellen auf einem einzigen Schlüssel verbunden:

  • INNER JOIN - die Ergebnisse erhalten, die in sind beide Tabellen beitreten (nach der Regel kommen)
  • FULL OUTER JOIN - erhalten alle Ergebnisse aus beide Tabelle (Cartesian Produkt)
  • LEFT OUTER JOIN - alle Ergebnisse von links Tisch bekommen und die entsprechenden Ergebnisse von rechts

Sie können WHERE Klauseln hinzufügen, um die Ergebnisse weiter einschränken.

Verwenden Sie diese, um nur zu bekommen, was Sie wollen bekommen.

Verwandte Themen