OQL (Object Query Language) ist eine an SQL angelehnte Abfragesprache. Im Gegensatz zu SQL existiert kein Update-Befehl. Veränderungen an der Datenbank können nur über die Mutatoren der Objekte durchgeführt werden.
Liste alle C4-Professoren (als Objekte):
select p from p in AlleProfessoren where p.Rang = 'C4';
Liste Name und Rang aller C4-Professoren (als Werte):
select p.Name, p.Rang from p in AlleProfessoren where p.Rang = 'C4';
Liste Name und Rang aller C4-Professoren (als Tupel):
select struct (n: p.Name, r: p.Rang) from p in AlleProfessoren where p.Rang = "C4";
Liste alle Angestellte mit einem Gehalt über 100.000 DM:
select a.Name from a in AlleAngestellte where a.Gehalt() > 100.000;
Liste Name und Lehrbelastung aller Professoren:
select struct (n: p.Name, a: sum(select v.SWS from v in p.liest)) from p in AlleProfessoren;
Gruppiere alle Vorlesungen nach der Semesterstundenzahl:
select * from v in AlleVorlesungen group by kurz: v.SWS <= 2, mittel: v.SWS = 3, lang: v.SWS >= 4;Das Ergebnis sind drei Tupel vom Typ
struct (kurz: boolean, mittel: boolean, lang: boolean, partition : bag(struct(v: Vorlesungen)))mit dem mengenwertigen Attribut partition, welche die in die jeweilige Partition fallenden Vorlesungen enthält. Die booleschen Werte markieren, um welche Partition es sich handelt.
Liste die Namen der Studenten, die bei Sokrates Vorlesungen hören:
select s.Name from s in AlleStudenten, v in s.hoert where v.gelesenVon.Name = "Sokrates"
Die im relationalen Modell erforderlichen Joins wurden hier mit Hilfe von Pfadausdrücken realisiert. Abbildung 16.14 zeigt die graphische Darstellung des Pfadausdrucks von Studenten über Vorlesungen zu Professoren.
Der Ausdruck s.hoert ergibt die Menge von Vorlesungen des Studenten s. Pfadausdrücke können beliebige Länge haben, dürfen aber keine mengenwertigen Eigenschaften verwenden. Verboten ist daher eine Formulierung der Form
s.hoert.gelesenVon.Nameda hoert mengenwertig ist. Stattdessen wurde in der from-Klausel die Variable v eingeführt, die jeweils an die Menge s.hoert gebunden wird.
Die Erzeugung von Objekten geschieht mit Hilfe des Objektkonstruktors:
Vorlesungen (vorlNr: 4711, Titel: "Selber Atmen", SWS: 4, gelesenVon : ( select p from p in AlleProfessoren where p.Name = "Sokrates"));