SQL- und NoSQL-Datenbanken

Eine Datenbank mit Access erstellen

Schritt 1: Entitäten-Beziehungsmodell entwickeln

Schritt 2: Datenbankschema entwerfen

Schritt 3: Datenbankschema in Access definieren

Schritt 4: Wertebereichsbedingungen spezifizieren

Schritt 5: Prüfregeln für Tupel festlegen

Schritt 6: Referenzielle Integrität formulieren

Schritt 7: Daten eingeben

Schritt 8: Datenbank mit QBE auswerten

Schritt 9: Abfragen mit SQL durchführen

Schritt 10: Komplexere Abfragen (Join oder geschachteltes SQL) erfassen

Eine Datenbank mit Access erstellen

Mit dieser Anleitung können Sie ein einfaches Datenbankprojekt aus der Reisebranche selbstständig durchspielen. Ausgehend von einem Entitäten-Beziehungsmodell werden Sie die Tabellenstruktur der Datenbank herleiten und in Access definieren. Nachdem Sie die Tabellen mit Daten gefüllt haben, können Sie mit selbst formulierten Abfragen die wichtigsten Informationen aus der Datenbank extrahieren.

Access ist ein Softwareprodukt mit grafischer Bedienungsoberfläche zur Verwaltung von Tabellen. Alle Ihre Eingaben werden in SQL-efehle übersetzt und ausgeführt. Access bietet Ihnen aber auch die Möglichkeit, direkt mit SQL-Befehlen zu arbeiten, was sich beim Erstellen komplexer Datenbankabfragen empfiehlt.

Die Elemente einer Access-Datenbank werden mit Hilfe von Registern verwaltet, wie der Blick auf eine geöffnete Access-Datenbank zeigt:

Im Beispiel werden die in der Datenbank travelblitz enthaltenen Register (links) und die Elemente der Register (Tabellen, respektive Abfragen) angezeigt.

Minimal enthält eine Access-Datenbank die folgenden Register:

  • Die Tabellen bilden die Grundlage jeder Access-Datenbank. Sie enthalten die in der Datenbank gespeicherten Informationen in Form von Tupeln (Datensätzen).
  • Mit Abfragen lassen sich Informationen aus der Datenbank selektieren.

Eine Access-Datenbank kann weitere Register enthalten, deren Elemente die Bedienbarkeit erleichtern:

  • Formulare gestatten die komfortable Eingabe, Anzeige und Verwaltung der Daten mit Hilfe von Datenmasken.
  • Berichte dienen zum Ausdrucken von Daten in übersichtlicher und ansprechender Form (z.B. für die Rechnungserstellung).
  • Makros und Module ermöglichen die Automatisierung komplexer Datenbankabläufe.

In dieser Anleitung beziehen sich die Abbildungen und Befehle auf die deutsche Version von Access 2007; es sollte Ihnen aber nicht schwerfallen, den Bezug zu anderen Versionen herzustellen.

Zur Fallstudie travelblitz

Als Beispiel realisieren Sie eine Datenbankanwendung für das Reisebüro travelblitz, das sich auf die Vermietung von Ferienhäusern auf griechischen Inseln spezialisiert hat. Die Ferienhäuser befinden sich auf verschiedenen Inseln. Es ist damit zu rechnen, dass in Zukunft weitere Häuser auf neuen Inseln dazukommen. Momentan werden Kunden- und Häuserdaten traditionell mit der Hilfe eines Karteisystems verwaltet, die Abfragemöglichkeiten sind entsprechend eingeschränkt. Beispielsweise ist es zeitraubend herauszufinden, welche Häuser weniger als 400 Euro pro Woche kosten und in einem bestimmten Zeitraum (z.B. für die ersten drei Juliwochen) frei sind. Sie möchten sich nun besser auf die Kundenanfragen einstellen und beschliessen, den Missstand durch den Einsatz einer Graphendatenbank zu beseitigen.

Schritt 1: Entitäten-Beziehungsmodell entwickeln

