## Joins

Ein Join ist eine SQL-Anweisung, die mehrere Tabellen miteinander verknüpft und als Ergebnis eine Join-Tabelle liefert.

Siehe auch:

SQL-Tutorial, Joins: Informationen aus mehreren Tabellen

SQL-Referenzhandbuch, JOIN-Prädikat (join_predicate)

### Funktionsumfang

Aufgabe des SQL-Optimierers ist es, die optimale Reihenfolge bei der Abarbeitung der Tabellen zu finden. Der SQL-Optimierer versucht, auf die Zeilen der zu verknüpfenden neuen Tabellen möglichst direkt zuzugreifen und die Zwischenergebnistabellen möglichst klein zu halten. Er beginnt die Abarbeitung von Joins deswegen mit den kleinsten Tabellen mit den restriktivsten Suchbedingungen, um zunächst kleine Zwischenergebnistabellen zu erhalten.

Die Reihenfolge, in der die Tabellen in der FROM-Klausel der SELECT-Anweisung spezifiziert sind, hat keinen Einfluss auf die Reihenfolge ihrer Abarbeitung.

#### Suchstrategien für Joins

Der SQL-Optimierer kann eine der folgenden Suchstrategien wählen, um ausgehend von den Join-Spaltenwerten der alten Zwischenergebnistabelle auf Zeilen der neuen Tabelle zuzugreifen:

JOIN VIA INDEXED COLUMN

JOIN VIA KEY COLUMN

JOIN VIA KEY RANGE

JOIN VIA MULTIPLE INDEXED COLUMNS

JOIN VIA MULTIPLE KEY COLUMNS

JOIN VIA RANGE OF MULTIPLE INDEXED COL.

JOIN VIA RANGE OF MULTIPLE KEY COLUMNS

Wenn die Spaltenlängen der in einem Join-Schritt jeweils zu vergleichenden beiden Spalten nicht gleich sind, dann kann der SQL-Optimierer die oben aufgeführten Suchstrategien nicht anwenden. Um diese Einschränkung zu umgehen, definieren Sie deshalb für alle Spalten, die über einen Join verbunden werden sollen, denselben Wertebereich (Domäne).

### Beispiele

Die bei den Erläuterungen zum SQL-Optimierer verwendeten Beispiele stützen sich auf die Demo-Datenbank DEMODB und ihre vollständigen Demo-Daten im Schema HOTEL.

Konzepte des Datenbanksystems, Objekte im Schema HOTEL

SELECT customer.cno, customer.title, customer.name,
customer.zip, city.name, city.state, customer.address
FROM hotel.customer, hotel.city
WHERE customer.zip = city.zip

Join-Tabellen: CUSTOMER und CITY
Qualifikation: customer.zip = city.zip
genutzte Suchstrategie für CITY: TABLE SCAN
genutzte Suchstrategie für CUSTOMER: JOIN VIA KEY RANGE

Ergebnis der EXPLAIN-Anweisung

TABLENAME | COLUMN_OR_INDEX | STRATEGY | PAGECOUNT
CITY |  | TABLE SCAN | 1
CUSTOMER |  | JOIN VIA KEY RANGE | 1
|  | TABLE TEMPORARY SORTED |
| ZIP | (USED SORT COLUMN) |
|  | RESULT IS COPIED COSTVALUE IS | 13

Die Join-Abarbeitung beginnt mit dem Zugriff auf die Tabelle CITY. Diese wird mit der Suchstrategie TABLE SCAN abgearbeitet.

Für den Join-Übergang auf die Tabelle CUSTOMER mit der Strategie JOIN VIA KEY RANGE wird die Spalte ZIP genutzt.

Beim Join wird immer eine Ergebnismenge aufgebaut (RESULT IS COPIED).

Siehe auch:

Datenbankparameter JOIN_SEARCH_LEVEL

EXPLAIN-Anweisung für Joins

SQL-Referenzhandbuch, Domänenname (domain_name)