Ich verstehe die Notwendigkeit von Selbstverbindungen nicht. Kann mir bitte jemand das erklären?
Ein einfaches Beispiel wäre sehr hilfreich.
Sie können Self-Join als zwei identische Tabellen anzeigen. Bei der Normalisierung können Sie jedoch nicht zwei Kopien der Tabelle erstellen, sondern simulieren lediglich zwei Tabellen mit Self-Join.
Angenommen, Sie haben zwei Tabellen:
emp1
Id Name Boss_id
1 ABC 3
2 DEF 1
3 XYZ 2
emp2
Id Name Boss_id
1 ABC 3
2 DEF 1
3 XYZ 2
Wenn Sie nun den Namen jedes Mitarbeiters mit den Namen seines Chefs abrufen möchten:
select c1.Name , c2.Name As Boss
from emp1 c1
inner join emp2 c2 on c1.Boss_id = c2.Id
Welches wird die folgende Tabelle ausgeben:
Name Boss
ABC XYZ
DEF ABC
XYZ DEF
left join
Ich denke, es wäre besser, den Mitarbeiter (oder Chef), der keinen Chef hat, nicht auszulassen. der Platzhirsch!Es ist durchaus üblich, wenn Sie eine Tabelle haben, die auf sich selbst verweist. Beispiel: Eine Mitarbeitertabelle, in der jeder Mitarbeiter einen Manager haben kann und Sie alle Mitarbeiter und den Namen ihres Managers auflisten möchten.
quelle
Ein Self-Join ist ein Join einer Tabelle mit sich selbst.
Ein häufiger Anwendungsfall ist, wenn in der Tabelle Entitäten (Datensätze) gespeichert sind, zwischen denen eine hierarchische Beziehung besteht . Zum Beispiel eine Tabelle mit Personeninformationen (Name, Geburtsdatum, Adresse ...) und einer Spalte, in der die ID des Vaters (und / oder der Mutter) enthalten ist. Dann mit einer kleinen Abfrage wie
Wir können Informationen über Kind und Vater (und Mutter, mit einem zweiten Selbstbeitritt usw. und sogar Großeltern usw.) in derselben Abfrage erhalten.
quelle
Angenommen, Sie haben einen Tisch
users
, der so eingerichtet ist:In dieser Situation können Sie Folgendes tun , wenn Sie sowohl die Benutzerinformationen als auch die Managerinformationen in einer Abfrage abrufen möchten:
quelle
Sie sind nützlich, wenn Ihre Tabelle selbstreferenziell ist. Beispielsweise kann für eine Seitentabelle jede Seite einen
next
undprevious
-Link haben. Dies wären die IDs anderer Seiten in derselben Tabelle. Wenn Sie irgendwann ein Dreifach aufeinanderfolgender Seiten erhalten möchten, führen Sie zwei Self-Joins für die Spaltennext
undprevious
mit derselbenid
Spalte durch.quelle
Stellen Sie sich eine Tabelle vor, die
Employee
wie unten beschrieben aufgerufen wird. Alle Mitarbeiter haben einen Manager, der auch ein Mitarbeiter ist (möglicherweise mit Ausnahme des CEO, dessen manager_id null wäre).Sie können dann die folgende Auswahl verwenden, um alle Mitarbeiter und ihre Manager zu finden:
quelle
Ohne die Fähigkeit einer Tabelle, sich selbst zu referenzieren, müssten wir so viele Tabellen für Hierarchieebenen erstellen wie die Anzahl der Ebenen in der Hierarchie. Da diese Funktionalität verfügbar ist, verbinden Sie die Tabelle mit sich selbst und SQL behandelt sie als zwei separate Tabellen, sodass alles an einem Ort gespeichert wird.
quelle
Abgesehen von den oben genannten Antworten (die sehr gut erklärt werden) möchte ich ein Beispiel hinzufügen, damit die Verwendung von Self Join leicht gezeigt werden kann. Angenommen, Sie haben eine Tabelle mit dem Namen CUSTOMERS, die die folgenden Attribute aufweist: CustomerID, CustomerName, ContactName, City, Country. Jetzt möchten Sie alle Personen auflisten, die aus derselben Stadt stammen. Sie müssen sich eine Nachbildung dieser Tabelle überlegen, damit wir sie auf der Grundlage von CITY verbinden können. Die folgende Abfrage zeigt deutlich, was es bedeutet:
quelle
Hier gibt es viele richtige Antworten, aber es gibt eine Variation, die ebenso richtig ist. Sie können Ihre Join-Bedingungen in die join-Anweisung anstelle der WHERE-Klausel einfügen.
Denken Sie daran, dass Sie manchmal e1.manager_id> e2.id möchten
Der Vorteil, beide Szenarien zu kennen, besteht manchmal darin, dass Sie eine Menge WHERE- oder JOIN-Bedingungen haben und Ihre Self-Join-Bedingungen in die andere Klausel einfügen möchten, um Ihren Code lesbar zu halten.
Niemand hat angesprochen, was passiert, wenn ein Mitarbeiter keinen Manager hat. Huh? Sie sind nicht in der Ergebnismenge enthalten. Was ist, wenn Sie Mitarbeiter einbeziehen möchten, die keine Manager haben, aber keine falschen Kombinationen zurückgeben möchten?
Versuchen Sie diesen Welpen;
quelle
Ein Anwendungsfall ist die Suche nach doppelten Datensätzen in einer Datenbank.
quelle
Self-Join ist nützlich, wenn Sie die Daten der Tabelle mit sich selbst auswerten müssen. Dies bedeutet, dass die Zeilen aus derselben Tabelle korreliert werden.
Syntax: SELECT * FROM TABLE t1, TABLE t2 WHERE t1.columnName = t2.columnName
Zum Beispiel möchten wir die Namen der Mitarbeiter finden, deren Anfangsbezeichnung der aktuellen Bezeichnung entspricht. Wir können dies mithilfe von Self Join auf folgende Weise lösen.
quelle
Es ist das Datenbankäquivalent einer verknüpften Liste / eines verknüpften Baums, wobei eine Zeile in gewisser Weise einen Verweis auf eine andere Zeile enthält.
quelle
Hier ist die Erklärung der Selbstverbindung in Laienbegriffen. Self Join ist keine andere Art von Join. Wenn Sie andere Arten von Verknüpfungen (innere, äußere und Kreuzverknüpfungen) verstanden haben, sollte die Selbstverknüpfung einfach sein. In INNER, OUTER und CROSS JOINS verbinden Sie zwei oder mehr verschiedene Tabellen. Bei Self Join verbinden Sie jedoch dieselbe Tabelle mit itslef. Hier haben wir nicht zwei verschiedene Tabellen, sondern behandeln dieselbe Tabelle mit Tabellenaliasnamen als eine andere Tabelle. Wenn dies immer noch nicht klar ist, würde ich empfehlen, die folgenden Youtube-Videos anzuschauen.
Self Join mit einem Beispiel
quelle