Wenn ich richtig verstehe, jeder RIGHT JOIN
:
SELECT Persons.*, Orders.*
FROM Orders
RIGHT JOIN Persons ON Orders.PersonID = Persons.ID
kann ausgedrückt werden als LEFT JOIN
:
SELECT Persons.*, Orders.*
FROM Persons
LEFT JOIN Orders ON Persons.ID = Orders.PersonID
Meine persönliche Meinung ist, dass die Absicht der Aussage ist:
- Holen Sie sich zuerst die
Persons
- Erweitern / wiederholen Sie dann die
Persons
erforderlichen Schritte, um sie an die anzupassenOrders
wird besser durch die Reihenfolge von ausgedrückt Persons LEFT JOIN Orders
als durch die umgekehrte Reihenfolge Orders RIGHT JOIN Persons
(und ich benutze nie RIGHT JOIN
als Ergebnis).
Gibt es Situationen, in denen a RIGHT JOIN
bevorzugt wird? Oder gibt es Anwendungsfälle, in denen RIGHT JOIN
etwas LEFT JOIN
nicht möglich ist?
database-design
sql
relational-database
Zev Spitz
quelle
quelle
RIGHT JOIN
empfohlen oder üblicher ist. Wenn das Ihre Prämisse ist, ist es falsch. Ich kann mir keine Zeit vorstellen, in der ich je einen richtigen Join gesehen habe, der weder in Code noch in Beispielen verwendet wird. Es istJOIN
oderLEFT OUTER JOIN
. In seltenen Fällen sehen Sie uFULL OUTER JOIN
.Antworten:
Das hängt davon ab, welche Anforderung Sie erfüllen möchten.
Es ist nicht dasselbe zu sagen: "Gib allen Personen und ihren entsprechenden Befehlen etwas" , "Ich möchte alle Befehle mit ihren entsprechenden Personen" , insbesondere, wenn Sie
is null
Zeilen mit keinem entsprechenden Treffer bringen. Das nenne ich die "dominante Tabelle". Dies ist die Tabelle, von der ich Zeilen abrufen möchte, unabhängig davon, ob sich auf der anderen Seite des Joins keine entsprechende Zeile befindet.Schauen Sie sich diese Bilder an und Sie werden feststellen, dass sie nicht gleich sind:
Quelle des Bildes ist dieser hervorragende Artikel .
Sie haben jedoch Recht, dass beide Anforderungen erfüllt werden können, wenn Sie entweder einen Join ausführen oder die Reihenfolge der Tabellen im Join umkehren.
Aber ich denke, dass es für westliche Leute, die es gewohnt sind, von links nach rechts zu schreiben, natürlicher ist, linke Verknüpfungen über rechte Verknüpfungen zu verwenden , da wir sehen , dass die Verknüpfungen in der gleichen Richtung oder in der gleichen Reihenfolge wie die
select
Spalten ed sein sollen.Ein möglicher Grund für die Bevorzugung einer rechten Verknüpfung ist, dass Sie in Ihrer Kultur von rechts nach links schreiben (wie in den arabischen oder hebräischen Schriftsystemen) und dass Sie dazu neigen, so zu denken, was bedeutet, dass Textinformationen in Ihrem Gehirn möglicherweise von rechts nach links fließen .
Einige Linguisten glauben, dass Ihre Sprache Ihre Denkweise beeinflusst: https://www.edge.org/conversation/lera_boroditsky-how-does-our-language-shape-the-way-we-think
quelle
LEFT JOIN
noch natürlicher.Es gibt nichts (wovon ich weiß), das mit einer rechten Verknüpfung durchgeführt werden kann, das nicht mit einer linken Verknüpfung durchgeführt werden kann. Aber manchmal ist die Syntax mit Left Joins hässlicher. Angenommen, Sie haben die folgenden Tabellen:
Angenommen, Sie benötigen eine Liste aller Personen in Ihrer Datenbank und aller Bestellungen, die sie mit speziellen Bestelldetails haben (wir werden sagen, dass nicht alle Bestellungen spezielle Bestelldetails haben). Normalerweise führt man also einen Link-Join von Personen zu Befehlen durch. Dann müssen Sie jedoch spezielle Bestelldetails angeben. Wenn Sie dort einen inneren Join verwenden, wird der linke Join von Personen zu Befehlen in einen inneren Join umgewandelt. IE: Dies ist, was Sie tun möchten, aber nicht funktioniert (es wird jeden ausschließen, der keine spezielle Bestellung hat):
Sie könnten es also so umschreiben:
Nicht genau klar (vorausgesetzt, keine Kommentare), aber es macht den Job. Wenn dies mehr als eine einmalige Aktion ist (dh, jemand muss eines Tages zurückkehren und warten), könnte die Verwendung eines richtigen Joins klarer machen, was die Absicht war.
Was etwas prägnanter und klarer ist (aber nur, wenn jeder, der es liest, die richtigen Verknüpfungen versteht). Beachten Sie, dass dies mit Left-Joins geschrieben werden kann, jedoch ein verschachtelter Join erforderlich ist (mit dem wahrscheinlich weniger Leute vertraut sind als mit Right-Joins).
An diesem Punkt können Sie auswählen, was am klarsten ist und was die meisten Leute verstehen werden.
Kurz gesagt, Sie benötigen nicht unbedingt die richtigen Verknüpfungen, aber sie erleichtern möglicherweise das Lesen.
quelle
SELECT p.*, o.*, d.* FROM Persons p LEFT JOIN Orders o ON o.CustomerID = p.ID LEFT JOIN SpecialOrders d ON o.Id = d.OrderID
.Ich konnte einen RECHTEN JOIN sehen, der für Replikations- / Zusammenführungszwecke verwendet wird. Nehmen wir an, ich habe zwei Tische A und B. A ist links und B ist rechts. Angenommen, ich wollte Daten zwischen diesen beiden Tabellen replizieren, um sie gleichwertig zu machen.
Wenn ich alle Daten anzeigen wollte, die in A, aber nicht in B waren, wäre dies eine LINKE Verknüpfung. Wenn ich alle Daten in B anzeigen wollte, die nicht in A waren, würde es sich RECHTS anschließen.
Daher sind LINKS und RECHTS manchmal nützlich, wenn Daten zusammengeführt und repliziert werden, um die Zukunft zu sichern.
Abgesehen davon sehe ich keinen anderen Grund für die Verwendung eines RIGHT-Joins, da alle RIGHT-Joins in LEFT-Joins konvertiert werden können oder umgekehrt alle LEFT-Joins in RIGHT-Joins konvertiert werden können, je nachdem, wie die Tabellen sortiert oder dargestellt werden. In anderen Fällen wäre es also eine Frage der Präferenz.
Hier ist ein schöner Link zur Visualisierung von SQL Joins.
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
quelle
left join ist nicht das Gegenteil von right join. Überprüfen Sie den folgenden Fall, der unterschiedliche Ergebnisse liefert
Tabellen b und c sind immer inner verbunden, aber in der ersten wird a mit den anderen verbunden gelassen und in der zweiten wird a mit der rechten verbunden
left join gibt keine Zeilen zurück, right join gibt eine Zeile zurück
quelle
Es gibt keinen Grund, es vorzuziehen
RIGHT JOIN
, und esLEFT JOIN
ist viel klarer:So können Sie sofort sehen, welche Tabelle abgefragt wird. Während mit
RIGHT JOIN
:Die erste Tabelle wird nach dem geschrieben
JOIN
.Nach meiner Erfahrung habe ich noch nie einen gesehen
RIGHT JOIN
.quelle
RIGHT JOIN
? .