Anfrageformulierung: Allgemeines Ein wesentliches, charakteristisches Merkmal aller Datenbankmanagement nkmanagement- systeme ist die Unterstützung einer (oder mehrerer) Anfragesprachen. Eine Anfrage ist ein Ausdruck dieser Sprache, der...... im Prinzip beliebig komplexe Suchkriterien ausdrücken kann.... sich auf eine oder mehrere Tabellen gleichzeitig beziehen kann.... als Antwort beliebig viele Datensätze oder auch nur Ja/Nein liefern kann.... Datensätze als Antwortmenge wieder in Tabellenform zurückgibt. Access bietet zwei grundsätzlich verschiedene Anfragesprachen, die zwei völlig unterschiedliche "Paradigmen" der Anfrageformulierung repräsentieren: räsentieren: graphisch-interaktiv: interaktiv: "Query-by by-example" " (QBE) textuell: "Structured Query Language" (SQL) SQL ist die am weitesten verbreitete Anfragesprache für relationale DB. SQL ist standardisiert und wird von allen kommerziellen DBMS "verstanden". Informationssysteme 1
Access-Anfragesprachen: Anfragesprachen: QBE-Stil in der Entwurfssicht Welche Welche Heim- Heimspiele hat hat Werder Werder spiele Bremen Bremen gewonnen?? Tabelle, aus der die Daten stammen Formulierung im QBE-Stil Stil: graphisch dargestellt interaktiv konstruiert Auswahlkriterien Access-Bezeichnung: ebenfalls Entwurfssicht Schema der Antworttabelle Informationssysteme 2
Access-Anfragesprachen: Anfragesprachen: SQL-Formulierung derselben Anfrage Welche Welche Heim- Heimspiele hat hat Werder Werder spiele Bremen Bremen gewonnen?? Schema der Antworttabelle dieselbe Anfrage im SQL-Stil Stil formuliert: textuell dargestellt entweder per Hand eingegeben oder automatisch er- zeugt Auswahlkriterien Tabelle, aus der die Daten stammen Informationssysteme 3
Access-Anfragesprachen: Anfragesprachen: Antworttabelle in Datenblattsicht Welche Welche Heim- Heimspiele hat hat Werder Werder spiele Bremen Bremen gewonnen?? zugehörige Antwort als Tabelle im Datenblattformat Informationssysteme 4
Access-Anfragesprachen: Anfragesprachen: Synchronisation beider Stile Änderungen in der Anfrageformulierung in einer Sicht werden automatisch an die andere Sicht weitergereicht: Synchronisation beider Darstellungen QBE-Ansicht SQL-Ansicht SELECT FROM WHERE Informationssysteme 5
Vordefinierte Anfragen als DB-Inhalte in Access In Access ist es möglich, Anfragen (bzw. Abfragen) in der DB zu speichern. Beim Öffnen einer vordefi- nierten Anfrage wird die Antworttabelle jedesmal neu generiert. vordefinierte Abfragen in der Bundesliga-DB wichtig: Nicht die Antworttabelle wird gespeichert, sondern nur der Anfrageentwurf. Informationssysteme 6
Bundesligatabelle als Antworttabelle auf eine Anfrage Die Bundesliga- Tabelle ist z.b. durch eine Anfrage in Access definiert. Alle Felder der Ant- worttabelle dieser Anfrage sind über mehrere Stufen aus den Ergebnissen in 'Spiele2002' errechnet worden. "abgeleitete Tabelle" Informationssysteme 7
Vordefinierte Anfragen in der Bundesliga-DB Antworttabellen auf vordefinierte Anfragen werden ganz ähnlich h wie "richtige" Tabellen behandelt. Insbesondere können sie selbst wieder zum z Konstruieren neuer Anfragen dienen: Unteranfragen In der Bundesliga-DB ergibt sich folgende Hierarchie von (Unter-)Anfragen: Tabelle1 Tabelle Tabelle2 So So komplex komplex kann kann das das werden werden abgeleitete Tabellen gespeicherte Tabellen Spiele Siege Unentschieden Unentschieden Niederlagen AnzahlSiege AnzahlUnentschieden AnzahlNiederlagen Spiele2002 Vereine2002 Informationssysteme 8
Spezielle Anfragen in Access: nur in SQL möglich Im Bundesliga-Beispiel Beispiel kommen einige vordefinierte Anfragen vor, die in der Entwurfssicht nicht darstellbar sind (d.h., die man nicht im QBE-Stil aus- drücken kann), z.b. Siege oder Spiele. Diese Anfragen lassen Sie nur in SQL mit textuellen Mitteln definieren. In diesen Beispielen fehlt jedesmal die Möglichkeit, zwei gleich strukturierte Antworttabellen "aneinander zu hängen" bzw. "zu vereinigen", z.b. Siege HeimSiege AuswärtsSiege SQL bietet dazu einen speziellen Vereinigungsoperator für Relationen: UNION Mehr zu den Möglichkeiten von SQL lernen Sie im nächsten Kapitel Informationssysteme 9
Access-Pragmatik: Anfrageformulierung in der Entwurfssicht: in der Datenblattansicht: 1 Wechseln in die alte Datenblattsicht (vor Entwurfsänderung) 2 Abspeichern eines Anfrageentwurfs 12 Ausführen der Anfrage, d.h. Wechsel in die neue Datenblattansicht 1 Wechseln in die Entwurfssicht 17 Suchen mittels "pattern matching" im Datenblatt im Menü zu diesem Punkt: SQL-Sicht Sicht als dritte Alternative Informationssysteme 10
Zustandsänderungen: Allgemeines "Schreibende" Zugriffe auf eine Datenbank... führen stets zu Zustandsübergängen der DB. finden stets unter Kontrolle des DBMS statt. drei grundsätzliche Arten von Änderungszugriffen: Einfügungen neuer Datensätze in eine Tabelle (engl.: "to insert") Löschungen existierender Datensätze aus einer Tabelle (engl.: "to delete") Modifikationen einzelner Felder bestimmter Datensätze (engl.: "to update" " oder "to modify") Einfügungen und Modifikationen werden nur akzeptiert (vom DBMS), D wenn die vereinbarten Datentypen der Felder im Schema zu den Datentypen D der Werte in den neuen/modifizierten Datensätzen "passen". Vorsicht Der englische Begriff "update" wird manchmal für Modifikationen, manchmal aber auch für beliebige Änderungen verwendet. Informationssysteme 11
Änderungen in Access: direkt im Datenblatt in Access: individuelle Änderungen von Datensätzen können direkt im Datenblatt vor- genommen werden (nur bei Tabellen, nicht bei Antworten) falscher Datentyp DBMS-Kontrolle Kontrolle: Einfügungen: beim Abspeichern Löschungen: Bestätigung gefor- dert Modifikationen: Datentypkontrolle komplexe Änderungen: später (Aktionsabfragen) Informationssysteme 12
2. Beispieldatenbank: "Stadt-Land Land-Fluss" Weitere Access-Beispieldatenbank Beispieldatenbank,, die in der Vorlesung verwendet wird und zu Übungszwecken allen Teilnehmern zur Verfügung steht (siehe Vorlesungsseiten im Web). stadtlandfluss2000.mdb Datenbank mit grundlegenden Informationen zur Geographie Deutschlands: wichtigste Städte und Flüsse (z.b. alle deutschen Städte über 50000 Einwohner) alle Bundesländer und Regierungsbezirke zahlreiche Informationen zum geographischen Zusammenhang dieser r Objekte (z.b. In welchem Land liegt Bonn? Welche Nebenflüsse hat der Rhein?) DB wird ständig erweitert - eigene Beiträge willkommen Ziel dieser "Investition": Gelegenheit zum Üben korrekter Anfrageformulierung anhand einer r hin- reichend großen Datenmenge aus realistischen Fakten von allg.. Interesse. Wird im ersten Teil der Vorlesung und in den Übungen verwendet. Informationssysteme 13
Tabellen in der StadtLandFluss-Datenbank Das Schema dieser Beispiel-DB enthält zahlreiche Tabellen, aber nur wenige vor- definierte Anfragen. Aber es eignet sich hervorragend zum Üben im Formulieren eigener Anfragen Informationssysteme 14
StadtLandFluss-Datenbank: Nebeneffekt Können Sie all diesen deutschen Städten ihre Namen zuordnen? Deutschland Erkennen Sie in dieser Karte alle 16 Bundes- länder? Wenn nicht, dann nutzen Sie die Arbeit mit der SLF-DB auch zum Verbessern Ihrer geographischen Grund- Kenntnisse Informationssysteme 15
SLF-Datenbank: Objektklassen und Beziehungen hauptstadt_von nachbarland_von Land Stadt stadt_in_land fluss_durch_land Kommt Kommt man man auf auf so so eine eine Weise Weise zu zu einem einem "guten" "guten" Tabellenentwurf Tabellenentwurf?? fluss_entspringt_in_land stadt_an_fluss Fluss quellfluss_von nebenfluss_von Informationssysteme 16
Verknüpfen von Tabellen über "gleichartige" Felder (beinahe) wichtigste Technik der Anfrageformulierung: Verknüpfen von Tabellen über Felder mit gleichem Felddatentyp im QBE-Stil (d.h. in der Entwurfssicht): Erzeugen von Verbindungslinien zwischen Feldern durch "Drag and Drop" oder selbstständig durch Access stadt ID Kfz Name Einwohner stadt_in_land Name Land hauptstadt_von_land Bundesland Hauptstadt automatisch von Access erstellt wegen Namens- gleichheit der Felder per Hand zu erstellen wegen gleichem Typ und gleicher Bedeutung Informationssysteme 17
Verknüpfungen: implizite Antworttabelle stadt ID Kfz Name Einwohner stadt_in_land Name Land hauptstadt_von_land Bundesland Hauptstadt Effekt der Verknüpfung: Bilden einer grossen "Produkttabelle" aus allen Feldern der verknüpften Tabellen ID Kfz stadt.name Einwohner stadt_in_land.name Land Bundesland Hauptstadt nötig wegen Namensgleichheit aber: : Nur Datensätze mit identischem Wert in verknüpften Feldern werden auf- genommen 1 B Berlin 3382 Berlin BE BE Berlin Informationssysteme 18
Verknüpfung in SQL-Stil: Stil: JOIN-Operation Operation im SQL-Stil Stil: : eigener Operator zum Verknüpfen von Tabellen Join Join (engl., auf Deutsch: "Verbund") diverse Varianten: INNER JOIN, LEFT JOIN, RIGHT JOIN genaue Beschäftigung damit in Kapitel 4 SELECT stadt.*, stadt.*, stadt_in_land.*, hauptstadt_von_land.* FROM FROM (stadt (stadt INNER INNER JOIN JOINstadt_in_land ON ON stadt.name = stadt_in_land.name) INNER INNER JOIN JOINhauptstadt_von_land ON ON stadt_in_land.land = hauptstadt_von_land.bundesland; Join-Bedingung: Namensgleichheit Join-Bedingung: von Hand wegen gleichem Typ Informationssysteme 19
Warum "Query by Example" "? stadt ID Kfz Name Einwohner stadt_in_land Name Land hauptstadt_von_land Bundesland Hauptstadt Bezeichnung "Query by example" (= "Anfrage durch Beispiel") stammt von der ursprünglichen Form dieser graphischen Sprache (aus den 1970er Jahren): Verknüpfung wurde definiert durch Verwenden identischer Beispiel- werte in zu verknüpfenden Feldern stadt_in_land.name Land ID Kfz stadt.name Einwohner Berlin BE Berlin Bundesland BE Hauptstadt Informationssysteme 20
Aufbau von Anfragen im QBE-Stil: Details Bezeichnung für solche Abfragen/Anfragen, die Antworttabellen liefern: Auswahlabfrage Feldname Tabellenname Feld: Tabelle: Sortierung: Anzeige: Kriterien: oder: Einwohner stadt Aufsteigend > 150 fest fest vorgegebene Sortierung Feld Feld soll soll angezeigt werden werden?? Auswahlkriterien für für anzuzeigende Feldwerte mehrere Kriterien für ein Feld mit Booleschen Operatoren verknüpft, z.b.: > 150 Und < 500 Informationssysteme 21
Aufbau von Anfragen im QBE-Stil: Konjunktion Kriterien für verschiedene Felder werden implizit konjunktiv verknüpft. Feld: Tabelle: Sortierung: Anzeige: Kriterien: oder: Einwohner stadt Aufsteigend > 150 Und < 500 Land stadt_in_land <> "BY" explizite Konjunktion Formulierung der dahinter stehenden Bedingung im SQL-Stil: Stil: WHERE stadt.einwohner > 150 150 AND AND stadt.einwohner < 500 500 AND AND stadt_in_land.land <> <> "BY" "BY" implizite Konjunktion Informationssysteme 22
Aufbau von Anfragen im QBE-Stil: Disjunktion In einer neuen Kriterienzeile können Alternativen (implizite Oder-Verknüpfungen) auch über mehrere Felder hinweg formuliert werden: Feld: Tabelle: Sortierung: Anzeige: Kriterien: oder: Einwohner stadt Aufsteigend > 150 Land stadt_in_land = "BY" = "NW" Formulierung der dahinter stehenden Bedingung im SQL-Stil: Stil: WHERE ( ( stadt.einwohner > 150 150 AND AND stadt_in_land.land <> <> "BY" "BY") ) OR OR (stadt_in_land.land <> <> "NW" "NW") ) implizite Disjunktion Informationssysteme 23