Der JOIN-Operator in PostgreSQL ist eines der wichtigsten Werkzeuge für die Arbeit mit Datenbanken. Damit können Sie Daten aus mehreren Tabellen kombinieren, um komplexere Abfragen zu erstellen und umfassendere Informationen zu erhalten.
Ein Beispiel für ein typisches Problem, das mit einer JOIN-Anweisung gelöst wird, könnte das Abrufen von Daten aus zwei Tabellen sein, die unter einer bestimmten Bedingung miteinander verknüpft sind. Sie können beispielsweise die Tabellen Kunden und Aufträge nach dem Feld Kunden-ID kombinieren und Informationen zu den Kunden abrufen, die die Aufträge getätigt haben.
Es gibt verschiedene Arten von JOIN-Anweisungen, von denen jeder für bestimmte Aufgaben geeignet ist. Mit INNER JOIN können Sie beispielsweise nur die Zeilen abrufen, die die Joinbedingung erfüllen, LEFT JOIN alle Zeilen aus der linken Tabelle und die entsprechenden Zeilen aus der rechten Tabelle, RIGHT JOIN alle Zeilen aus der rechten Tabelle und die entsprechenden Zeilen aus der linken Tabelle und schließlich FULL OUTER JOIN alle Zeilen aus beiden Tabellen der ursprünglichen Stichprobe.
Interne Verknüpfung von Tabellen
Ein interner Join kann beispielsweise verwendet werden, um die Tabelle "Bestellungen" und die Tabelle "Artikel" zu kombinieren, um nur Aufträge zu erhalten, die die entsprechenden Artikel enthalten.
Um einen inneren Join auszuführen, verwenden Sie das Schlüsselwort INNER JOIN, gefolgt von den Namen der Tabellen, die Sie zusammenführen möchten, und geben dann die Bedingung für die Übereinstimmung der Spaltenwerte an.
Es folgt eine Beispiel-SQL-Abfrage, die die Tabelle Bestellungen mit der Tabelle Produkte in der Spalte Artikel-ID kombiniert und nur die Zeilen auswählt, in denen Werte übereinstimmen:
- SELECT Bestellungen.Id_bestellungen, Bestellungen.Datum, Ware.Titel
- FROM Bestellungen
- INNER JOIN Produkte
- ON Bestellungen.ID_ARTIKEL = Waren.ID_ARTIKEL;
Das Ergebnis einer solchen Abfrage ist eine Tabelle mit den Spalten "Bestell-ID", "Datum" und "Name", wobei die Werte in der Spalte "Artikel-ID" übereinstimmen.
Externe Tabellenverknüpfung
Es gibt zwei Arten von äußeren Joins: einen äußeren linken JOIN (LEFT OUTER JOIN) und einen äußeren rechten JOIN (RIGHT OUTER JOIN).
Äußerer linker JOIN (LEFT OUTER JOIN) gibt alle Zeilen aus der linken Tabelle und die entsprechenden Zeilen aus der rechten Tabelle zurück. Wenn für Zeilen aus der linken Tabelle keine übereinstimmenden Zeilen in der rechten Tabelle vorhanden sind, sind die Werte in den Spalten, die der rechten Tabelle entsprechen, NULL.
Äußerer rechter JOIN (RIGHT OUTER JOIN) gibt alle Zeilen aus der rechten Tabelle und die entsprechenden Zeilen aus der linken Tabelle zurück. Wenn für Zeilen aus der rechten Tabelle keine übereinstimmenden Zeilen in der linken Tabelle vorhanden sind, sind die Werte in den Spalten, die der linken Tabelle entsprechen, NULL.
Normalerweise wird ein externer Join mit dem JOIN-Operator und dem ON-Schlüsselwort ausgeführt, um eine Join-Bedingung anzugeben. Zum Beispiel:
SELECT *FROM table1LEFT OUTER JOIN table2 ON table1.id = table2.id;
In diesem Beispiel wird der äußere linke Join von Table1 mit table2 in der Spalte id ausgeführt. Die resultierende Tabelle enthält alle Zeilen von table1 und die entsprechenden Zeilen von table2, und die Spaltenwerte von table2 sind für Zeilen, die in table2 nicht vorhanden sind, NULL.
Externe Joins sind nützlich, wenn Sie Informationen aus mehreren Tabellen abrufen möchten, auch wenn in den zu verknüpfenden Spalten keine entsprechenden Werte vorhanden sind. Sie ermöglichen es Ihnen, komplexere Abfragen zu erstellen und vollständige Informationen aus der Datenbank zu erhalten.
LEFT JOIN
Der LEFT JOIN-Operator wird verwendet, um zwei Tabellen nach einer Bedingung zu verbinden, wobei alle Zeilen aus der linken Tabelle und nur die entsprechenden Zeilen aus der rechten Tabelle beibehalten werden. Wenn keine übereinstimmenden Zeilen in der rechten Tabelle gefunden werden, ergeben sich NULL-Werte für die Spalten in der rechten Tabelle.
Beispiel für die Verwendung des LEFT JOIN-Operators:
| id | name |
|---|---|
| 1 | John |
| 2 | Alice |
| 3 | Bob |
| id | user_id | product |
|---|---|---|
| 1 | 1 | Apple |
| 2 | 2 | Orange |
SELECT users.name, orders.product
LEFT JOIN orders ON users.id = orders.user_id;
| name | product |
|---|---|
| John | Apple |
| Alice | Orange |
| Bob | NULL |
Das Beispiel zeigt, dass alle Zeilen aus der Tabelle "users" als Ergebnis gespeichert wurden und nur die entsprechenden Zeilen aus der Tabelle "orders" hinzugefügt wurden. Für einen Bob-Benutzer, für den keine entsprechende Zeile in der Tabelle "orders" gefunden wurde, ist der Wert der Spalte "product" NULL.
RIGHT JOIN
RIGHT JOIN gibt alle Zeilen aus der rechten (zweiten) Tabelle und nur die Zeilen aus der linken (ersten) Tabelle zurück, die die Join-Bedingung erfüllen. Wenn Zeilen aus der rechten Tabelle keine übereinstimmenden Zeilen in der linken Tabelle aufweisen, sind die Werte für leere Felder NULL.
Beispiel für die Verwendung von RIGHT JOIN:
SELECT *FROM Table1RIGHT JOIN Table2 ON Table1.id = Table2.id;
In diesem Beispiel werden die Daten aus zwei Tabellen - Table1 und Table2 - unter Verwendung der Bedingung für die Gleichheit des ID-Felds zusammengeführt. Das Ergebnis ist ein Rowset, das alle Zeilen aus Table2 sowie nur die Zeilen aus Table1 enthält, deren ID-Feldwert dem ID-Feldwert aus Table2 entspricht. Wenn für eine Zeile aus Table2 keine entsprechende Zeile in Table1 vorhanden ist, sind die Werte für die Felder aus Table1 NULL.
Der RIGHT JOIN ist nützlich in Situationen, in denen Sie alle Zeilen aus der rechten Tabelle abrufen müssen, auch wenn sie keine entsprechenden Zeilen in der linken Tabelle haben.
FULL JOIN
Der FULL JOIN-Operator wird in PostgreSQL verwendet, um zwei Tabellen zu verbinden, einschließlich aller Datensätze aus beiden Tabellen. Wenn die Tabellen Datensätze enthalten, die in einer anderen Tabelle keine Übereinstimmungen aufweisen, werden sie ebenfalls in das Ergebnis aufgenommen.
Syntax des FULL JOIN-Operators:
FULL JOIN table2
Wenn Sie den FULL JOIN-Operator in PostgreSQL verwenden, werden alle Zeilen aus beiden Tabellen, die die Merge-Bedingung nicht erfüllen, in das Ergebnis aufgenommen. Wenn in einer der Tabellen kein übereinstimmender Datensatz vorhanden ist, sind alle Werte für diese Tabelle NULL.
Beispiel für die Verwendung des FULL JOIN-Operators:
FULL JOIN orders
In diesem Beispiel kombinieren wir die Tabellen customers und orders mit dem Feld customer_id, um vollständige Informationen zu Kunden und Bestellungen zu erhalten. Das Ergebnis enthält alle Datensätze aus beiden Tabellen, in denen die customer_id, der Kundenname und die order_id angegeben werden. Wenn in einer der Tabellen kein Datensatz vorhanden ist, sind die entsprechenden Werte NULL.
Mit der FULL JOIN-Anweisung können Sie Tabellen zusammenführen, einschließlich aller Datensätze aus beiden Tabellen, und dies ist nützlich, wenn Sie vollständige Informationen aus zwei Tabellen abrufen möchten, unabhängig davon, ob sie über übereinstimmende Datensätze verfügen oder nicht.
Tabellen selbst verbinden
Ein Beispiel für die Selbstverbindung von Tabellen könnte eine Abfrage sein, bei der Paare von Mitarbeitern aus derselben Abteilung mit demselben Gehalt gefunden werden. Dazu können Sie den JOIN-Operator verwenden, der die Tabelle mit sich selbst verbindet.
SELECT a.name AS employee_1, b.name AS employee_2FROM employees a, employees bWHERE a.department = b.departmentAND a.salary = b.salaryAND a.employee_id < b.employee_id;
In diesem Beispiel wird die Tabelle "employees" mit sich selbst verbunden (a und b), wobei die Bedingungen überprüft werden: mitarbeiter aus derselben Abteilung (a.department = b.department), mit demselben Gehalt (a.salary = b.salary) und mit unterschiedlichen Mitarbeiter-IDs (a.employee_id < b.employee_id). Das Ergebnis wäre eine Liste von Paaren von Mitarbeitern mit dem gleichen Gehalt aus derselben Abteilung.
Das Verknüpfen von Tabellen kann ein nützliches Werkzeug sein, wenn Sie Daten analysieren, nach Duplikaten suchen oder komplexe Abfragen ausführen, bei denen Daten aus einer einzelnen Tabelle verglichen werden müssen.
JOIN mit Bedingung
Verwenden Sie das Schlüsselwort, um Tabellenzeilen nach einer bestimmten Bedingung zu verketten ON. Wenn Sie beispielsweise die Tabelle Kunden und die Tabelle Bestellungen haben und diese Tabellen mit dem Feld "customer_id" in beiden Tabellen kombinieren möchten, können Sie die folgende Abfrage schreiben:
SELECT Customers.customer_id, Customers.name, Orders.order_id FROM Customers JOIN Orders ON Customers.customer_id = Orders.customer_id;
In dieser Abfrage verwenden wir den JOIN-Operator, um die Tabellen "Kunden" und "Aufträge" zu kombinieren und die Werte der Spalte "customer_id" zuzuordnen. Das Ergebnis ist ein Rowset, das die Werte für die Felder "customer_id", "name" aus der Tabelle "Kunden" und das Feld "order_id" aus der Tabelle "Bestellungen" enthält, wobei die Werte für "customer_id" übereinstimmen.
Mit einem JOIN mit einer Bedingung können Sie Daten aus mehreren Tabellen effizient unter Verwendung bestimmter Verknüpfungsbedingungen zusammenführen. Dies ist besonders nützlich, wenn Sie mit großen Datenmengen und komplexen Datenbankstrukturen arbeiten.
JOIN mit kombinierten Bedingungen
Mit der JOIN-Anweisung in PostgreSQL können Sie Daten aus verschiedenen Tabellen basierend auf bestimmten Bedingungen zusammenführen. Mit kombinierten Bedingungen können Sie mehrere Bedingungen für die Datenzusammenführung angeben.
Um kombinierte Bedingungen in einer JOIN-Anweisung zu verwenden, müssen Sie das Schlüsselwort AND verwenden. Wenn Sie beispielsweise die Tabellen users und orders unter der Bedingung kombinieren möchten, dass der Benutzer eine Bestellung getätigt hat und sein Status "abgeschlossen" ist, können Sie die folgende Abfrage verwenden:
SELECT u.name, o.order_dateFROM users uJOIN orders o ON u.id = o.user_idAND o.status = 'completed';
In diesem Beispiel wählen wir Benutzernamen und Auftragsdaten aus den Tabellen users bzw. orders aus. Kombinierte Bedingung u.id = o.user_id AND o.status = 'completed' stellt sicher, dass nur abgeschlossene Aufträge ausgewählt werden, die mit den entsprechenden Benutzern verknüpft sind.
Die kombinierten Bedingungen in der JOIN-Anweisung in PostgreSQL bieten Flexibilität und Bequemlichkeit, wenn Daten aus verschiedenen Tabellen über mehrere Bedingungen gleichzeitig zusammengeführt werden. Dadurch können Sie die Daten effizient filtern und die gewünschten Ergebnisse erzielen.