Die Erstellung einfacher Abfragen in MS Access auf der Basis von SQL
Unsere Schuldatenbank ist nun soweit fertig. Wir haben den kompletten Arbeitsablauf und die damit verbundenen Überlegungen kennen gelernt, welche auf dem Weg zur Implementierung durchlaufen bzw. angestellt werden. Zudem haben wir der Persistenzschicht noch die Fachkonzeptschicht hinzugefügt. Im nun vorliegenden Kapitel werden wir uns die Auswertung einer Datenbank mit Hilfe von Abfragen näher ansehen.
Sie können sich die Datenbank „Schule“ hier herunterladen, um die Erklärungen und Erläuterungen zu Abfragen praktisch nachvollziehen zu können. Hierzu benötigen Sie zusätzlich eine Version von MS Access ab Version 2007.
Um uns die Bedeutung von Abfragen im Gesamtzusammenhang einer Datenbank vor Augen zu führen, soll die folgende Grafik für einen Überblick sorgen:

Die Tabellen bilden als Persistenzschicht die Datenbasis. Auf sie kann über Abfragen und Formulare lesend als auch schreibend zugegriffen werden.
Berichte dienen der ausschließlichen Datenausgabe.
So können die Daten der Tabelle(n) über Abfragen und Formulare, z.B. zum Zweck der Datenpflege, geändert werden. Lesender Zugriff auf die Abfragen kann wiederum über Formulare und Berichte erfolgen. Die in Abfragen und Formularen abgelegten Informationen können durch Berichte ausgelesen werden.
Bevor wir die verschiedenen Möglichkeiten kennenlernen werden, die Abfragen im Rahmen einer Datenbank bieten, wollen wir uns zunächst einen Überblick über die verschiedenen Abfragearten verschaffen, die MS Access bietet:
- Auswahlabfrage
- Parameterabfrage
- Aktualisierungsabfrage
- Tabellenerstellungsabfrage
- Anfügeabfrage
- Löschabfrage
Während die erstgenannten Abfragearten – Auswahl- und Kreuztabellenabfrage – keinerlei Änderungen an den Daten in der Persistenzschicht der Datenbank vornehmen, verändern die vier letztgenannten diese Informationen, weswegen sie zusammengefasst auch als Aktionsabfragen bezeichnet werden.
Was verstehen wir grundsätzlich unter einer Abfrage in einer Datenbank?
Durch eine Abfrage werden alle Daten, die ausgewählt werden, in eine neue Umgebung – die Abfrage geschrieben. Diese ist mit der ursprünglichen Tabelle dynamisch verbunden. Wird die Ursprungstabelle geändert, wird die Abfrage aktualisiert und umgekehrt.
Wie nun eine Abfrage in MS Access erstellt wird, soll im Folgenden gezeigt werden:
Eine erste Abfrage auf der Grundlage einer Tabelle – Projektion vs. Selektion
Wir gehen zu diesem Zweck in MS Access in die Registerkarte „Erstellen“ und wählen in dieser Umgebung „Abfrageentwurf“. Sodann öffnet sich ein Dialogfeld, in welchem wir die Elemente auswählen können, welche der Abfrage zugrunde gelegt werden sollen. Wir wollen uns mit unserer ersten Abfrage alle unsere Schüler mit ID, Name und Vorname anzeigen lassen und wählen daher die Tabelle „tbl_schüler“ aus:

Jetzt wählen wir durch Doppelklick auf die jeweiligen Attribute diejenigen Felder aus, welche wir angezeigt bekommen wollen:

Klicken wir jetzt im Reiter „Start“ auf „Ansicht“, können wir uns das Ergebnis unserer ersten Abfrage in der Datenansicht ansehen:

In der Abfrage haben wir uns alle Datensätze anzeigen lassen, diese jedoch mit nur drei Attributen (Spalten), welche wir ausgewählt haben. Diese Art der Abfrage nennt man Projektion.
In einer weiteren Abfrage wollen wir uns die Datensätze aller Schüler anzeigen lassen, welche den Vornamen Hans haben. Es sollen alle Attribute der Datensätze angezeigt werden.
In der Entwurfsansicht wählen wir wie folgt aus:

Das Ergebnis sieht folgendermaßen aus:

