|
Kategorie: ASE: Query Processing und Abstract Plan
Join Operatoren, Joins
Werden Daten aus zwei oder mehreren
Tabellen
oder
Views
gelesen, nutzt
ASE
dafür joins.
Dabei werden die Tabellen oder Views verglichen, indem von jedem
Objekt
eine
Spalte
definiert wird und deren Werte dann Zeile für Zeile miteinander verglichen werden.
Zeilen mit zueinander passenden Werten werden dabei verlinkt.
Wichtig dabei ist es, daß die zu vergleichenden Werte vom gleichen oder ähnlichen
Datentyp
sind, oder mit Hilfe der
convert()
Funktion einander angepasst werden können.
(Die
System Prozedur
sp_helpjoins
kann verwendet werden, um zu bestimmen, welche Spalten bestimmter Tabellen
für einen Join qualifizieren könnten.)
Das Ergebnis wird anschliessend in einer neuen Tabelle zusammengefasst.
Die in einem Join spezifizierten Objekte können inder selben oder in verschiedenen
Datenbanken
liegen.
Joins können auch oft als
Subqueries
dargestellt werden.
Joins können in select, update, insert, delete statements
oder subqueries eingebettet werden, wobei weiterführende Einschränkungen und Bedingungen
an die Joinbedingung angehängt werden können.
Die "from" Klausel der Query spezifiziert dabei die Tabellen, die Teil des Joins sind.
Die Anzahl der Tabellen für einen Join darf 16 nicht überschreiten.
Die "where" Klausel bestimmt, welche Zeilen im Ergebnis des Joins enthalten sein sollen.
Joins: Operatoren
Tabellen in Joins lassen sich mit Hilfe der in
T-SQL
üblichen
Logischen Operatoren
verknüpfen.
Joins: Typen
Es gibt meherere Typen von Joins, wie zum Beispiel equijoins, natural joins und outer joins.
Der am meisten verwendete Typ ist der equijoin, der auf der Gleichheit von Werten fusst:
select au_fname, au_lname, pub_name
from authors, publishers
where authors.city = publishers.city
Hierbei wird das Ergebnis der
Query
aus Daten von zwei verschiedenen Tabellen erstellt; die Tabellen werden gejoint,
wobei die Spalte "city" als Link genutzt wird.
Joins, deren Ergebnis alle Zeilen enthält, unabhängig davon, ob es ob es passende Ergebniszeilen
gibt, nennt man Outer Joins. Dabei unterscheidet man in ASE left und right outer joins.
Das folgende Beispiel joint die "titles" und "titleauthor" Tabellen
auf der Spalte "title_id":
select *
from titles, titleauthor
where titles.title_id *= titleauthor.title_id
In dem Beispiel wird der left outer join durch das Zeichen "*=" in
T-SQL
Notation angezeigt. Der ANSI Standard benutzt dafür die Schlüsselwörter
left join und right join.
Die Begriffe inner table und outer table beschreiben die Platzierung von Tabellen in
einem outer join. Die "äußere Tabelle" , bzw. "innere Tabelle" in einem 'left join'
sind die jeweils linke, bzw. rechte Tabelle in der Abfrage. In einem 'right join', ist die äußere Tabelle
die rechte Tabelle der Abfrage und die Innere die linke Tabelle der Abfrage:
A left join B
B right join A
A *= B
B =* A
Im Beispiel oben ist die Tabelle A die äußere und Tabelle B die innere Tabelle des Joins.
Joins: Strategien
ASE stellt hauptsächlich vier
Join Strategien
zur Verfügung:
-
NestedLoopJoin
-
MergeJoin
-
HashJoin
-
NaryNestedJoin, als Sondervariante des NestedLoopJoin
|