prev up next

Die Anfragesprache OQL

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.


Graphische Darstellung eines Pfadausdrucks

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.Name
da 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"));


prev up next