OQL-Anfragen (1)

7
OQL-Anfragen (1) • Alle Punkte, die auf der Null-Ebene liegen: select struct (ex : x, ey : y) from allePunkte where z = 0 Rückgabetyp: bag<struct<ex:float, ey:float>> • Alle Kanten, die zu Flächen mit mindestens vier Kanten gehören: select struct (kp1 : k.p1, kp2 : k.p2) from f in alleFlächen, k in f.kanten where count (f.kanten) >= 4 Rückgabetyp: bag<struct<kp1:Punkt, kp2:Punkt>> (Impliziter Join!)

description

OQL-Anfragen (1). Alle Punkte, die auf der Null-Ebene liegen: select struct (ex : x, ey : y) from alle Punkte where z = 0 Rückgabetyp: bag Alle Kanten, die zu Flächen mit mindestens vier Kanten gehören: - PowerPoint PPT Presentation

Transcript of OQL-Anfragen (1)

Page 1: OQL-Anfragen (1)

OQL-Anfragen (1)• Alle Punkte, die auf der Null-Ebene liegen:select struct (ex : x, ey : y) from allePunkte where z = 0

Rückgabetyp: bag<struct<ex:float, ey:float>>

• Alle Kanten, die zu Flächen mit mindestens vier Kanten gehören:

select struct (kp1 : k.p1, kp2 : k.p2)from f in alleFlächen, k in f.kanten where count (f.kanten) >= 4

Rückgabetyp: bag<struct<kp1:Punkt, kp2:Punkt>>(Impliziter Join!)

Page 2: OQL-Anfragen (1)

OQL-Anfragen (2)

• Dieselbe Anfrage, aber gruppiert nach Flächen:select struct (fläche: f.fName, punkte:

(select struct (kp1 : p1, kp2 : p2) from f.kanten))

from f in alleFlächen, k in f.kanten where count (f.kanten) >= 4

Rückgabetyp:bag<bag<struct< fläche:string, punkte:bag<struct<kp1:Punkt,kp2:Punkt>>>

• Beachte: Gruppierung ohne group by

Page 3: OQL-Anfragen (1)

OQL-Anfragen (3)

• Ergebnis kann Resultat von Operatoraufrufen enthalten z.B.:

select volumen()from alleQuader

• Länge aller Kanten von großen Flächen:select k.längefrom f in alleFlächen, k in f.kanten where f.fläche > 100.0

• Vielflächner mit großen Flächen:select vNamefrom alleVielflächnerwhere for all f in flächen : f.fläche() > 100.0

Page 4: OQL-Anfragen (1)

OQL-Anfragen (4)

• Aggregierung nach Gruppen, z.B. zuerst Gruppierung der Quader nach Oberfläche, dann Berechnung des mittleren Volumens über alle Quader mit dieser Oberfläche, dies aber nur für Oberflächen über 20:

select struct (ofläche, dvolumen: avg( volumen() )

from alleQuadergroup by ofläche : oberflächehaving oberfläche >= 20.0

Rückgabetyp:bag<struct<ofläche:float, dvolumen:float>>

Page 5: OQL-Anfragen (1)

OQL-Anfragen (5)

• Auch die Sortierungsklausel existiert in OQL, z.B.:

select from alleQuaderorder by oberfläche desc, volumen() asc

• Es kann nach mehreren Attributen bzw. Methodenresultaten sortiert werden– Aufsteigend: asc (Voreinstellung) – Absteigend: desc

Page 6: OQL-Anfragen (1)

OQL-Anfragen (6)

• Gesamtzahl aller Kanten, die aus dem Nullpunkt entspringen :count( select from alleKantenwhere p1.x = 0.0and p1.y = 0.0 and p1.z = 0.0)

• Ergebnistyp:unsigned long

• Bemerkung: OQL erlaubt (als Tribut an SQL) auch Syntaxselect count ()from alleKanten where p1.x = 0.0 and p1.y = 0.0 and p1.z = 0.0)

Page 7: OQL-Anfragen (1)

OQL-Anfragen (7)

• Liste aller Flächen mit Umfang über 1000:select ffrom f in alleFlächenwhere 1000 < sum(select k.länge

from k in f.kanten)

• Ergebnistyp:bag<Fläche>