Die Abfragesprache SQL
Unsere ersten Abfragen haben wir in MS Access mit der darin enthaltenen graphischen Oberfläche zur Erstellung von Abfragen erstellt. Diese Oberfläche ist eine Besonderheit des Programms und wird „QBE“ (Query By Example) genannt.
Indem wir in die QBE unsere Eingaben gemacht haben, hat Access – quasi im Hintergrund – diese in eine für alle gängigen Datenbanken verständliche Syntax umgewandelt, welche als „SQL“ (Structured Query Language) bekannt ist.
Diese universell einsetzbare weil werkzeugunabhängige Abfragesprache wollen wir uns in den folgenden Kapiteln näher ansehen.
Rufen wir hierzu unsere erste Abfrage auf und wählen wir mit Hilfe des Pfeiles neben dem Symbol mit der Beschriftung „Ansicht“ die Option „SQL“ aus. Wir sehen folgenden Code (im Folgenden sind alle SQL-Codes kursiv dargestellt, um sie so leichter vom restlichen Text unterscheiden zu können):
SELECT tbl_schüler.schüler_id, tbl_schüler.name, tbl_schüler.vorname
FROM tbl_schüler;
Die Systematik ist schnell erkennbar: Der Anweisung SELECT folgen die anzuzeigenden Attribute in der Form Tabellenname.Attributsbezeichnung – jeweils getrennt durch ein Komma. Der Anweisung FROM folgt die Nennung des Fundortes der Attribute. Der Code endet mit einem Semikolon.
Im konkreten Fall könnte man die Nennung der jeweiligen Tabelle in der SELECT-Zeile auch weglassen und käme zum selben Ergebnis, da in der FROM-Zeile der Fundort ja eindeutig genannt ist.
Betrachten wir den SQL-Code unserer zweiten Abfrage:
SELECT tbl_schüler.schüler_id, tbl_schüler.name, tbl_schüler.vorname, tbl_schüler.straße, tbl_schüler.plz_nr, tbl_schüler.geburtsdatum, tbl_schüler.geschlecht_nr, tbl_schüler.klassen_nr
FROM tbl_schüler
WHERE (((tbl_schüler.vorname)=“Hans“));
Neben den beiden bereits kennen gelernten Anweisungen SELECT und FROM kommt nun noch WHERE hinzu. In dieser letzten Zeile steht das Kriterium – in unserem konkreten Fall ist das der Vorname „Hans“, welchem die anzuzeigenden Datensätze im Attribut Vorname entsprechen müssen, um angezeigt zu werden. Die anzuzeigenden Attribute finden wir wieder nach der SELECT-Anweisung. Auch am Eintrag hinter FROM hat sich gegenüber der ersten Abfrage nichts geändert. Anzumerken bleibt, dass die Klammern in der letzten Zeile weg gelassen werden können, ohne dass dadurch das Abfrageergebnis verändert wird.
Die Parameterabfrage als spezielle Form der Abfrage
Mit Hilfe einer sogenannten Parameterabfrage ist es möglich, nach dem Aufrufen der Abfrage, dem Benutzer ein Eingabefenster zur Verfügung zu stellen, in welches er z.B. den Vornamen der anzuzeigenden Schüler eingeben kann. Der SQL-Code sieht dann folgendermaßen aus, wobei unser Augenmerk auf der letzten Zeile liegt:
SELECT tbl_schüler.schüler_id, tbl_schüler.name, tbl_schüler.vorname, tbl_schüler.straße, tbl_schüler.plz_nr, tbl_schüler.geburtsdatum, tbl_schüler.geschlecht_nr, tbl_schüler.klassen_nr
FROM tbl_schüler
WHERE tbl_schüler.vorname=[Bitte geben Sie einen Vornamen ein];
Halten wir fest: Eine Selektion besteht grundsätzlich aus den drei Anweisungen SELECT, FROM sowie WHERE, während der Projektion die letzte Anweisung fehlt.
Fassen wir zusammen:
Abfragen sollen gezielt Teile der Information wiedergeben. Das Ergebnis einer solchen Operation ist eine neue Tabelle in Form einer Abfrage.
Der Aufbau der Ergebnistabelle wird durch zwei Grundverfahren festgelegt:
