Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

RelationentheorieObjektorientierte Datenbanken  AIFB SS2001 1 6.3.1 Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die.

Ähnliche Präsentationen


Präsentation zum Thema: "RelationentheorieObjektorientierte Datenbanken  AIFB SS2001 1 6.3.1 Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die."—  Präsentation transkript:

1 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen(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

2 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (2/29) Zugriff auf Attribute Allgemeine Form (in „[ ]“ geschriebenes ist optional): SELECT e FROM e 1 [AS] x 1,...., e n [AS] x n WHERE e’ und (falls keine Duplikate erlaubt sind) SELECT DISTINCT e FROM e 1 [AS] x 1,...., e n [AS] x n WHERE e’ e, e’, e 1,..., e n, sind Ausdrücke x 1,..., x n sind Variabelennamen

3 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (3/29) Selektion: Alle Personen die in Bochum wohnen SELECT x FROM Personen x WHERE x.Adresse = “Bochum“ Personen ist die Extension der Klasse Person. Die Anfrage „Gib alle Personen aus, die in Bochum wohnen“ bedeutet, aus dem Extent der Klasse Person alle Objekte zu selektieren, deren Attribut „Adresse“ den Wert Bochum hat, Das Ergebnis ist eine Multimenge (Bag)

4 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (4/29) Projektion: Alle (Nach-)namen aller Personen SELECT DISTINCT x.Name FROM Personen x DISTINCT verhindert doppelte Namen Die Anfrage „Gib die Namen aller Personen aus“ bedeutet, daß aus der Klassenextension „Personen“ nur das Attribut „Name“ ausgegeben wird. Das Ergebnis ist eine Menge von Literalen (Typ Set )

5 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (5/29) Projektion: Vorname, Name und Geburtsdatum aller Personen SELECT DISTINCT struct (Name: x.Name, Vorname: x.Vorname, GebDatum: x.Geburtsdatum) FROM Personen x Für jede Person wird eine Struktur aufgebaut die Name, Vorname und Geburtsdatum enthält. Das Ergebnis ist eine Menge von strukturierten Literalen (Typ Set ) Alle Objekte einer Extension: Alle Objekte der Klasse Personen Personen es wir einfach die Extension der Klasse angegeben.

6 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (6/29) Vererbte Attribute und „union“: Es soll allen Mitarbeitern und allen Dozenten eine Geburtstagskarte geschickt werden. Es soll hierfür eine Liste mit Anrede, Titel, Vorname, Name und Geburtsdatum ausgedruckt werden. Wenn ein Mitarbeiter auch als Dozent arbeitet, dann soll er nur einmal aufgeführt werden.

7 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (7/29) SELECT struct (Anrede: x.Anrede, Titel: x.Titel, Vorname: x.Vorname, Name: x.Name, Geburtsdatum: x.Geburtsdatum) FROM Personen x WHERE x.Personen_Nr IN SELECT y.Personen_Nr FROM MitarbeiterE y UNION SELECT z.Personen_Nr FROM Dozenten z Personen_Nr ist für Objekte der Klasse Mitarbeiter und Dozent ein vererbtes Attribut.

8 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (8/29) Weitere Mengenoperationen: „intersect“: SELECT x.Personen_Nr FROM Kunden x INTERSECT SELECT y.Personen_Nr FROM Dozenten y Liste aller Personennummern, die sowohl Kunde als auch Dozenten sind

9 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (9/29) „except“: SELECT x.Personen_Nr FROM Personen x EXCEPT SELECT y.Personen_Nr FROM Kunden y Liste aller Personen, die keine Kunden sind.

10 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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.

11 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (11/29) Liste aller Kunden, die Mitarbeiter einer Firma sind SELECT DISTINCT x FROM 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

12 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (12/29) Welche Mitarbeiter der Firma „Hard&Soft“ sind Kunden? SELECT x.Name FROM Kunden x, x.ist_Mitarbeiter_von y WHERE y.Kurzname = “Hard&Soft“ das Attribut Kurzname von Firma ist in dem UML-Modell nicht aufgeführt. Ergebnis ist eine Multimenge von Literalen

13 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (13/29) Teilnehmerliste für die öffentliche Veranstaltung Nr.99 (Das Attribut Veranstaltungs_Nr ist im UML-Modell nicht aufgeführt) SELECT x.Name FROM 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. Joins Das Ganze entspricht in etwa den Joins in SQL

14 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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 y WHERE x.Adresse = y.Adresse

15 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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.

16 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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.

17 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (17/29) Quantoren: Allgemeine Form FOR ALL x IN e 1 : e 2 EXISTS x IN e 1 : e 2 x ist Variablenname e 1, e 2 Ausdrücke, wobei e 1 eine Sammlung und e 2 eine Prädikat ist OQL stellt auch die mathematischen All- und Existenzquantoren zur Verfügung.

18 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (18/29) Sind alle Prämien kleiner als 3000 DM? FOR ALL x IN Dozenten: x.Praemien < Gab es eine Veranstaltung am ? EXISTS x IN Veranstaltungen: x.Vom = Die Ausdrücke liefern entweder true oder false und können z.B. in WHERE-Klauseln verwendet werden.

19 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (19/29) Sortieren und Gruppieren: Allgemeine Form für sortieren SELECT_query ORDER BY e 1,..., e n [ASC| DESC] e 1,..., e n sind Ausdrücke Bsp. Kundenliste sortiert nach Umsatz: SELECT x FROM Kunden x ORDER BY x.Umsatz, x.Name x.Name ist zweites Sortierkriterium bei Gleichheit

20 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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 x ORDER BY x.Name

21 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (21/29) Allgemeine Form für Gruppierungen SELECT_query GROUP BY (p 1 : e 1,..., p n : e n ) und SELECT_query GROUP BY (p 1 : e 1,..., p n : e n ) HAVING p p 1,..., p n sind Eigenschaftsnamen e 1,...e n sind Ausdrücke mit einer freien Variablen x p Prädikat

22 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (22/29) Drei Kundenlisten für verschiedene Umsatzkategorien: SELECT x FROM Kunden x GROUP BY (A: x.Umsatz >= 20000, B:x.Umsatz >= and x.Umsatz < C:x.Umsatz < 10000) Ergebnistyp: Set ) >

