4.2 Query-by-Example Bildschirmdialog Query-by-Example (QBE) wurde Anfang der 70er Jahre bei IBM entwickelt QBE wurde als Anfragesprache in dem IBM-Produkt QMF (Query Management Facility) benutzt. Eine zu QBE sehr ähnliches Schnittstelle ist im Datenbanksystem InterBase (Borland) realisiert worden. Anfrage: “Finde Name und Anschrift der Kunden mit negativem Kontostand” Anforderung eines Tabellengerüstes: Attribute (weitere verfügbar) Relationen-Name Kommandos auf den Tupeln Beschreibung der Anfrage wesentliche Punkte in QBE Benutzung eines beispielhaften Tabellengerüstes zur Spezifikation einer Anfrage beruht auf dem Bereichkalkül Es wird folgendes Datenbankschema benutzt: Name der erforderlichen Relation wird eingetragen, gefolgt von ‘P.’. Kunde P. Attributsnamen werden eingetragen: Kunde KName Kunde (KName, KAdr, Kto) Auftrag (KName, Ware, Menge) Lieferant (LName, LAdr, Ware, Preis) KAdr Kto Anfrage wird durch Eintrag in der Tabelle spezifiziert Kunde KName P. KAdr P. Kto <0 Seite 117 von 127 Tabelle wird gefüllt mit Werten Kunde KName Huber Jensen Michl Seite 118 von 127 Freie Tupelvariablen, die nur einmal benutzt werden, brauchen nicht aufgeführt zu werden. Dadurch ergibt sich eine einfachere Schreibweise der Anfrage: Lieferant LName LAdr Ware Preis P. P. Milch KAdr 8000 München 40 4300 Essen 12 8000 München 1 Beispiele für Anfragen Sprachelemente: Welche Lieferanten liefern Milch oder Mehl? Lieferant LName LAdr P. P. P. P. Entspricht im Tupelkalkül: Kommandos, z. B. P., I., D., … Bereichsvariablen: _X, _Huber Konstanten: Huber, Milch boolesche, arithmetische und relationale Operatoren {x1, x2 | ∃ x4 : Lieferant(x1, x2, Milch, x4) Ware Preis Mehl Milch ∨ Lieferant(x1, x2, Mehl, x4) } Beispiel: Welche Lieferanten liefern Milch? Lieferant LName _x P. entspricht im Tupelkalkül: {x1, x2 | ∃ LAdr _y P. Wer liefert Milch zu einem Preis zwischen 1 DM und 1,20 DM? Lieferant LName LAdr Ware Preis _X P. Milch >= 1.00 _X Milch <= 1.20 Entspricht im Tupelkalkül: Ware Preis Milch x4 : Lieferant(x1, x2, Milch, x4)} {x1, x2 | Seite 119 von 127 ∃ x4 : Lieferant(x1, x2, Milch, x4) ∧ x4 ≥ 1.00 ∧ x4 ≤ 1.20} Seite 120 von 127 Condition-Box Join-Anfragen Welche Lieferanten liefern Milch oder Mehl? Lieferant LName P. LAdr P. Ware _M Welcher Lieferant liefert an Huber? Preis Lieferant CONDITIONS _M = (Milch or Mehl) Auftrag Welche Lieferanten liefern Brie und Perrier, wobei der Gesamtpreis nicht 7 DM übersteigt? Lieferant LName P. _Huber _Huber LAdr Ware Preis Brie _X Perrier _Y CONDITIONS _X + _Y <= 7.00 Wer liefert Milch zu einem Preis zwischen 1 DM und 1,20 DM? Lieferant LName _X P. LAdr Ware Preis Milch _DM LName P. LAdr KName Huber Ware _Brot Ware _Brot Preis Menge Entspricht im Tupelkalkül: {x1| ∃ x2, x3, x4 : Lieferant(x1, x2, x3, x4) ∧ ∃ y3 : Auftrag(Huber, x3,y3)} Beachte: CONDITIONS _DM = (≥1.00 and ≤1.20) QBE entfernt automatisch Duplikate Seite 121 von 127 Seite 122 von 127 Ergebnisrelation Negation Ermittle die Kunden, ihren Kontostand, was sie bestellen, wieviel sie bestellen. Kunde KName _Huber KAdr Auftrag KName Ware _Huber _Bier Bestellung Name P. _Huber Was _Bier Kto _100 ¬ Ware Preis _Brot _50 _Brot < _50 Erläuterungen: Menge _10 – – Wieviel Kontostand _10 _100 Erläuterungen – – Finde für jede Ware den billigsten Lieferanten! Lieferant LName LAdr P. neues Tabellengerüst muß vor der Anfrage erzeugt werden P. unter dem Relationennamen bedeutet, daß alle Attribute der Relation ausgegeben werden. Seite 123 von 127 Negation ¬ bedeutet, daß kein solches Tupel existiert. Beachte aber: Wenn ¬ vor einem Attribut benutzt wird, ist dies eine Abkürzung für Finde alle Lieferanten, die zwei Artikel liefern können. Lieferant LName LAdr Ware P. _x _Brot ¬ _Brot _x ≠ . Preis Seite 124 von 127 Aggregatfunktionen Einfügen, Ändern und Entfernen Alle Aggregatfunktionen fordern, daß Duplikate zunächst nicht beseitigt sind (implementiert durch ‘ALL.’). Durch das Schlüsselwort ‘UN.’ ist es möglich Duplikate zu beseitigen und trotzdem noch die Aggregatsfunktionen zu verwenden. Aggregatsfunktionen: SUM., AVG., MAX., MIN., CNT. Anfragen: Befehl U. wird zum Abändern der Werte in Nicht-Schlüsselattributen benutzt. – leere Felder werden nicht geändert – Werte der Schlüsselattribute müssen angegeben sein – Milchmann setzt den Preis der Milch auf 1,30 DM. Lieferant LName LAdr Ware Preis U. Milchmann Milch 1.30 – Kuhlmann erhöht alle Preise seiner Artikel um 10%. Lieferant LName LAdr Ware Preis U. Kuhlmann _Brot 1.1*_Wert Kuhlmann _Brot _Wert Wieviel Lieferanten gibt es, die momentan etwas liefern. Lieferant LName LAdr Ware Preis P.CNT.UN.ALL._X Wieviel Liter Milch sind bestellt? Auftrag KName Ware Menge Milch P.SUM.ALL._X Seite 125 von 127 Relationen und Sichten anlegen Relation wird wie folgt angelegt: I. Kunde I. KEY I. TYPE I. DOMAIN I INVERSION I Erläuterungen: – – – – KName Y CHAR Namen Y KAdr N CHAR Adressen N Kto N FIXED Beträge N KEY: Definition der Schlüsselattribute TYPE: Datentyp des Attributs DOMAIN: Name für den Wertebereich des Attributs INVERSION: Indexstruktur für dieses Attribut angelegt? eine Sicht wird wie folgt angelegt: I.VIEW Gute_Kunden I. I. Name Adr _Huber _Augsburg Befehl I. und D. werden zum Einfügen und Löschen von Tupeln benutzt. – Huber bestellt 20 Stück der Artikel, von denen Michl mehr als 100 Stück bestellt hat. Auftrag KName Ware Menge I. Huber _Brot 20 Michl _Brot > 100 Kto >0 Seite 127 von 127 Seite 126 von 127