RelationentheorieObjektorientierte Datenbanken AIFB SS2001 1 6.3.1 Anfragen auf Sammlungen(1/29)...
-
Upload
gisil-rase -
Category
Documents
-
view
213 -
download
0
Transcript of RelationentheorieObjektorientierte Datenbanken AIFB SS2001 1 6.3.1 Anfragen auf Sammlungen(1/29)...
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
1
6.3.1 Anfragen auf Sammlungen6.3.1 Anfragen auf Sammlungen (1/29)(1/29)
OQL besteht aus einer Menge von Anfrageausdrücken, die auf Sammlungen (Set, List, Bag, Array) arbeiten. SQL arbeitet nur auf (Multi-)Mengen, da die Tupel einer Tabelle Mengen darstellen.
Möglich ist:
• Zugriff auf Attribute
• Durchlaufen von Beziehungen
• Aufruf von Operationen
• Quantoren
• Sortieren und Gruppieren
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
10
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (10/29)(10/29)
Durchlaufen von Beziehungen:
Liste aller Kunden mit ihren Arbeitgebern
SELECT STRUCT( Kundenname: x.Name,
Firmenname: x.ist_Mitarbeiter_von.Name)FROM Kunden x
ist_Mitarbeiter_von ist der entsprechende Rollenname (Unterschied zum UML-Modell)
Auf eine Beziehung kann also wie auf ein Attribut mit der Punkt-Notation zugegriffen werden. Im Bsp. wird die Assoziation von Kunde zu Firma durchlaufen und auf den Namen zugegriffen. Über Beziehungen kann also von einem Objekt zum anderen navigiert werden.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
11
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (11/29)(11/29)
Liste aller Kunden, die Mitarbeiter einer Firma sind
SELECT DISTINCT xFROM Kunden x,
x.ist_Mitarbeiter_von y
In OQL kann eine Sammlung von einer vorher ermittelten Sammlung abgeleitet werden, indem man einem Pfad folgt, der bei der ersten Sammlung beginnt. Im Bsp. werden alle Kunden ausgewählt, die Mitarbeiter einer Firma sind.Alternative über Subquery
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
12
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (12/29)(12/29)
Welche Mitarbeiter der Firma „Hard&Soft“ sind Kunden?
SELECT x.NameFROM Kunden x,
x.ist_Mitarbeiter_von yWHERE y.Kurzname = “Hard&Soft“
das Attribut Kurzname von Firma ist in dem UML-Modell nicht aufgeführt.Ergebnis ist eine Multimenge von Literalen
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
13
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (13/29)(13/29)
Teilnehmerliste für die öffentliche Veranstaltung Nr.99 (Das Attribut Veranstaltungs_Nr ist im UML-Modell nicht aufgeführt)
SELECT x.NameFROM y.hat_Teilnehmer x,
z.gebucht_von y, oeffentliche_VeranstE z
WHERE z.Veranstaltungs_Nr=99
Startpunkt der Abfrage ist die Klassenextension „oeffentliche_VeranstE“. Von dort wird die Beziehung (der Pfad) „gebucht_von“ in Richtung der Klassenextension „Kundenbuchung“ durchlaufen. Von Kundenbuchungen wird die Beziehung (der Pfad) „hat_Teilnehmer“ in Richtung „Kunden“ durchlaufen.
Das Ganze entspricht in etwa den JoinsJoins in SQL
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
14
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (14/29)(14/29)
Verbund:
Das Schulungsunternehmen möchte wissen, welche Mitarbeiter und welche Dozenten die gleiche Adresse haben.
SELECT STRUCT(x, y)FROM Mitarbeiter x,
Dozenten yWHERE x.Adresse = y.Adresse
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
15
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (15/29)(15/29)
Aufruf von Operationen:
Berechnung der Gehälter aller Dozenten
SELECT STRUCT (Name: x.Name, Honorar: x.Gehalt)
FROM Dozenten x
Mit x.Gehalt wird die Operation Gehalt aufgerufen.
Gehalt ist eine Operation, die in der Oberklasse Person definiert und in den Unterklassen Mitarbeiter und Dozent redefiniert ist.
Ergebnis: Gehaltsliste der Dozenten.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
16
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (16/29)(16/29)
Liste der Gehälter,aller Personer(d.h. von Dozenten, Mitarbeitern und der Kunden, obwohl letzteres keinen Sinn macht)
SELECT struct (Name: x.Name, HonorarGehalt: x.Gehalt)
FROM Personen x
Ändert man später die Klasse so, dass Gehalt keine Operation mehr ist, sondern ein Attribut, dann muss die Abfrage nicht geändert werden.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
17
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (17/29)(17/29)
Quantoren:Quantoren:
Allgemeine Form
FOR ALL x IN e1: e2
EXISTS x IN e1: e2
x ist Variablenname
e1, e2 Ausdrücke, wobei e1 eine Sammlung und e2 eine Prädikat ist
OQL stellt auch die mathematischen All- und Existenzquantoren zur Verfügung.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
18
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (18/29)(18/29)
Sind alle Prämien kleiner als 3000 DM?
FOR ALL x IN Dozenten: x.Praemien < 3000.0
Gab es eine Veranstaltung am 2.5.1998?
EXISTS x IN Veranstaltungen: x.Vom = 020598
Die Ausdrücke liefern entweder true oder false und können z.B. in WHERE-Klauseln verwendet werden.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
19
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (19/29)(19/29)
Sortieren und Gruppieren:
Allgemeine Form für sortieren
SELECT_query ORDER BY e1, ..., en [ASC| DESC]
e1, ..., en sind Ausdrücke
Bsp. Kundenliste sortiert nach Umsatz:
SELECT xFROM Kunden x ORDER BY x.Umsatz, x.Name
x.Name ist zweites Sortierkriterium bei Gleichheit
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
20
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (20/29)(20/29)
Firmenliste (alphabetisch), bei der für jede Firma vermerkt ist, wie viele Mitarbeiter Kunden sind:
SELECT STRUCT(Name: x.Name, Mitarbeiteranzahl:
count(x.ist_Arbeitgeber _von))FROM Firmen xORDER BY x.Name
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
21
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (21/29)(21/29)
Allgemeine Form für Gruppierungen
SELECT_query GROUP BY (p1: e1, ..., pn: en)
und
SELECT_query GROUP BY (p1: e1, ..., pn: en)
HAVING p
p1, ..., pn sind Eigenschaftsnamene1, ...en sind Ausdrücke mit einer freien Variablen xp Prädikat
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
22
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (22/29)(22/29)
Drei Kundenlisten für verschiedene Umsatzkategorien:
SELECT x FROM Kunden xGROUP BY
(A: x.Umsatz >= 20000, B: x.Umsatz >= 10000 and x.Umsatz < 20000 C: x.Umsatz < 10000)
Ergebnistyp: Set <struct(A: boolean, B: boolean, C: boolean, partition: set<Kunde>)
>
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
23
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (23/29)(23/29)
Liste aller Veranstaltungen, bei denen die Dozenten, die diese Veranstaltung halten, im Durchschnitt über 3000 DM Prämie bekommen:
SELECT STRUCT(Veranst: x.Referent.Titel, avgPraemie:AVG(SELECT p.x.Praemie FROM partition p) )
FROM Dozenten xGROUP BY Veranst: x.Referent.TitelHAVING AVG(SELECT p.x.Praemie
FROM partition p)> 3000
Ergebnistyp: Bag (veranst : Veranstaltung, avgPraemie: Geldeinheit)
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
24
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (24/29)(24/29)
Anmerkung:
Statt AVG( SELECT p.x.Praemie FROM partition p)
wäre auch die Kurzfassung
AVG( SELECT x.Praemie FROM partition)
möglich gewesen.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
25
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (25/29)(25/29)
Ergebnistypen von Anfragen (Wdh.):
Sammlung von Objekten mit Identität:
Bsp.: SELECT x FROM Personen xWHERE x.name = “König“
Liefert eine Multimenge von Personen, deren Name König ist.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
26
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (26/29)(26/29)
Ein Objekt mit Identität:
Bsp.:
element( SELECT x
FROM Personen x WHERE x.Personen_Nr = 123456789
)
Liefert die Person bzw. das Objekt der Klasse Person, welche die Personen_Nr 123456789 hat.
Der element-Operator konvertiert eine einelementige Menge in das Element, welche sie enthält.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
27
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (27/29)(27/29)
Eine Sammlung von Literalen
Bsp.:
SELECT x.Umsatz FROM Kunden xWHERE x.Ort = “Heidelberg“
Liefert eine Multimenge von Umsatz-Zahlen von allen Kunden, die in Heidelberg wohnen.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
28
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (28/29)(28/29)
Ein Literal
Bsp.:
element( SELECT x.Name FROM Veranstaltungen x WHERE x.Veranstaltungs_Nr = 123 )
Liefert als Literal den Namen der Veranstaltung mit der Nummer 123
Die Attribute Name und Veranstaltungs_Nr sind nicht im UML-Modell am Anfang der Vorlesung (p.11) beschrieben.
Rel
atio
nent
heor
ieO
bjek
torie
ntie
rte D
aten
bank
en
A
IFB
SS2
001
29
6.3.1 Anfragen auf Sammlungen 6.3.1 Anfragen auf Sammlungen (29/29)(29/29)Schachtelung von Anfragen:
SELECT DISTINCT STRUCT( Name: x.Name, OO:(SELECT y FROM x.kann_fachlich_abhalte_n y WHERE y.Kurztitel = “OOA“) )
FROM Dozenten x
• Für jeden Dozenten wird eine Struktur mit demDozentennamen und einer Multimenge der Seminartypen mit dem Kurztitel OOA aufgebaut, die dieser Dozent abhalten kann.
• Für jeden Dozenten x wird OO berechnet, indem von ihm ausgehend jeweils die Beziehung kann_fachlich_abhalten durchlaufen wird.
Ergebnistyp: SET<STRUCT( Name: string, OO: bag <Seminartyp>)
>