Für die Erstellung eines Entitäten-Beziehungsmodells treffen Sie die folgenden vereinfachenden Annahmen:

  1. Die Saison dauert von Woche 10 bis 40, d.h. von Anfang April bis Ende September. Der Mietpreis ist während der gesamten Saison konstant; die Häuser werden  wochenweise vermietet.
  2. Eine Buchung enthält die folgenden Informationen: Haus, Kunde und Nummer der Woche. Falls ein Kunde ein Haus mehrere Wochen hintereinander mietet, müssen mehrere Buchungen angelegt werden (eine pro Woche).
  3. Der Zeitraum jeder Buchung, d.h. die betreffende Woche, wird in Form einer Zahl zwischen 10 und 40 angegeben. Für jedes Jahr wird eine neue Datenbank angelegt.
  4. Die Datenbank enthält vorläufig keinerlei Informationen über Zahlungsfristen, Rechnungen usw.

Diese Annahmen dienen dazu, das Datenmodell zu Übungszwecken so klein wie möglich zu halten. Sie sind nun aufgefordert, das Entitäten-Beziehungsmodell für travelblitz zu entwickeln: Welche Entitätsmengen und Beziehungsmengen legen Sie fest? Welche Merkmale ordnen Sie den Entitätsmengen zu, welche den Beziehungsmengen? Welche Identifikationsschlüssel sehen Sie für die Entitätsmengen vor?

Mit den Entitätsmengen KUNDE, HAUS und INSEL legen Sie das Entitäten-Beziehungsmodell für die Ferienhaus-Verwaltung fest. Die Beziehungsmenge BELEGUNG zeigt Ihnen die Ausleihe der Ferienhäuser an die Kunden; die Beziehung ist komplex-komplex. Das Merkmal Woche haben Sie als typisches Beziehungsmerkmal erkannt, da es die Belegung eines Ferienhauses durch einen Kunden zeitlich festlegt. Schliesslich drücken Sie die hierarchische Zuordnung der Ferienhäuser zu den Inseln mit der Beziehungsmenge LAGE aus.

Schritt 2: Datenbankschema entwerfen

Nun stellen Sie sich folgende Fragen: Wie sieht das relationale Datenbankschema für die Ferienhaus-Verwaltung aus? Welche Abbildungsregeln verwenden Sie, um das obige Entitäten-Beziehungsmodell in Tabellen zu überführen ?

Aus dem Entitäten-Beziehungsmodell leiten Sie gemäß Abschnitt 2.3 die Tabellenstruktur der Datenbank her:

  1. Der Abbildungsregel 1 folgend müssen Sie für jede Entitätsmenge eine eigenständige Tabelle Als Namen für die Tabellen wählen Sie der Einfachheit halber die Namen der entsprechenden Entitätsmengen. Damit erhalten Sie folgende Tabellen:
    • KUNDE (KundenId, Name, Vorname, Anrede, Strasse, PLZ, Ort)
    • HAUS (HausId, Hausname, Anz_Zimmer, Max_Personen, Meerblick, Miete)
    • INSEL (InselId, Inselname, Besonderheiten)
      Wie üblich heben Sie die Identifikationsschlüssel kursiv hervor.
  2. Gemäß der Abbildungsregel 3 müssen Sie auf alle Fälle für die komplex-komplexe Beziehungsmenge BELEGUNG eine eigenständige Tabelle definieren, zur Speicherung der Mietbeziehungen. Diese Tabelle enthält neben den Fremdschlüsselattributen für Häuser (HausId) und Kunden (KundenId) das Beziehungsmerkmal Woche, das die Zeitangabe der Vermietung in Form der Wochennummer enthält:
    • BELEGUNG (HausId, KundenId, Woche)
      Als zusammengesetzten Schlüssel zeichnen Sie die HausId und die Wochennummer aus. Damit verhindern Sie auf effiziente Art Doppelbelegungen resp. Überbuchungen.
  3. Die einfach-komplexe Beziehungsmenge LAGE zwischen Ferienhäusern und Inseln können Sie auf zwei Arten im Datenbankschema darstellen: entweder als eigenständige Tabelle (Abbildungsregel 2) oder durch einen Fremdschlüsselverweis in der Ferienhaustabelle (Abbildungsregel 4). Sie wählen die zweite Variante und erweitern die Tabelle HAUS wie folgt:
    • HAUS (HausId, Hausname, Anz_Zimmer, Max_Personen, Meerblick, Miete, InselId_Lage)
  4. Als Resultat erhalten Sie die folgenden vier Tabellen, die Sie noch hinsichtlich der dritten Normalform überprüfen müssen:
    • KUNDE (KundenId, Name, Vorname, Anrede, Strasse, PLZ, Ort)
    • HAUS (HausId, Hausname, Anz_Zimmer, Max_Personen, Meerblick, Miete, InselId_Lage)
    • INSEL (InselId, Inselname, Besonderheiten)
    • BELEGUNG (HausId, KundenId, Woche)

