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

PostgreSQL CROSS JOIN

Der `CROSS JOIN` in PostgreSQL erzeugt ein kartesisches Produkt aus zwei Tabellen, d.h. er liefert alle möglichen Kombinationen von Zeilen aus den verbundenen Tabellen. Diese grundlegende Syntax ist besonders nützlich, wenn du jede Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle kombinieren musst.

Ein kartesisches Produkt ist das Ergebnis der Kombination jeder Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle, was zu einem Datensatz führt, bei dem die Anzahl der Zeilen das Produkt der Zeilenzahlen der einzelnen Tabellen ist.

Verwendung

Der `CROSS JOIN` wird verwendet, wenn du jede Zeile einer Tabelle mit jeder Zeile einer anderen Tabelle verbinden willst, unabhängig von übereinstimmenden Werten. Das kann in Szenarien helfen, in denen du alle möglichen Kombinationen von Daten aus zwei Datensätzen benötigst.

SELECT *
FROM table1
CROSS JOIN table2;

In dieser Syntax kombiniert `CROSS JOIN` jede Zeile von `Tabelle1` mit jeder Zeile von `Tabelle2`. Die Reihenfolge der Tabellen in der `CROSS JOIN`-Anweisung kann die Reihenfolge der resultierenden Daten beeinflussen, nicht aber den Inhalt selbst.

Beispiele

1. Basic CROSS JOIN

SELECT *
FROM products
CROSS JOIN categories;

Dieses Beispiel erzeugt ein kartesisches Produkt zwischen "Produkten" und "Kategorien" und gibt jede mögliche Kombination aus Produkt und Kategorie aus. Wenn `Produkte` 10 Zeilen und `Kategorien` 5 Zeilen hat, enthält die Ergebnismenge 50 Zeilen.

2. CROSS JOIN mit ausgewählten Spalten

SELECT products.product_name, categories.category_name
FROM products
CROSS JOIN categories;

Hier wird der `CROSS JOIN` verwendet, um bestimmte Spalten von `Produkten` und `Kategorien` zu kombinieren und so eine gezieltere Ergebnismenge zu erhalten. Die Größe der Ergebnismenge bleibt gleich, aber es werden nur ausgewählte Spalten angezeigt.

3. CROSS JOIN mit zusätzlichen Filtern

SELECT a.name, b.course
FROM students a
CROSS JOIN courses b
WHERE b.is_active = true;

In diesem Beispiel wird ein Filter angewendet, nachdem ein `CROSS JOIN` ausgeführt wurde. Das Ergebnis ist ein kartesisches Produkt, das nur aktive Kurse mit allen Schülern enthält. Die Größe der Ergebnismenge hängt von der Anzahl der aktiven Kurse ab.

4. CROSS JOIN mit kleinen Datensätzen

SELECT x.item, y.value
FROM small_table1 x
CROSS JOIN small_table2 y;

Wenn du mit kleinen Datensätzen arbeitest, kann ein `CROSS JOIN` ohne Leistungsprobleme praktisch sein. Wenn du zum Beispiel 3 Zeilen aus "kleine_tabelle1" mit 4 Zeilen aus "kleine_tabelle2" kombinierst, erhältst du nur 12 Zeilen.

Tipps und bewährte Praktiken

  • Verstehe die Größe der Ergebnismengen. Da `CROSS JOIN` die Anzahl der Zeilen vervielfacht, solltest du bei großen Datensätzen vorsichtig sein, da dies zu Leistungsproblemen führen kann.
  • Selektiv einsetzen. Wende `CROSS JOIN` nur an, wenn ein kartesisches Produkt wirklich benötigt wird, z.B. um Kombinationen für Tests oder Berichte zu erstellen.
  • Kombiniere mit Filtern. Verwende `WHERE`-Klauseln, um die Ergebnisse auf relevante Kombinationen zu beschränken, nachdem du einen `CROSS JOIN` durchgeführt hast.
  • Ziehe Alternativen in Betracht. Wenn bestimmte Kriterien erfüllt werden müssen, ist ein `INNER JOIN` oder `LEFT JOIN` besser geeignet. Verwende zum Beispiel einen `INNER JOIN`, wenn du Zeilen auf der Grundlage bestimmter Bedingungen abgleichen musst, oder einen `LEFT JOIN`, um alle Zeilen aus einer Tabelle mit abgeglichenen Zeilen aus einer anderen Tabelle zu verbinden.