Bei einer Verknüpfung durch einen Non-Equijoin besteht das "Problem", dass sich keine Spalten der zu verknüpfenden Tabellen direkt entsprechen und somit die Beziehung auch nicht durch ein Gleichheitszeichen dargestellt werden kann. Ein Zusammenhang ergibt sich lediglich durch überschneidende Wertebereiche der Inhalte einzelner Spalten. In diesem Fall erfolgt die Verknüpfung durch den Bereichsoperator BETWEEN ... AND.
Beispiel:
Es soll ermittelt werden, in welcher Gehaltsstufe die Mitarbeiter liegen.
SQL> SELECT e.ename, e.job, e.sal, s.grade
FROM emp e, salgrade s
WHERE e.sal BETWEEN s.losal AND s.hisal
ORDER BY s.grade, e.sal;
ENAME JOB SAL GRADE
---------- --------- ---------- ----------
SMITH CLERK 800 1
JAMES CLERK 950 1
ADAMS CLERK 1100 1
WARD SALESMAN 1250 2
MARTIN SALESMAN 1250 2
MILLER CLERK 1300 2
TURNER SALESMAN 1500 3
ALLEN SALESMAN 1600 3
CLARK MANAGER 2450 4
BLAKE MANAGER 2850 4
JONES MANAGER 2975 4
SCOTT ANALYST 3000 4
FORD ANALYST 3000 4
KING PRESIDENT 5000 5
Hinweis:
Anstelle des BETWEEN ... AND-Operators können auch die Operatoren >= und <= verwendet werden.
Ab 9i gibt es eine neue Syntax für Joins (die alte Syntax ist natürlich nachwievor gültig). Der Non-Equijoin von oben würde sich dann wie folgt zusammensetzen:
SQL> SELECT e.ename, e.job, e.sal, s.grade
FROM emp e JOIN salgrade s ON (e.sal BETWEEN s.losal AND s.hisal)
ORDER BY s.grade, e.sal;
Für eine genauere Erläuterung der neuen Syntax lesen Sie auch unseren Tipp "Neuerungen zu Joins".
Bei beiden Beispielen ist kein Tabellenalias notwendig, da die Spalten eindeutige Namen besitzen. Sie führen aber zu einer besseren Lesbarkeit des SELECT-Statements.
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.