Bis auf die Tabelle KUNDE erfüllen alle Tabellen die dritte Normalform. Da das Merkmal Ort transitiv via PLZ vom Merkmal KundenId abhängig ist, müssten Sie eine zusätzliche Tabelle ORTSCHAFT definieren, mit den beiden Merkmalen PLZ und Ort. Aus praktischen Gründen verzichten Sie jedoch auf diese Aufteilung.

Schritt 3: Datenbankschema in Access definieren

Starten Sie Access und geben Sie an, dass sie eine neue leere Datenbank erstellen wollen (1). In (2) können Sie den Dateinamen der Datenbank angeben:

Damit Access weiss , wo die Datei für die Datenbank angelegt werden soll, können Sie neben dem Feld Dateiname (2) auf das Ordnersymbol klicken. Dieses öffnet das Fenster Neue Datanbankdatei. In diesem Fenster können Sie das Laufwerk, das Verzeichnis und den Dateinamen (gleicher wie in (2)) angeben:

Ist das Verzeichnis und der Name der Datenbank ausgewählt, kann mit dem Knopf Erstellen unterhalb von (2) die Datenbank erstellt werden. Anschliessend erscheint ein Fenster, indem direkt die erste Tabelle der Datenbank editiert werden kann.

Nun können Sie mit dem Definieren des Datenbankschemas beginnen. Definieren Sie als erstes die Kundentabelle wie folgt:

1. Wählen Sie links oben in der Schaltfläche Ansichten die Ansicht Entwurfsansicht .

2. Access verlangt zuerst, dass die Tabelle gespeichert wird. Geben Sie den Namen der Tabelle im aufgehenden Fenster ein und speichern Sie somit die Tabelle:

Access_de_43. Access präsentiert anschliessend eine Tabelle, in der man die Attribute der zu definierenden Tabelle zeilenweise einträgt. Für jedes Attribut müssen Sie die folgenden Angaben festlegen:

  • Feldname,
  • Felddatentyp,
  • eine kurze Beschreibung des Attributs.

Den Feldnamen und die Beschreibung müssen Sie eingeben. Den Datentyp können Sie aus einer Liste auswählen: Klicken Sie in der Spalte Felddatentyp in die entsprechende Auswahlliste (Pfeil zum Öffnen der Liste verwenden). Wählen Sie aus der Liste einen Datentyp für das gewünschte Merkmal:

Die wichtigsten Datentypen in Access sind: Text, Zahl, Währung, Wahrheitswert (ja/nein) und Datum.

4. Zum Auszeichnen des Primärschlüssels markieren Sie das betreffende Attribut (resp. die betreffenden Attribute) und verwenden dann in der Schaltfläche Tools den Befehl Primärschlüssel . Falls der Primärschlüssel aus mehreren Attributen zusammengesetzt ist, markieren Sie zunächst nur ein Schlüsselmerkmal, drücken dann die CTRL-Taste und markieren die anderen zum Schlüssel gehörenden Attribute.

5. Nach dem Definieren der Feldnamen, können Sie in der Schaltfläche Ansicht zwischen den Ansichten Datenblattansicht und Entwurfsansicht wechseln. In der Datenblattansicht können die Datentupel eingetragen werden. Wird in der Entwurfsansicht eine Änderung vorgenommen, so verlangt Access beim Wechseln der Ansicht, dass die Tabelle zuerst gespeichert wird.

Falls Sie die Tabelle KUNDE vollständig definiert haben, sollte die Entwurfsansicht wie folgt aussehen:

Definieren Sie nun die Tabellen HAUS, INSEL und BELEGUNG. Um neue Tabellen zu erstellen, klicken sie auf das Menü Erstellen und dann auf den Befehl Tabelle  in der Schaltfläche Tabellen.

Als Nächstes vereinbaren Sie strukturelle Integritätsbedingungen, wie sie in den Abschnitten 2.5 und 3.8 behandelt wurden. In Access lassen sich drei Typen von Integritätsregeln definieren:

  • Wertebereichsbedingungen (siehe Schritt 4),
  • Prüfregeln für Tupel (siehe Schritt 5) und
  • referenzielle Integrität (siehe Schritt 6).

