Direkt zum Inhalt
Urkunden
JSON-FunktionenTabellen & Schema ManagementMathe-FunktionenDatenbankenString-FunktionenAuslöserIndizesDatum FunktionenBasic Syntax

PostgreSQL FULL JOIN

Der `FULL JOIN` in PostgreSQL kombiniert die Ergebnisse von `LEFT JOIN` und `RIGHT JOIN`. Sie gibt alle Datensätze zurück, wenn es entweder in der linken oder in der rechten Tabelle eine Übereinstimmung gibt, und füllt `NULLs` aus, wenn es keine Übereinstimmung gibt.

Verwendung

Der `FULL JOIN` wird verwendet, wenn du alle Datensätze aus zwei Tabellen abrufen und Zeilen einschließen willst, die in keiner der beiden Tabellen direkt übereinstimmen. Sie ist besonders nützlich für Datensätze, die in der anderen Tabelle möglicherweise nicht übereinstimmen.

sql
SELECT columns
FROM table1
FULL JOIN table2 ON table1.common_column = table2.common_column;

In dieser Syntax führt `FULL JOIN` Zeilen aus `Tabelle1` und `Tabelle2` auf der Grundlage einer gemeinsamen Spalte zusammen, einschließlich nicht übereinstimmender Zeilen aus beiden Tabellen.

Beispiele

1. Basic FULL JOIN

sql
SELECT *
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Dieses Beispiel ruft alle Datensätze aus den Tabellen "Mitarbeiter" und "Abteilungen" ab, gleicht sie anhand von "Abteilungsnummer" und "ID" ab und fügt "NULLs" für nicht übereinstimmende Zeilen ein.

2. FULL JOIN mit WHERE verwenden

sql
SELECT employees.name, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
WHERE departments.name IS NOT NULL;

Diese Abfrage kombiniert den `FULL JOIN` mit einer `WHERE`-Klausel, um Ergebnisse herauszufiltern, bei denen der Abteilungsname `NULL` ist, und zeigt, wie die Ergebnisse nach dem JOIN verfeinert werden können.

3. FULL JOIN mit Aggregation

sql
SELECT employees.dept_id, COUNT(employees.id) AS employee_count, departments.name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id
GROUP BY employees.dept_id, departments.name;

In diesem Beispiel wird `FULL JOIN` mit `GROUP BY` verwendet, um die Daten zu aggregieren und die Anzahl der Mitarbeiter pro Abteilung zu ermitteln, einschließlich der Abteilungen ohne Mitarbeiter.

4. Umgang mit NULL-Werten

sql
SELECT COALESCE(employees.name, 'No Employee') AS employee_name, 
       COALESCE(departments.name, 'No Department') AS department_name
FROM employees
FULL JOIN departments ON employees.dept_id = departments.id;

Dieses Beispiel demonstriert den Umgang mit `NULL`-Werten, indem es `COALESCE` verwendet, um Standardwerte für nicht übereinstimmende Zeilen bereitzustellen.

Vergleich der JOIN-Typen

  • LEFT JOIN: Gibt alle Datensätze aus der linken Tabelle und die übereinstimmenden Datensätze aus der rechten Tabelle zurück. Nicht übereinstimmende Datensätze aus der rechten Tabelle werden mit `NULL` gefüllt.
  • RIGHT JOIN: Gibt alle Datensätze aus der rechten Tabelle und die übereinstimmenden Datensätze aus der linken Tabelle zurück. Nicht übereinstimmende Datensätze aus der linken Tabelle werden mit `NULL` gefüllt.
  • FULL JOIN: Gibt alle Datensätze aus beiden Tabellen zurück und füllt `NULL` für nicht übereinstimmende Zeilen aus beiden Tabellen.

Tipps und bewährte Praktiken

  • Sei vorsichtig bei großen Datensätzen. Der `FULL JOIN` kann große Ergebnismengen erzeugen, also stelle sicher, dass er für deine Analyse notwendig ist.
  • Behandle "NULL"-Werte. Sei darauf vorbereitet, `NULL`-Werte in deiner Logik zu verwalten, besonders wenn du Berechnungen durchführst oder Ergebnisse filterst.
  • Optimiere mit Indizes. Sorge für eine angemessene Indizierung der Join-Spalten, um die Leistung zu verbessern.
  • Kombiniere mit anderen Filtern. Verwende `WHERE`-Klauseln, um die Ergebnisse weiter zu filtern und die Größe der Ergebnismenge zu reduzieren.
  • Teste auf Teilmengen. Validiere die Logik an kleineren Datenproben, bevor du den `FULL JOIN` auf ganze Tabellen anwendest.
  • Überlegungen zur Leistung. Beachte, dass der `FULL JOIN` bei sehr großen Tabellen zu erheblicher Verarbeitungszeit und Ressourcenauslastung führen kann.
  • Ziehe Alternativen in Betracht. In manchen Fällen kann die Verwendung von `LEFT JOIN` oder `RIGHT JOIN` besser geeignet sein, je nach den spezifischen Anforderungen deiner Abfrage.