23 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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 x GROUP BY Veranst: x.Referent.Titel HAVING AVG(SELECT p.x.Praemie FROM partition p)> 3000 Ergebnistyp: Bag (veranst : Veranstaltung, avgPraemie: Geldeinheit)

24 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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.

25 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (25/29) Ergebnistypen von Anfragen (Wdh.): Sammlung von Objekten mit Identität: Bsp.: SELECT x FROM Personen x WHERE x.name = “König“ Liefert eine Multimenge von Personen, deren Name König ist.

26 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (26/29) Ein Objekt mit Identität: Bsp.: element( SELECT x FROM Personen x WHERE x.Personen_Nr = ) Liefert die Person bzw. das Objekt der Klasse Person, welche die Personen_Nr hat. Der element -Operator konvertiert eine einelementige Menge in das Element, welche sie enthält.

27 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (27/29) Eine Sammlung von Literalen Bsp.: SELECT x.Umsatz FROM Kunden x WHERE x.Ort = “Heidelberg“ Liefert eine Multimenge von Umsatz-Zahlen von allen Kunden, die in Heidelberg wohnen.

28 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (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.

29 RelationentheorieObjektorientierte Datenbanken  AIFB SS Anfragen auf Sammlungen (29/29) Schachtelung von Anfragen: SELECT DISTINCT STRUCT( Name: x.Name, OO:(SELECTy FROM x.kann_fachlich_abhalte_n y WHERE y.Kurztitel = “OOA“) ) FROM Dozenten x Für jeden Dozenten wird eine Struktur mit dem Dozentennamen 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 ) >


Herunterladen ppt "RelationentheorieObjektorientierte Datenbanken  AIFB SS2001 1 6.3.1 Anfragen auf Sammlungen(1/29) OQL besteht aus einer Menge von Anfrageausdrücken, die."

Ähnliche Präsentationen


Google-Anzeigen