Diese Integritätsbedingungen können Sie unabhängig voneinander definieren. Im Folgenden vereinbaren Sie jeweils Bedingungen für Wertebereiche und Tupel sowie die referenzielle Integrität für Fremdschlüsselmerkmale.

Schritt 4: Wertebereichsbedingungen spezifizieren

Wie können Sie für ein bestimmtes Attribut die zulässigen Datenwerte einschränken ? Beispielsweise möchten Sie für das Merkmal Woche der Tabelle BELEGUNG nur Zahlen zwischen 10 und 40 eintragen, da die Ferienhäuser in den übrigen Wochen nicht vermietet werden. Wie realisieren Sie diese Integritätsbedingung in Access ?

Um eine Wertebereichsbedingung für das Merkmal Woche zu formulieren, öffnen Sie die betreffende Tabelle in der Entwurfsansicht und markieren darin das Attribut. Im unteren Bereich des Fensters erscheinen jeweils detailliertere Informationen zum momentan markierten Attribut. Im Feld Gültigkeitsregel können Sie eine Prüfregel für das markierte Attribut eintragen. Falls ein Anwender später einen Wert in dieses Feld eingeben möchte, der die eingetragene Integritätsregel verletzt, so weigert sich die Datenbanksoftware und reagiert mit einer Fehlermeldung. Im Feld Gültigkeitsmeldung können Sie einen möglichst aussagekräftigen Text für die Fehlermeldung eintragen.

Wird dieses Feld leer gelassen, so enthält die Fehlermeldung einen nichtssagenden Standardtext wie z.B. «ungültige Eingabe».

Definieren Sie die Integritätsbedingung für das Merkmal Woche und erfassen Sie eine aussagekräftige Fehlermeldung.

Als Anrede der Kunden möchten Sie «Herr» und «Frau» zulassen. Wie formulieren Sie eine entsprechende Integritätsbedingung in Access ?

An dieser Stelle können Sie zwei weitere Einstellungen vornehmen, die ebenfalls zu den Wertebereichsbedingungen zählen. Es handelt sich um die Merkmalseigenschaften Feldgrösse und Eingabe erforderlich:

  • Mit dem Schlüsselwort Feldgrösse können Sie den Datentyp für das markierte Attribut näher spezifizieren. Bei Textmerkmalen ist hier die maximale Länge des Textes, bei Zahlmerkmalen der Typ der Zahl (ganze Zahl als Integer, Gleitkommazahl als Single oder Double) gemeint.
  • Mit dem Schlüsselwort Eingabe erforderlich kann das Ausfüllen eines Attributes erzwungen werden. Ein Merkmal mit Eingabe erforderlich=Ja darf beim Ausfüllen nicht leer gelassen werden.

Bemerkung: Sie können Schritt 4 simultan mit Schritt 3 durchführen, indem Sie während der Definition jedes Attributes die jeweiligen Eigenschaften im unteren Bereich des Fensters mit vereinbaren.

Schritt 5: Prüfregeln für Tupel festlegen

Diese Integritätsbedingung bezieht sich auf mehrere Merkmale desselben Tupels und setzt deren Inhalte zueinander in Beziehung. Ein Beispiel für eine solche Regel wäre, dass die Miete für jedes Haus mindestens 100 Euro je Zimmer betragen soll. Diese Bedingung lässt sich durch die beiden Attribute Anz_Zimmer und Miete durch «Miete ≥ Anz_Zimmer*100» ausdrücken.

Um eine Prüfregel für Tupel zu vereinbaren, öffnen Sie die Tabelle in der Entwurfsansicht und klicken Sie in der Schaltfläche Einblenden/Ausblenden auf den Befehl Eigenschaftenblatt .

Nun erhalten Sie ein Fenster mit den Eigenschaften der Tabelle auf der rechten Seite. Unter Gültigkeitsregel können Sie eine Regel eintragen, die jedes Tupel der Tabelle erfüllen muss. Unter Gültigkeitsmeldung erfassen Sie die Fehlermeldung, die angezeigt wird, falls ein Benutzer beim Eintrag eines Tupels in die Datenbank diese Regel verletzt:

Sie können nun die angesprochene Integritätsregel für die Tabelle HAUS erfassen.

Schritt 6: Referenzielle Integrität formulieren

