Die bereitgestellte Anfragesprache ist von der Syntax ähnlich SQL. Die Anfragen werden auf Business Objects formuliert und nicht auf Datenbanktabellen. Attribute werden mit “:“ vom Klassennamen getrennt statt mit ‘.‘ wie bei SQL. Die formulierbaren OQL-Ausdrücke entsprechen in ihrer Mächtigkeit weitgehend denen von SQL. So sind in der WHERE-Klausel Sub-Selects erlaubt, Joins können formuliert werden.
Part-Attribute müssen einzeln aufgelöst werden (select … bo:part1.part2 as x, bo:part1. part2.attr2 as y …).
Für die ausführliche Beschreibung des Syntax von OQL wird auf die OQL-Dokumentation verwiesen.
Joins
OQL-Joins arbeiten immer mit zwei Business-Object-Definitionen, die über eine Attribut-Klausel verknüpft werden. Das Ergebnis ist eine virtuelle Business-Object-Definition, deren Attribute von den Join-Partnern übernommen wurden. Welche Attribute unter welchem Namen in das Ergebnis übernommen werden, kann über die SELECT-Klausel ausgewählt werden. Joins können auch geschachtelt werden. Somit sind sehr komplexe Anfragen möglich, die zum Beispiel bei OQL-Suchen oder OQL-Views genutzt werden.
Es gibt mehrere Join-Varianten, die nachstehend kurz erläutert werden. Bei der Formulierung der Joins sollte aus Gründen der Klarheit die Langschreibweise verwendet werden.
Inner Join
Syntax:
bo1 bo1_alias INNER JOIN bo2 bo2_alias
ON bo1_alias:attr = bo2_alias:attr
Die Ergebnismenge wird von bo1 und bo2 bestimmt. Die Verknüpfung erfolgt über gleiche Attributwerte bei den in der on-Klausel angegebenen Attributen. Eine Instanz von bo1 wird nur dann in das Ergebnis übernommen, wenn ein entsprechender Partner in bo2 gefunden wurde. Die alternative Kurzschreibweise ist „JOIN“.
Left Outer Join
Syntax:
bo1 bo1_alias LEFT OUTER JOIN bo2 bo2_alias
ON bo1_alias:attr = bo2_alias:attr
Die Ergebnismenge wird von bo1 bestimmt. Die Verknüpfung erfolgt über gleiche Attributwerte bei den in der on-Klausel angegebenen Attributen. Die Instanzen von bo1 werden immer in das Ergebnis übernommen, die von bo1 nur, wenn ein Partner in bo1 vorhanden war. Die alternative Kurzschreibweise ist „ OUTER JOIN“.
Right Outer Join
Syntax:
bo1 bo1_alias RIGHT OUTER JOIN bo2 bo2_alias
ON bo1_alias:attr = bo2_alias:attr
Die Ergebnismenge wird von bo2 bestimmt. Die Verknüpfung erfolgt über gleiche Attributwerte bei den in der on-Klausel angegebenen Attributen. Die Instanzen von bo2 werden immer in das Ergebnis übernommen, die von bo1 nur, wenn ein Partner in bo2 vorhanden war.
Full Outer Join
Dieser Join-Typ wird von OQL nicht unterstützt.