English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SQL CROSS JOIN Anweisung

In diesem Tutorial lernen Sie, wie Sie mit dem SQL-Kreuzabfrage die Daten aus zwei Tabellen abrufen.

Verwendung der Kreuzabfrage

Wenn keine Verbindungsbedingung angegeben wird, wenn zwei Tabellen verbunden werden, wird das Datenbanksystem jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle kombinieren. Diese Verbindung wird als Kreuzabfrage oder kartesisches Produkt bezeichnet. Das folgende Venn-Diagramm erläutert die Funktionsweise der Kreuzabfrage.

Um dies leichter zu verstehen, lassen Sie uns untenemployeesunddepartmentsTabelle.

+--------+--------------+------------+---------+
| emp_id | emp_name     | hire_date  | dept_id |
+--------+--------------+------------+---------+
|      1 | Ethan Hunt  | 2001-05-01 |       4 |
|      2 | Tony Montana | 2002-07-15 |       1 |
|      3 | Sarah Connor | 2005-10-18 |       5 |
|      4 | Rick Deckard | 2007-01-03 |       3 |
|      5 | Martin Blank | 2008-06-24 |    NULL |
+--------+--------------+------------+---------+

+---------+------------------+
| dept_id | dept_name        |
+---------+------------------+
|       1 | Verwaltung  |
|       2 | Kundendienst |
|       3 | Finanzen  |
|       4 | Personalwesen |
|       5 | Verkauf  |
+---------+------------------+
Tabelle: employees
Tabelle: departments

Die Anzahl der Zeilen im Kreuzabfrage ist das Produkt der Zeilenzahlen in jeder Tabelle. Dies ist ein einfaches Beispiel für die Kreuzabfrage.

SELECT t1.emp_id, t1.emp_name, t1.hire_date, t2.dept_name
FROM employees AS t1 CROSS JOIN departments AS t2;

Hinweis:Die Kreuzabfrage erstellt einen kartesischen Produkt oder multipliziert alle Zeilen einer Tabelle mit allen Zeilen einer anderen Tabelle. Daher, zum Beispiel, wenn eine Tabelle5Zeilen haben, während der andere Tisch10Zeilen, daher wird die Kreuzabfrage50 Zeilen, das bedeutet5und10des Produkts.

Nach der Ausführung des obigen Befehls erhalten Sie das folgende Ergebnis:

+--------+--------------+------------+------------------+
| emp_id | emp_name     | hire_date  | dept_name        |
+--------+--------------+------------+------------------+
|      1 | Ethan Hunt  | 2001-05-01 | Verwaltung  |
|      2 | Tony Montana | 2002-07-15 | Verwaltung  |
|      3 | Sarah Connor | 2005-10-18 | Verwaltung  |
|      4 | Rick Deckard | 2007-01-03 | Verwaltung  |
|      5 | Martin Blank | 2008-06-24 | Verwaltung  |
|      1 | Ethan Hunt  | 2001-05-01 | Kundendienst |
|      2 | Tony Montana | 2002-07-15 | Kundendienst |
|      3 | Sarah Connor | 2005-10-18 | Kundendienst |
|      4 | Rick Deckard | 2007-01-03 | Kundendienst |
|      5 | Martin Blank | 2008-06-24 | Kundendienst |
|      1 | Ethan Hunt  | 2001-05-01 | Finanzen  |
|      2 | Tony Montana | 2002-07-15 | Finanzen  |
|      3 | Sarah Connor | 2005-10-18 | Finanzen  |
|      4 | Rick Deckard | 2007-01-03 | Finanzen  |
|      5 | Martin Blank | 2008-06-24 | Finanzen  |
|      1 | Ethan Hunt  | 2001-05-01 | Personalwesen |
|      2 | Tony Montana | 2002-07-15 | Personalwesen |
|      3 | Sarah Connor | 2005-10-18 | Personalwesen |
|      4 | Rick Deckard | 2007-01-03 | Personalwesen |
|      5 | Martin Blank | 2008-06-24 | Personalwesen |
|      1 | Ethan Hunt  | 2001-05-01 | Verkauf  |
|      2 | Tony Montana | 2002-07-15 | Verkauf  |
|      3 | Sarah Connor | 2005-10-18 | Verkauf  |
|      4 | Rick Deckard | 2007-01-03 | Verkauf  |
|      5 | Martin Blank | 2008-06-24 | Verkauf  |
+--------+--------------+------------+------------------+

Wie Sie sehen können, ist die Funktion der Kreuzverknüpfung nicht so effektiv wie in den vorangegangenen Kapiteln beschrieben. Da die Abfrage keine Verknüpfungskondition angegeben hat, werden jede Zeile der Tabelle 'employees' mit jeder Zeile der Tabelle 'departments' kombiniert. Verwenden Sie daher keine Kreuzverknüpfung, es sei denn, Sie sind sicher, dass Sie die Karthäische Erzeugung verwenden möchten.