Erinnern Sie sich an die Regel der referenziellen Integrität aus den Abschnitten 2.5 und 3.8 ? Sie können damit verhindern, dass in einem Fremdschlüsselmerkmal ein Wert eingetragen wird, zu dem in der referenzierten Tabelle kein Tupel existiert. In der Datenbank von travelblitz möchten Sie sich für jedes Fremdschlüsselattribut durch referenzielle Integrität gegen derartige ungültige Dateneingaben absichern.

Die Fremdschlüsselbeziehungen werden in der Entwurfsansicht von Access als Linien eingezeichnet, die die Fremdschlüsselmerkmale mit den entsprechenden Primärschlüsseln der referenzierten Tabellen verbinden. Vereinbaren Sie die referenzielle Integrität zunächst für das Fremdschlüsselmerkmal InselId in der Tabelle der Ferienhäuser. Dazu müssen Sie die Teilschritte 1 bis 4 durchlaufen:

1. Wählen Sie das Menü Datenbanktools oberhalb der Schaltflächen aus. Anschliessend erscheint als zweite von links die Schaltfläche Einblenden/Ausblenden. Klicken Sie in dieser Schaltfläche auf den Befehl Beziehungen .

2. Wählen Sie in der Schaltfläche Beziehungen den Befehl Tabellanzeigen . Anschließend erscheint das Fenster Tabelle anzeigen zum Auswählen der Tabellen für die referentielle Integrität:

3. Wählen Sie mit Hinzufügen die Tabellen HAUS und INSEL aus, und beenden Sie die Tabellenauswahl mit Schließen. Nun werden beide Tabellen schematisch in einem Fenster namens Beziehungen angezeigt (Primärschlüssel sind mit dem Schlüsselsymbol gekennzeichnet):

Vergrössern Sie zunächst den Rahmen um das Schema der Häusertabelle, damit alle Attribute angezeigt werden (wie abgebildet), und verschieben Sie die Haustabelle etwas nach rechts, damit mehr Platz zwischen den beiden Schemas ist (zum Verschieben eines Fensters klicken Sie in dessen Titelleiste und ziehen das Fenster bei gedrückter Maustaste an die gewünschte Stelle).

4. Positionieren Sie den Mauszeiger nun über dem Attribut Haus.InselId, drücken Sie die Maustaste nach unten, halten Sie sie weiter gedrückt und ziehen Sie den Mauszeiger zum Attribut Insel.InselId. Es erscheint das Eingabefenster Beziehungen bearbeiten. Machen Sie darin einen Haken bei Mit referentieller Integrität und wählen Sie Erstellen. Nun sind beide Attribute durch eine Linie miteinander verbunden:

Falls die Linie nicht so aussieht wie abgebildet, haben Sie etwas falsch gemacht. Prüfen Sie in diesem Fall, ob die referenzielle Integrität vereinbart wurde. Machen Sie dazu einen Rechtsklick auf die Verbindungslinie und wählen Sie Beziehung bearbeiten. Falls dies nichts nützt, überprüfen Sie, ob die Datentypen beider Attribute übereinstimmen, und korrigieren Sie diese gegebenenfalls. Falls auch dies nichts nützt, löschen Sie die Verbindungslinie und beginnen von vorne.

5. Beenden Sie die Definition der Fremdschlüsselbeziehungen, indem Sie den Befehl auf das kleine Kreuz  in der Schaltfläche Beziehungen klicken. Speichern Sie die durchgeführten Änderungen ab.

Vereinbaren Sie die referenzielle Integrität nun auch für die übrigen Fremdschlüsselmerkmale. Verwenden Sie wiederum den Befehl Beziehungen in der Schaltfläche Einblenden/Ausblenden im Menü Datenbanktools. Um weitere Tabellen anzeigen zu lassen, klicken sie auf Tabelle anzeigen und fahren anschliessend fort wie gehabt.

Wenn alles richtig funktioniert, sieht das Beziehungen-Fenster anschliessend wie folgt aus:

Nun ist das Datenbankschema fertig definiert. Sie können mit der Dateneingabe beginnen!

Schritt 7: Daten eingeben

Öffnen Sie zunächst die Tabelle KUNDE. Sie müssen sich dazu im Navigationsbereich im Register Tabellen befinden. Zum Öffnen einer Tabelle haben Sie zwei Möglichkeiten: Entweder klicken Sie doppelt darauf oder Sie klicken mit der echten Maustaste auf die gewünschte Tabelle und wählen Öffnen.

