A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  Sonderzeichen  sybase-tech-blog


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