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:
Das Ergebnis sind drei Tupel vom Typselect * from v in AlleVorlesungen group by kurz: v.SWS <= 2, mittel: v.SWS = 3, lang: v.SWS >= 4;
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.struct (kurz: boolean, mittel: boolean, lang: boolean, partition : bag(struct(v: Vorlesungen)))
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 15.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
da hoert mengenwertig ist. Stattdessen wurde in der from-Klausel die Variable v eingeführt, die jeweils an die Menge s.hoert gebunden wird.s.hoert.gelesenVon.Name
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"));