Es erscheint die (zur Zeit noch leere) Tabelle, die momentan nur aus einer Zeile für die Dateneingabe besteht.

Geben Sie nun einige Datenwerte in die Tabelle ein:

Beachten Sie folgende Hinweise bei der Datenerfassung:

  1. Mit der Tabulator- oder Eingabetaste wechseln Sie in das jeweils nächste Feld. Nehmen Sie die Umschalt-Taste (auch Shift-Taste genannt) hinzu, so kehren Sie in das vorherige Feld zurück.
  2. Mit den Pfeiltasten erreichen Sie beliebige Tabellenabschnitte.
  3. Zum Widerrufen einer Eingabe dient Ihnen die Esc Taste: Durch einmaliges Drücken der Taste setzen Sie den Inhalt der aktuellen Zelle zurück, durch zweimaliges das gesamte Tupel.
  4. Zum Löschen eines Datensatzes markieren Sie die entsprechende Tupelzeile und drücken die Taste Delete.
  5. Zum Eingeben logischer Datenwerte (z.B. für das Attribut Meerblick) benützen Sie die Maus oder Leertaste.
  6. Zum Schliessen einer Tabelle klicken sie mit der rechten Maustaste auf den Namen der Tabelle in der Titelleiste und wählen Sie Schliessen oder klicken auf , welches sich auf der rechten Seite auf der gleichen Höhe wie der Namen der Tabelle befindet.

Erfassen Sie folgende Beispieltabellen:

KUNDE

INSEL

HAUS

BELEGUNG

Falls Sie die Tabellen in der vorgegebenen Reihenfolge ausgefüllt haben, gibt es keine Verletzungen der referenziellen Integrität. Dank des zusammengesetzten Primärschlüssels in der Tabelle BELEGUNG vermeiden Sie zudem eventuelle Doppelbuchungen.

Testen Sie nun, ob die vereinbarten Integritätsregeln von der Datenbank auch unterstützt werden. Versuchen Sie,

  • in der Tabelle BELEGUNG eine ungültige Wochennummer einzutragen,
  • bei einer Kundin die Anrede von «Frau» auf «Fräulein» abzuändern,
  • die Miete eines Hauses auf einen zu tiefen Wert herabzusetzen (vgl. die Prüfregel zur Miete),
  • bei einem Haus die Inselnummer auf einen nicht vorhandenen Wert abzuändern oder
  • das Haus Arethoussa aus der Datenbank zu löschen (Warum geht dies nicht ?).

Nun können Sie mit der Datenbank arbeiten und Geschäfte abwickeln. Beispielsweise möchten Sie Herrn Ernst Bircher, wohnhaft in der Seestra e 10 in 6004 Luzern erfassen, der Ende August das Ferienhaus Malia für drei Wochen (Wochen 33 bis 35) buchen möchte. Tragen Sie diesen Geschäftsfall in Ihre Datenbank ein.

Das Reisebüro travelblitz hat ein neues Ferienhaus mit dem Namen Pegasus auf der Insel Kreta akquiriert. Dieses Haus hat 5 Zimmer und kann maximal 8 Personen aufnehmen. Die Miete beträgt 650 Euro. Leider gibt es keine Sicht auf das Meer. Geben Sie nun all diese Angaben in die Datenbank ein.

Schritt 8: Datenbank mit QBE auswerten

Sie interessieren sich für Fragen wie: Welche Häuser befinden sich auf der Insel Kreta ? Welches Haus hat die Kundin Ursula Meier gebucht ? Welche Häuser sind in den Wochen 31 bis 33 frei ? Natürlich können Sie die Antworten anhand der obigen Tabelle ablesen. Sobald die Datenbank jedoch realistischere Ausmasse annimmt, lohnt sich der Einsatz von Datenbankauswertungssprachen.

In Access können Sie eine Abfrage entweder mit einer grafischen Oberfläche im QBE-Modus (vgl. Abschnitt 3.4.3) durchführen oder als SQL-Befehl eingeben (vgl. Abschnitt 3.4.1 und folgenden Schritt 9).

Sie wünschen eine Liste aller Häuser mit Preisangaben, wobei die Häuser nach der Höhe des Mietpreises sortiert sind:

Um eine Abfrage mit QBE durchzuführen, müssen Sie vier Schritte ausführen:

1. Klicken Sie im Menü Erstellen in der Schaltfläche Andere auf den Befehl Abfrageentwurf.

2. Selektieren Sie im Fenster Tabelle anzeigen die Tabellen, die Sie für die Abfrage benötigen und schließen Sie dann das Fenster. Es erscheint eine Entwurfstabelle, in die Sie im QBE-Modus die Abfrage eintragen können.

3. Pro Attribut der Entwurfstabelle können Sie eine der folgenden Optionen aktivieren:

  • Anzeigen des Attributs,
  • Sortieren der Datensätze nach diesem Attribut (Sortierung), nach auf-oder absteigender Folge oder
  • Heraussuchen von Datensätzen (Filtern) anhand einer Suchbedingung (Kriterien).

4. Um die Abfrage ausführen zu können, wechseln Sie mit dem Befehl Datenblattansicht in der Schaltfläche Ergebnisse in die Datenansicht. Access präsentiert dann das Resultat der Abfrage:

Bemerkung: Der leere Datensatz am Schluss bedeutet, dass über die Abfrage prinzipiell ein neuer Datensatz in die zugrunde liegende Tabelle eingetragen werden könnte. Wir raten Ihnen von dieser Eingabemöglichkeit jedoch ab.

Falls Sie eine Abfrage abändern wollen, wechseln Sie mit Entwurfsansicht zurück in die Entwurfsansicht. Dort führen Sie die gewünschten Änderungen durch und prüfen das Resultat in der Datenansicht.

5. Falls Sie die Abfrage in Zukunft benötigen, speichern Sie sie ab (vgl. nächster Abschnitt).

Sie speichern eine Abfrage entweder mit einem Rechtsklick auf die Kopfleiste des Abfragefensters und dem Befehl Speichern, oder Sie schliessen die Abfrage, wobei sich automatisch die Gelegenheit zum Speichern ergibt. Nach der Speicherung erscheint die Abfrage im Register Abfragen:

Mit einem Doppelklick auf die Abfrage können Sie diese jederzeit starten. Danach können Sie mit Hilfe der Schaltfläche Ansichten zwischen der Datenblattansicht und der Entwurfsansicht wechseln.

Beachten Sie: Das Resultat einer Abfrage sieht zwar aus wie eine Tabelle, die angezeigten Daten sind aber nicht in Tabellenform abgespeichert, sondern werden bei jedem Aufruf neu generiert. Falls Daten in einer Tabelle abgeändert werden, ändern sich also die Resultate aller darauf basierenden Abfragen automatisch.

Schritt 9: Abfragen mit SQL durchführen

Access wandelt jede Abfrage intern in einen SQL-Befehl um und führt diesen anschliessend aus. Sie können diesen SQL-Befehl auch anschauen. Dazu öffnen Sie die Abfrage und wählen den Befehl SQL Ansicht (im Aufklappmenü) in der Schaltfläche Ansichten.

Führen Sie nun die soeben erzeugte Abfrage «Hauspreise» durch und wählen Sie anschliessend die SQL-Ansicht aus:

Access stellt den Attributnamen immer die jeweiligen Tabellennamen voran. In den meisten Fällen können Sie in der SQL-Ansicht auf diese Präzisierung verzichten und den einfachen SQL-Befehl

SELECT   Hausname, Miete 
FROM     Haus
ORDER BY Miete; 

eingeben.

Sie wünschen eine Liste mit Namen, Vornamen, Postleitzahl und Ort aller Kunden aus der Ostschweiz (mit Postleitzahl ≥ 3000). Zum Erstellen dieser Abfrage wählen Sie eine neue Abfrage wie bei einer QBE-Abfrage. Wählen Sie dann das in der Schaltfläche Ereignisse die SQL-Ansicht. Nun geben Sie den benötigten Befehl in das Eingabefenster ein:

Führen Sie diese SQL-Abfrage aus und benutzen Sie den Befehl Datenblattansicht, um das Resultat anzuschauen:

Falls es Sie interessiert, wie Sie diese Abfrage in QBE formulieren könnten, wechseln Sie mit dem Befehl Entwurfsansicht in den QBE-Modus:

Vergleichen Sie den SQL-Befehl mit der Formulierung im QBE-Modus, so bemerken Sie, dass für beide Abfragetypen dieselben Angaben notwendig sind. Sie können deshalb einfache Abfragen wahlweise in SQL oder QBE erzeugen, je nachdem, wo Sie sich sicherer fühlen. Komplexere Abfragen (z.B. geschachtelte SQL-Befehle, siehe Schritt 10) müssen Sie in SQL formulieren.

Schritt 10: Komplexere Abfragen (Join oder geschachteltes SQL) erfassen

Häufig möchten Sie Daten aus mehreren Tabellen auswerten. Sie wünschen beispielsweise eine Übersicht über alle Häuser mit den jeweiligen Inselangaben:

Für dieses Resultat benötigen Sie die Tabellen HAUS und INSEL, indem Sie die beiden Tabellen über das Attribut InselId miteinander verknüpfen:

SELECT   Hausname, Inselname, Anz_Zimmer, Max_Personen, Meerblick, Miete
FROM     Haus, Insel
WHERE    Haus.InselId = Insel.InselId 
ORDER BY Hausname; 

Erzeugen Sie diese Abfrage und speichern Sie das Resultat ab.

Wie verknüpfen Sie mehr als zwei Tabellen miteinander ? Beispielsweise wollen Sie eine Liste aller Buchungen mit den Namen der Kunden inklusive der gebuchten Häuser:

Für diese Abfrage benötigen Sie die Tabellen HAUS, BELEGUNG und KUNDE:

SELECT   Hausname, Woche, Name 
FROM     Haus, Belegung, Kunde
WHERE    Haus.HausId = Belegung.HausId AND Kunde.KundenId = Belegung.KundenId
ORDER BY Hausname, Woche; 

Erzeugen Sie diese Abfrage und speichern Sie das Resultat unter dem Namen Buchungsdaten ab.

Bei einer geschachtelten Abfrage enthält ein SQL-Befehl weitere SQL-Befehle. Interessieren Sie sich beispielsweise für die Häuser auf der Insel Kreta, so können Sie mit einem inneren SQL-Befehl die Inselnummer von Kreta ermitteln und diese an den äusseren SQL-Befehl weiterreichen:

SELECT	Hausname
FROM	Haus
WHERE	InselId = (SELECT InselId
                   FROM   Insel
                   WHERE  Inselname = 'Kreta'); 

Erzeugen und testen Sie diese Abfrage, wobei Sie jeweils verschiedene Inselnamen in die Abfrage einsetzen.

Noch mächtiger wird eine geschachtelte SQL-Abfrage, wenn der innere Befehl nicht mit einem einzigen Vergleichswert arbeitet, sondern nacheinander mit mehreren Werten, die aus den Tupeln der äusseren Abfrage stammen. Interessieren Sie sich für Häuser, die in den Wochen 31 bis 33 frei sind, so können Sie ein geschachteltes SQL formulieren:

SELECT  HausId, Hausname 
FROM    Haus
WHERE   NOT EXISTS (SELECT *
                    FROM   Belegung
                    WHERE  Belegung.HausId = Haus.HausId 
                           AND Woche >= 31 AND Woche <= 33); 

Access liefert Ihnen das korrekte Resultat aus der obigen Tabelle der Buchungsdaten:

Wir zeigen Ihnen noch zwei Techniken, durch die Sie die Möglichkeiten der Sprache SQL weiter ausschöpfen. Sie können nämlich Abfragen selbst wie Tabellen behandeln:

SELECT  * 
FROM    Buchungsdaten 
WHERE   Name = 'Meier'; 

Dadurch erhalten Sie die Buchungssätze der Kunden mit Namen Meier:

Access gestattet Ihnen zudem Abfragen mit variablen Vergleichswerten. Diese müssen Sie erst beim Starten der Abfrage mit Inhalt füllen. Dadurch können Sie die obige Abfrage so verallgemeinern, dass sie für jeden Kunden funktioniert.

Ersetzen Sie in Ihrer Abfrage den Vergleichswert Meier durch eine Eingabeaufforderung in eckigen Klammern:

SELECT  *
FROM    Buchungsdaten
WHERE   Name = [Name des Kunden eingeben:]; 

Der Text in eckigen Klammern erscheint beim Starten der Abfrage in einem Fenster, in das der noch fehlende Vergleichswert eingetippt werden kann:

Access setzt den eingetippten Wert in die Abfrage ein, bevor es den SQL-Befehl ausführt.

Mit Hilfe dieser Technik können Sie die obigen beiden geschachtelten Befehle so abändern, dass sie für beliebige Inseln oder Zeiträume gelten.

Designed & Developed by Minh Tue NGUYEN