Access 2010: Abfragen

Aus Augenbit

Abfragen

Abfragen erlauben es die in einer Datenbank gespeicherten Informationen auszuwerten und strukturiert auszugeben. Eine Abfrage ist eine Darstellungsform, eine spezielle Sicht auf Daten. Ein Filter ist die Sonderform einer Abfrage, bei der nur eine einzelne Tabelle ausgewertet wird. Im Unterschied zu Filtern beschränken sich Abfragen allerdings nicht auf eine einzelne Tabelle, sondern arbeiten mit mehreren miteinander in Beziehung stehenden Tabellen. Wer aber verstanden hat wie man Filter erstellt wird mit dem Erstellen von Abfragen ebenfalls keine Probleme haben.

Abfragen lassen sich wie Tabellen speichern und öffnen. Dargestellt werden sie wie Tabellen, man kann in ihnen sogar Daten verändern und löschen. Im Gegensatz zu echten Tabellen speichern Abfragen selbst aber keinerlei Daten. Die Daten, die sie darstellen, werden bei jedem Öffnen oder Ausführen einer Abfrage neu aus den in den Tabellen gespeicherten Daten erzeugt. Ändert man innerhalb einer Abfrage Werte, so werden diese Änderungen an die Tabellen aus der die Werte stammen weitergereicht und dort geändert. Lediglich eine Sonderform der Abfragen, die Tabellenerstellungsabfrage erzeugt aus den durch eine Abfrage zusammengestellten Daten eine eigenständige, neue Tabelle.

Innerhalb von Access kennen Abfragen drei grundlegende Darstellungsformen (fünf mit den hier nicht behandelten PIVOT-Ansichten).

  1. Die Entwurfsansicht erlaubt es Abfragen zu definieren.
  2. Die SQL-Ansicht erlaubt es eine Abfrage mit Hilfe der Datenbanksprache SQL in Textform zu definieren.
  3. Die Datenblattansicht zeigt das Ergebnis einer ausgeführten Abfrage in Tabellenform an.

Abfragen Datenblattansicht

Die Datenblattansicht stellt das Ergebnis einer Abfrage in Tabellenform dar. Die Navigation in dieser Abfragen-Tabelle unterscheidet sich nicht von der Navigation innerhalb einer Daten-Tabelle. Mit den Pfeiltasten navigiert man durch die Datensätze, kann über das Menü zusätzliche Filter aufrufen oder die Sortierung der Daten beeinflussen. Lesen Sie hierzu bitte das Kapitel Access 2010: Arbeiten in der Tabellen-Datenblattansicht

Abfragen Entwurfsansicht

Die Abfragen Entwurfsansicht erlaubt es komplexe Abfragen ohne direkte Eingabe von SQL-Code zu erstellen.

Die Abfragen-Entwurfsansicht kann auf verschiedene Wege aufgerufen werden:

aus dem Datenbankfenster:

  • Navigieren Sie auf eine bestehende Abfrage und drücken Sie die APPLIKATIONSTASTE. Wählen Sie ENTWURFSANSICHT (APPLIKATIONSTASTE,W)
  • Wählen Sie den Menüeintrag ERSTELLEN - ABFRAGEENTWURF (ALT,L,QW).

aus einer geöffneten Abfrage heraus:

  • Wählen Sie den Menüeintrag ANSICHT - ENTWURFSANSICHT (ALT,A,W)

Das von links nach rechts langezogene Fenster der Abfragen-Entwurfsansicht besteht aus zwei Bereichen zwischen denen Sie mit F6 wechseln können. Es ist das gleiche wie bei den Filtern. Im oberen Teil wird eine Übersicht der Tabellen angezeigt, auf welche die Abfrage angewendet werden solle. Jede Tabelle wird als sogenannte Feldliste angezeigt. Eine Feldliste zeigt die Spaltenüberschriften einer Tabelle in Listenform, also in vertikaler Ausrichtung, an. Um unteren Teil des Fensters befindet sich der Kriterienbereich. Er besteht aus einer Tabelle. Die Zeilen der Tabelle sind wie folgt beschriftet.

  1. FELD:
  2. TABELLE:
  3. SORTIERUNG:
  4. ANZEIGEN:
  5. KRITERIEN:
  6. ODER:

Die Spalten haben keine Beschriftung.

Abfragen SQL-Ansicht

Die SQL-Ansicht besteht aus einem einfachen Textfeld, in welches man SQL-Code direkt eingeben kann. Zum Ausführen der Abfragen benutzen Sie die gleichen Menüeinträge wie bei der Entwurfsansicht.

Abfrage öffnen / ausführen

Um eine Abfrage zu öffnen und damit auch auszuführen navigieren Sie im Datenbankfenster auf die gewünschte Abfrage und drücken Sie EINGABE.

Abfrage erstellen

Abfragen werden in der Abfragen-Entwurfsansicht erstellt oder bearbeitet.

Für eine neue Abfrage wählen Sie den Menüeintrag ERSTELLEN - ABFRAGEENTWURF (ALT,L,QW). Über die Entwurfsansich legt sich dann automatisch das Dialogfenster TABELLE ANZEIGEN

Tabellen für die Abfrage auswählen

  1. Im Dialogfenster TABELLE ANZEIGEN gibt es drei Registerkarten (TABELLEN, ABFRAGEN, BEIDE) und zwei Schalter (HINZUFÜGEN, SCHLIESSEN), sowie ein Listenfeld. Die Registerkarten erlauben es auszuwählen, ob im Listenfeld nur Tabellen, nur Abfragen, oder eben beides angezeigt werden soll.
  2. Mit AB und AUF navigiert man durch das Listenfeld und sucht eine die Tabellen aus, die man für die Abfrage benötigt.
  3. Mit TAB springt man auf den Schalter HINZUFÜGEN. Ohne weitere Rückmeldung wird dadurch die eben selektierte Tabelle in das Abfragenerstellungsfenster übernommen.
  4. MIT UMSCHALT+TAB springt man zurück in das Listenfeld und sucht mit AB und AUF die nächste Tabelle, die man wieder über den Schalter HINZUFÜGEN in das Abfragenerstellungsfenster übernehmen kann.
  5. Hat man alle Tabellen, die man zum Erstellen der Abfrage benötigt in das Abfragenerstellungsfenster übernommen, schließt man das TABELLE ANZEIGEN Dialogfenster über den Schalter SCHLIESSEN.
Tabellen für eine Abfrage nachträglich hinzufügen

Sollten Sie feststellen, dass Sie benötigte Tabellen bei diesem ersten Schritt vergessen haben, können Sie die Tabellenauswahl jederzeit wieder über das Menü ENTWURF - TABELLE ANZEIGEN (ALT,JQ,ST) aufrufen.

Tabellen aus einer Abfrage entfernen

Sollten Sie eine oder mehrere Tabellen zu viel zu einer Abfrage hinzugefügt haben, so können Sie diese leicht wieder entfernen. Navigieren Sie innerhalb der Abfragen-Entwurfsansicht mit TAB auf die Tabelle, die Sie entfernen möchten und drücken Sie anschließend ENTF. Wenn Sie sich nicht sicher sind in welcher Tabelle sich der Cursor gerade befindet, drücken Sie AB oder AUF um auf einen anderen Eintrag innerhalb des Tabellenfensters zu gelangen. Jaws sagt nach dem Listeneintrag den Namen der Tabelle an.

Art der Abfrage wählen

Access kennt sechs verschiedene Abfragetypen, die Sie über das Menü ENTWURF (ALT,JQ) der Abfragen-Entwurfsansicht wählen können:

  1. Auswählen (ALT,JQ,E) - Die Auswahlabfrage sammelt Daten nach gesetzten Kriterien und stellt diese dar. Einfache Rechenoperationen, zum Beispiel das Erstellen von Summen sind möglich.
  2. Tabelle erstellen (ALT,JQ,B) - Die Tabellenerstellungsabfrage arbeitet wie die Auswahlabfrage, speichert ihre Ergebnisse aber in einer neuen, echten Tabelle.
  3. Anfügen (ALT,JQ,A) - Die Anfügeabfrage arbeitet wie die Auswahlabfrage, hängt ihre Ergebnisse aber an eine bereits bestehende Tabelle mit identischem Aufbau an.
  4. Aktualisieren (ALT,JQ,N) - Die Aktualisierungsabfrage tauscht Werte in bestehenden Tabellen gegen neue aus.
  5. Kreuztabellen (ALT,JQ,R) - Die Kreuztabellenabfrage erlaubt es Daten zu sammeln, zu analysieren und sie sehr kompakt wiederzugeben.
  6. Löschen (ALT,JQ,C) - Die Löschabfrage löscht nach gesetzten Kriterien Datensätze aus bestehenden Tabellen

Beim Abfragetyp Tabellenerstellungsabfrage öffnet sich das Dialogfeld NEUE TABELLE ERSTELLEN. Der Cursor befindet sich in einem kombinierten Eingabefeld. Geben Sie hier den Namen der neu zu erstellenden Tabelle ein und bestätigen Sie anschließend mit EINGABE.

Beim Abfragetyp Aktualisierungsabfrage öffnet sich das Dialogfeld ANFÜGEN. Der Cursor befindet sich in einem kombinierten Eingabefeld, welches Sie mit ALT+AB öffnen können. Navigieren Sie mit AB und AUF zu der Datentabelle Ihrer Datenbank an welche das Ergebnis der Abfrage angefügt werden soll. Bestätigen Sie mit EINGABE. Bitte beachten Sie, dass die Struktur der hier gewählten Tabelle exakt mit der Ausgabe Ihrer Abfrage übereinstimmen muss. Um dies zu testen empfiehlt es sich die Abfrage zunächst als Auswahlabfrage zu definieren, ihre Ausgabe zu testen und dann später den Abfragetyp nachträglich zu ändern.

definieren der Abfrageparameter

  1. Wechseln Sie nach der Wahl der Tabellen und der Abfragenart mit F6 in den Kriterienbereich. Dieser besteht wie bereits erwähnt aus einer mehrspaltigen Tabelle. Die Spalten dieser Tabelle werden beim Ausführen der Abfrage in Reihenfolge nacheinander abgearbeitet. In jeder Spalte setzen Sie die Abfrageparameter für ein Datenfeld aus einer in der Datenbank gespeicherten Datentabelle.
  2. Navigieren Sie mit den Pfeiltasten in ein freies Feld in die zweiter Zeile der ersten Spalte (Zeile TABELLE). Jaws sagt ein Eingabefeld an.
  3. Mit ALT+AB öffnen Sie die Ausklappliste des Feldes. In ihr befinden sich alle in der Abfrage angezeigten Tabellennamen. Wählen Sie mit AB und AUF eine Datentabelle aus, und schließen Sie Ihre Auswahl mit ESC ab (Drücken Sie NICHT EINGABE, da der Cursor ansonsten zur nächsten Spalte springt).
  4. Navigieren Sie mit AUF in die erste Zeile (Zeile FELD) der ersten Spalte.
  5. Mit ALT+AB öffnen Sie die Ausklappliste des Feldes. In ihr befinden sich alle Feldnamen (Spaltenüberschriften) der Datentabelle die Sie im vorigen Schritt gewählt haben. Mit AB und AUF navigieren Sie zu dem Feldnamen (Spaltenüberschrift) der in Ihrer Abfrage erscheinen soll, drücken ESC und danach AB (!!! nicht EINGABE!!!).
    • Kennen Sie den Namen des Feldnamens (Spaltenüberschrift) auswendig, können Sie ihn ALTERNATIV auch ohne die Ausklappliste einfach direkt in das Eingabefeld eingeben. Access unterstützt Sie bei der Eingabe, indem es versucht an Hand der bereits getippten Buchstaben zu erkennen welcher Feldname (Spaltenüberschrift) gewünscht ist und diese automatisch ergänzt. Übernommen wird der Eintrag durch Drücken von AB. (!!! erneut nicht EINGABE)
  6. Navigieren Sie mit AB in die dritte Zeile (Zeile SORTIERUNG) der ersten Spalte. Hier gibt es verschiedene Möglichkeiten:
    • Soll keine Sortierung vorgenommen werden lassen Sie das Feld frei und gehen mit AB in die nächste Zeile.
    • Wünschen Sie eine Sortierung, so legen Sie deren Art durch Öffnen der Ausklappliste mit ALT+AB fest. Zur Wahl stehen AUFSTEIGEND, ABSTEIGEND und KEINE SORTIERUNG. Drücken Sie anschließen ESC und dann AB. Selbstverständlich können Sie die Art der Sortierung auch wieder durch direkte Eingabe in das Eingabefeld durch Ausschreiben des entsprechenden Begriffes festlegen. Access unterstützt sie auch hierbei. Beenden Sie ihre Eingabe in diesem Fall mit AB.
  7. Der Cursor steht nun in der vierten Zeile (Zeile ANZEIGEN) der ersten Spalte. Diese enthält einen Auswahlschalter, der standardmäßig aktiviert ist. Der Auswahlschalter entscheidet darüber, ob das in dieser Spalte definierte Feld nach dem Ausführen der Abfrage sichtbar sein soll oder nicht. Ist der Auswahlschalter aktiviert wird das Feld in der Abfrage angezeigt. Soll das Feld nur als Filterkriterium dienen, aber später nicht in der Abfrage erscheinen, so deaktiviert man die Auswahl mit LEERTASTE.
  8. Navigieren Sie mit AB in die fünfte Zeile (Zeile KRITERIEN) der ersten Spalte. Formulieren Sie hier Ihre Abfragekriterien mit Hilfe von Operatoren und Platzhaltern (Siehe auch: Access: Operatoren, Platzhalter und Bedingungsausdrücke). Gehen Sie nach Ihrer Eingabe mit AB in die nächste Zeile.
  9. Sie befinden sich in der sechsten Zeile (Zeile ODER). Hier können Sie mit Operatoren und Platzhaltern ein zweites Abfragekriterium angeben, nach dem innerhalb des gewählten Feldnamen (Spaltenüberschrift) gesucht werden soll.
  10. Sie haben nun zwei Möglichkeiten.
    • Sie navigieren in die nächste Spalte um weitere Felder entsprechend den eben genannten Schritten zur Abfrage hinzuzufügen und wiederholen diesen Vorgang bis Ihre Abfrage alle von Ihnen gewünschten Felder enthält.
    • Sie führen die Abfrage aus indem Sie den Menüeintrag ENTWURF - AUSFÜHREN (ALT,JQ,Ü) wählen.


Abfragen mit dem SQL Editor

Access ist so programmiert, dass alle Abfragen in einem Dialogfeld eingegeben werden können. Die Dialogfelder setzen nämlich nichts anderes als eine SQL Syntax (Structured Query Language) zusammen. Im Abschnitt SQL-Ansicht wurde bereits darauf hingewiesen. In diesem Abschnitt soll nun genauer auf die Möglichkeit eingegangen werden, ganze Abfragen im SQL-Syntax zu schreiben. Vorteilhaft ist dabei die gute Übersicht für Braillenutzer. Außerdem können durch diese Methode kompliziertere Abfragen erstellt werden. Die Arbeit setzt allerdings voraus, dass man sich in SQL als Abfragesprache einarbeitet. SQL hat sich mittlerweile als Standard für relationale Datenbanken durchgesetzt; und so ist es auch nicht verwunderlich, dass Access im Kern mit SQL arbeitet. Für den Entwickler und Nutzer erleichtert dies die Arbeit mit Datenbanken, da für verschiedene Systemumgebungen nicht verschiedene Sprachen gelernt werden müssen. Anwender, die bereits Erfahrungen mit SQL haben, werden feststellen, dass sich die Microsoft-SQL in der Syntaxstrukur geringfügig unterscheidet. Der Umstieg sollte aber nicht schwer fallen.

Allgemeiner Hinweis zur Methode

Um eine Abfrage im SQL Editor ( auch SQL-Ansicht genannt) einfügen bzw. bearbeiten zu können, muss man zuerst eine Abfrage in der bekannten Weise in der Entwurfansicht erstellen.

Ein Beispiel anhand der „CD_Verwaltung.mbd" soll das Vorgehen verdeutlichen. Es soll eine Abfrage über die Tabelle "Tabelle_Nutzer" erstellt werden, die nur Name, Vorname und ICQ Nummer beinhaltet.

Erster Schritt: Leere Abfrage erstellen

  1. Im ersten Schritte wird mittels der Entwurfansicht eine Abfrage über die Tabelle erstellt.
  2. Es genügt an dieser Stelle, nur den Punkt „Erstellen einer neuen Abfrage in der Entwurfsansicht" auszuführen und im Dialogfenster „Tabelle anzeigen" die "Tabelle_Nutzer" zu wählen und in der Abfrage HINZFÜGEN zu betätigen. Anschließend wird das Dialogfenster mit dem SCHLIEßEN Schalter oder der ESC Taste geschlossen.
  3. Nun hat man eine „leere" Abfrage, die noch keine Anweisungen enthält, welche Datenfelder aus der „Tabelle_Nutzer" zu lesen sind.

Zweiter Schritt: leere Abfrage in der SQL-ANSICHT öffnen

  1. Im nächsten Schritt kann man die SQL-ANSICHT über ENTWURF / ANSICHT / SQL-ANSICHT öffnen (ALT, JQ, 5, Q).
  2. In der SQL-Ansicht ist Folgendes zu lesen: SELECT … FROM Tabelle_Nutzer;

Dritter Schritt: SQL-ABFRAGE erstellen und ausführen

Access hat bis hier nur festgelegt, welche Tabelle abgefragt werden soll. Alles andere wird nun in den Editor der SQL-Abfrage eingetragen. Nun wird die SQL-Syntax ergänzt, die wie folgt lautet:

SELECT * FROM Tabelle_Nutzer;

Nun wird die Abfrage mit der Tastenkombination STRG+S gespeichert. Das sich öffnende Dialogfeld „Speichern unter" verlangt nach einem Abfragenamen. Standardmäßig ist in das Formularfeld „Abfrage 1" eingetragen. In unserem Beispiel nennen wir diese „Abfrage_ICQ_Nummern".

Hinweis: Um die Übersicht zu verbessern, sollte man sich bei der Bezeichnung in Access angewöhnen, immer den Qbjekttyp mit anzugeben, z.B. bei Abfragen „Abfrage_xxx" bei Tabellen „Tabelle_yyy" usw. Dies vereinfacht das Wiederfinden und verhindert, dass Objekte falsch behandelt werden. In Berichten kann man z.B. keine Daten eintragen. Gerade beim Braillenutzer können solche Verwechslungen leicht vorkommen, da die Objekttypen nur per Symbol zu unterscheiden sind.

Nach dem die Abfrage benannt und gespeichert wurde, kann man sich das Ergebnis seiner ersten Abfrage anschauen:

  • Der einfachste Weg ist über ENTURF und ANSICHT in die DATENBLATTANSICHT zu wechseln.
  • Es ist aber durchaus auch interessant, in den Navigationsbereich zu wechseln und unter Abfragen nachzuschauen. Dort befindet sich nun die neue Abfrage „Abfrage_ICQ_Nummer".

Hat man nun die Abfrage geöffnet und betrachtet sich die Felder der Datensätze, erkennt man, dass es sich um das Abbild der Tabelle_Nutzer handelt. Alle Datensätze werden eins zu ein dort aufgeführt.

Um dem Wunsch zu folgen, nur den Vornamen, Namen und die ICQ-Nummer anzuzeigen, wird die SQL-Syntax wie folgt geändert (hierfür wechselt man wieder in die SQL-Ansicht):

SELECT Vorname, Nachname, [ICQ Nummer] 
FROM Tabelle_Nutzer;

Was hat sich nun geändert?

Das Sternchen aus der ersten Anweisung wurde gegen die gewünschten Feldnamen getauscht. Sternchen (*) wird als Platzhalter für alle Datenfelder benutzt.

In diesem Beispiel stecken schon eine ganze Menge Tücken. So muss man genau darauf achten, dass Lücken nach den Kommata stehen müssen und dass „ICQ Nummer" in eckige Klammern gesetzt werden muss. Auch müssen die Feldnamen exakt aus der Tabelle übernommen werden. Fehler in der Groß- und Kleinschreibung oder Lücken sind nicht zulässig.

Das Feld „ICQ Nummer" ist ein gutes Beispiel dafür, wie man ein Datenfeld nicht benennen sollte.

Das Leerzeichen zwischen ICQ und Nummer führt leicht zu Fehlern. Deshalb gilt der Grundsatz, Datenfelder immer ohne Lücke anzulegen oder diese mit Unterstrich (_) zu füllen.

Hätte der Autor in diesem Beispiel diesen Grundsatz befolgt, könnte er auf die eckigen Klammern in der Syntax verzichten. Die eckigen Klammern binden hier die beiden Wörtchen ICQ und Nummer zu einem Ausdruck zusammen. Lässt man sie trotzdem weg, werden die beiden Wörter als zwei Befehle interpretiert, was dann zu einem Fehler führt.

Zum Abschließen der Syntax ist noch das Semikolon nötig, welches auch nicht vergessen werden darf.

Fassen wir noch einmal zusammen: In diesem Beispiel wurde mit dem SELECT Befehl eine Abfrage über die Felder „Name, Vorname und ICQ Nummer" aus der Tabelle Tabelle_Nutzer gefertigt.

Beispieldatei CD_Verwaltung.accdb

Aufbau der SQL-Syntax

SQL Befehle können zum Abfragen, Anlegen, Ändern und Löschen von Datenbanken, Tabellenstrukturen und Tabelleninhalten verwendet werden. Im diesem Abschnitt wird systematisch auf die Syntax zum Abfragen von Tabellenstrukturen eingegangen.

Prinzipiell ist eine SQL Abfrage immer nach dem gleichen Schema aufgebaut:

SELECT Spalten FROM Tabellen;

Bei den in Großbuchstaben geschriebenen Wörtern handelt es sich um die Befehle. Das normal geschriebene "Spalten" bedeutet, dass an diese Stelle die Namen der Spalten eingetragen werden. Tabellen bedeutet, dass an diese Stelle der Name der Tabelle steht. Es sind im übrigen auch mehrere Tabellen möglich, das bedeutet dann einen Abfrage über mehrere Tabellen. Später dazu mehr.

SELECT Abfrage

  • SELECT bedeutet wählen oder abfragen.
  • FROM steht für die Herkunft, also in welcher Tabelle abgefragt werden soll.

Beginnen wir nun eine Abfrage über die Tabelle „Tabelle_Medium" zu erstellen. Die SQL Syntax lautet dann:

SELECT * FROM Tabelle_Medium;

Als Ergebnis dieser Abfrage erhält man den gesamten Inhalt der Tabelle_Medium.

Das * (Sternchen) steht hier als Platzhalter für alle Datenfelder. Man könnte auch alle Datenfelder aufführen. Das würde dann so aussehen:

SELECT id_Medium, Titel, Interpret_Autor, Medium 
FROM Tabelle_Medium;
  • Die einzelnen Datenfelder werden durch ein Komma getrennt, nach dem Komma muss ein Leerzeichen sein.
  • Alle Feldnamen müssen exakt so geschrieben werden, wie sie in der Tabelle vorkommen. Die Groß- und Kleinschreibung darf nicht vernachlässigt werden.
  • Für die bessere Lesbarkeit sollte man sich angewöhnen, die Befehle (hier SELECT und FROM) groß zu schreiben.
  • Am Ende der SQL-Anweisung darf das SEMIKOLON nicht vergessen werden!

Oft möchte man nur einen Teil der Datenfelder als Auswahl haben. Hierfür zählt man nur die gewünschten Feldnamen auf. Für die Felder Titel und Medium sieht das dann so aus:

SELECT Titel, Medium FROM Tabelle_Medium;

Als Ergebnis der Abfrage erhält man eine Tabelle mit zwei Spalten:

Titel Medium
Harry Potter Buch
Harry Potter DVD
Die unendliche Geschichte Buch
Herr der Ringe DVD
Karlsson vom Dach Buch

Wird nun der Inhalt der Tabelle durch ein neues Buch ergänzt, erweitert sich die Abfrage beim nächsten Aufrufen um diese Tabelle. Der Vorteil liegt auf der Hand: Tabellenauszüge sind durch die Möglichkeit der Abfrage immer aktuell.

Beispieldatei CD_Verwaltung.accdb

WHERE Bedingung

WHERE Bedingungen dienen dazu, Abfragen weiter einschränken. In unserem Beispiel soll die Abfrage so einschränkt werden, dass alle DVD´s der Sammlung angezeigt werden. Dies lässt sich sehr leicht durch Anhängen des WHERE Befehls erledigen. Die WHERE Abfrage entspricht einem FILTER, wie im Kapitel Access: Filter beschrieben.

SELECT Titel, Medium 
FROM Tabelle_Medium WHERE Medium="DVD";

Das Ergebnis sieht dann so aus:

Titel Medium
Harry Potter DVD
Herr der Ringe DVD

(Siehe auch in der Datenbank: Abfrage_Meine Sammlung)

  • Die WHERE Bedingung wird immer hinter den FROM Befehl gestellt.
  • Anschließend folgt das Datenfeld, in dem nach bestimmten Kriterien (hier DVD) gesucht werden soll.
  • Das Gleichheitszeichen macht eine direkte Zuweisung zum folgenden Ausdruck.
  • Der Ausdruck wird dann entsprechend in Anführungszeichen "DVD" gesetzt. Die Anführungszeichen dürfen entfallen, wenn nach Zahlen gefiltert wird.

Beispieldatei CD_Verwaltung.accdb


Operatoren, Platzhalter und Bedingungsausdrücke

Man kann anstatt des Gleichheitszeichens (=) auch LIKE benutzen. Dieser Zuweisungsbefehl ist immer dann vorzuziehen, wenn man nach Teilbegriffen im Datenfeld suchen will. In unserem Beispiel ist dies sehr sinnvoll, wenn man z.B. alle Titel mit dem Inhalt Fantasie abfragen möchte. Da aber im Feld Inhalt die englische und deutsche Schreibweise (Fantasy, Fantasie) benutzt wurde, möchte man nun beide erfassen, trotz unterschiedlicher Schreibweise. Hier bietet sich die LIKE Methode an, um nur nach dem gleichen Wortbestandteil „Fanta" zu suchen. Hinter „Fanta" folgt nun noch der Platzhalter *. Dies bedeutet, dass das Wort mit „Fanta" beginnt und beliebig enden darf.

SELECT Titel, Medium, Inhalt 
FROM Tabelle_Medium 
WHERE Inhalt LIKE "Fanta*";
  • Der Platzhalter darf auch am Anfang der Buchstabenfolge stehen.
  • Mit diese Methode lassen sich auch sehr gut alle Namen die mit B beginnen heraussuchen (LIKE „B*" usw.
  • Mit > größer < kleiner lassen sich genauso leicht Abfragen erstellen. "PLZ>68549" bedeutet, dass alle mit der PLZ größer als 68549 herausgesucht werden.

Im Kapitel Access 2010: Operatoren, Platzhalter und Bedingungsausdrücke sind die Bedingungen bereits ausführlich erklärt worden. Diese gelten in der SQL Syntax genauso. Wer diese nicht mehr parat hat, dem sei das Kapitel noch einmal ans Herz gelegt.


Beispieldatei CD_Verwaltung.accdb


Sortieren mit ORDER BY

Es ist auch möglich nach verschiedenen Bedingungen zu sortieren. In unserem Beispiel sollen die Titel nach dem Alphabet sortiert werden. Der Sortierbefehl lautet: ORDER BY, die entsprechende Syntax sieht dann so aus:

SELECT Titel, Medium, Inhalt 
FROM Tabelle_Medium 
ORDER BY Titel;

Natürlich gibt es auch die Möglichkeit, die Sortierrichtung anzugeben.

  • ASC (ascending) steht für aufsteigend,
  • DESC (descending) steht für absteigend.

Die Bestimmung der Sortierrichtung wird einfach hinter das zu sortierende Datenfeld geschrieben.

SELECT Titel, Medium, Inhalt 
FROM Tabelle_Medium 
ORDER BY Titel ASC;

oder

SELECT Titel, Medium, Inhalt 
FROM Tabelle_Medium ORDER BY Titel DESC;

Gibt man weder ASC noch DESC an, wird standardmäßig absteigend (also ASC) sortiert.

Generell gilt für die Sortierung, dass man mehrere Sortieroptionen angeben kann. Man kann zuerst nach dem Titel und danach nach dem Inhalt sortieren, usw.

SELECT Titel, Medium, Inhalt 
FROM Tabelle_Medium 
ORDER BY Titel DESC, 
Inhalt ASC;

Dabei ist zu beachten, bei der Abtrennung der Datenfelder das Komma nicht zu vergessen.


Beispieldatei CD_Verwaltung.accdb


Gruppieren und Sortieren verbinden

Der einfache Aufbau der SQL-Syntax erlaubt Bedingungen und Sortieren einfach zu verbinden.

Man kann also mit WHERE eine Auswahl treffen und mit ORDER BY die Ergebnisse sortieren.

SELECT Titel, Medium 
FROM Tabelle_Medium WHERE Medium="DVD" 
ORDER BY Titel DESC;

Das Ergebnis sieht dann so aus:

Titel Medium
Momo DVD
Herr der Ringe DVD
Harry Potter DVD

Beim Aufstellen der Syntax muss man nur auf die Reihenfolge der Befehle achten. ODER BY kann niemals vor der WHERE Klausel kommen.


Beispieldatei CD_Verwaltung.accdb


Gruppieren - GROUP BY

Man kann Datensätze nach einen oder mehreren Kriterien zusammenfassen. Dies kann man auch als Gruppieren bezeichnen. Alle DVD´s, alle Bücher, alle CD´s werden zusammengefasst dargestellt.

Das Gruppieren ermöglicht nun im Gegensatz zum Sortieren, dass man die Gruppen mit Aggregatsfunktionen verknüpfen kann. Aggregatsfunktionen dienen eigentlich dazu, dass man die Anzahl von Minimalwerten oder Maximalwerten einer Spalte ermittelt.

In unserem Beispiel soll ermittelt werden, wie viele Medien jeden Typs in der Datenbank gespeichert sind. Die SQL Klausel für das Gruppieren lautet: GROUP BY.

Zunächst sollen erst einmal alle Gruppen erfasst werden.

SELECT Medium FROM Tabelle_Medium GROUP BY Medium;
Medium
Buch
DVD


Beispieldatei CD_Verwaltung.accdb


COUNT ... GROUP BY

Das Abfrageergebnis sagt aus, dass es in der Tabelle nur DVD´s und Bücher gibt.

Nun wird die GROUP BY Klausel mit einer Aggregatsfunktion verknüpft. Mit dieser kann man die Anzahl der DVD´s und die der Bücher ermitteln.

SELECT Medium, COUNT(Medium) AS  Anzahl  FROM Tabelle_Medium GROUP BY Medium;

Die Syntax wird um "COUNT(Medium) AS Anzahl" erweitert. Die Aggregatsfunktion sagt aus, dass alle gleichen Medien gezählt werden und das Ergebnis in einer neuen Spalte mit dem Namen Anzahl angezeigt werden soll.

Die Klausel AS weist der Abfrage eine neue Spalte mit einem neuen Namen zu.

Medium Anzahl
Buch 3
DVD 3


Beispieldatei CD_Verwaltung.accdb


COUNT ... MIN / MAX

Die gleiche Abfragestruktur lässt sich auch mit MIN oder MAX erstellen.

Hat man seine Datenbank so erweitert, dass in der Tabelle_Medium auch der Preis aufgeführt wird, so kann man sich mit MAX den teuersten Titel einer Gruppe heraussuchen lassen.

SELECT Medium, MAX(Preis) AS [teuerstes Medium] 
FROM Tabelle_Medium 
GROUP BY Medium;

Beispieldatei CD_Verwaltung.accdb


AS (Namen zuweisen)

Mit der AS Klausel kann man einem Spaltennamen leicht einen beliebigen anderen Namen zuweisen.

In Datenbanken kommt es oft vor, dass die Feldnamen der Spalten einen kryptischen Kurznamen bekommen. Z.B. VorK diese Abkürzung steht für Vorname Kunde. Möchte man eine lesbare Abfrage der Tabelle haben, empfiehlt es sich, die Tabelle mit einem lesbaren Spaltennamen zu versehen. Dazu benutzt man die AS Klausel. Ein Beispiel verdeutlicht dies:

SELECT VorK AS [Vorname Kunde] 
FROM tabelle_kunde;
Medium teuerstes Medium
Buch 33
DVD 36

(Siehe auch in der Datenbank: Abfrage_Teuerste Bücher einer Gruppe)

Genauso kann man für das billigste Medium jeder Gruppe vorgehen.

Die GROUP BY Klausel ist, eine wichtige und starke Funktion für Abfragen von Datenbanken.

Beispieldatei CD_Verwaltung.accdb


Berechnungen mit Abfragen ausführen

Es ist ein Leichtes, in Abfragen Berechnungen durchzuführen und als eigenständige Spalte darzustellen. In unserem Beispiel wollen wir die Preise der Bücher und DVD´s auch ohne MWSt anzeigen.

Zunächst erstellen wir eine Abfrage über Titel, Interpret_Autor, Medium und Preis.

SELECT Titel, Interpret_Autor, Medium, Preis 
FROM Tabelle_Medium;

Diese Abfrage ergänzen wir um die Berechnung des Preises ohne die in Deutschland üblichen 19% MWSt. Der Preis ohne MWSt berechet sich: Preis_ohne =PREIS *0,81

Zusammengesetzt sieht das dann so aus:

SELECT Titel, Interpret_Autor, Medium ,Preis, Preis*0.81 AS Preis_ohne_MWST 
FROM Tabelle_Medium;

Achtung! Bei der Eingabe der Kommazahl muss man unbedingt darauf achten, dass ein Punkt zur Abtrennung der Dezimalen verwendet wird. Access verwendet die amerikanische Dezimaltrennung!

Ergebnis:

Titel Interpret_Autor Medium Preis Preis_ohne_MWST
Harry Potter Rowling Buch 27 21,87
Harry Potter Rowling DVD 19 15,39
Die unendliche Geschichte Michael Ende Buch 33 26,73
Herr der Ringe J.R.R. Tolkien DVD 36 29,16
Karlsson vom Dach Astrid Lindgren Buch 12 9,72
Momo Michael Ende DVD 18 14,58

(Siehe auch in der Datenbank_ Abfrage_Preise mit und ohne MWSt)

Beispieldatei CD_Verwaltung.accdb


SELECT DISTINCT - Doppelte Datensätze vermeiden

In der Praxis kommt es immer mal wieder vor, dass Datensätze doppelt eingegeben werden. Diese lässt sich leicht durch SELECT DISTINCT vermeiden.

In unserem Beispiel ist das Buch Harry Potter zweimal eingegeben. SELECT DISTINCT schafft Abhilfe und zeigt es in der Abfrage nur noch einmal an:

SELECT DISTINCT Titel, Interpret_Autor, Medium 
FROM Tabelle_Medium;

(Siehe auch in der Datenbank_ Abfrage_Medium mit DISTINCT)

Beispieldatei CD_Verwaltung.accdb


Verknüpfungen mehrer Tabellen mit INNER JOIN, LEFT JOIN und RIGHT JOIN

Möchte man Inhalte aus mehreren Tabellen abfragen, kann man die Tabellen verknüpfen, also in Beziehung zueinander setzen.

Im Kapitel Beziehungen wurden die Grundlagen bereits beschrieben und sollten entsprechend dort nachgelesen werden.

Beim Erstellen von Beziehungen in Access Datenbanken kann es von Vorteil sein, die entsprechende SQL-Syntax zu kennen. So kann man schnell Fehler erkennen oder aufwendigere Abfragen erstellen, die nicht über die Entwurfansicht möglich sind.

Die entsprechenden Befehle für eine ...

  • Eins-zu-eins-Beziehung lautet: INNER JOIN
  • Eins-zu-viele-Beziehung lautet: LEFT JOIN
  • Viele-zu-eins-Beziehung lautet: RIGHT JOIN
  • Viele-zu-viele-Beziehung lautet: OUTER JOIN

In unserer Beispieldatenbank sollen für jeden Nutzer die ausgeliehenen Medien (Bücher, DVD, etc.) abgefragt werden.

Dazu müssen die Tabellen Nutzer, Medien und Ausleihe verknüpft werden. Eine Tabellenverknüpfung muss immer über einen Schlüssel erfolgen, der in beiden Tabellen enthalten ist. Zudem muss er eindeutig sein. Hierfür bieten sich ID´s, Personalnummern oder eindeutige Namen an. In unserem Beispiel bietet sich die id_Ausleihe und die id_Titel an. Beide sind in der Tabelle Ausleihe verzeichnet. Genau genommen werden an die Tabelle Ausleihe zwei Tabellen angeknüpft. Die Tabelle Nutzer und die Tabelle Medium.

Da ein Nutzer mehrere Titel ausleihen kann, muss man sich bei der Verknüpfung einer "Eins-zu-viele-Beziehung", also einer LEFT JOIN Beziehung, bedienen.

Damit es gleich zu Anfang nicht so komplex wird, soll zuerst einmal die Tabelle Ausleihe mit der Tabelle Titel verknüpft werden. Als Ergebnis erhält man dann eine Abfrage (Liste), in der verzeichnet ist, wann welches Buch ausgeliehen wurde.

Beispieldatei CD_Verwaltung.accdb


LEFT JOIN

Zwischen der Tabelle Ausleihe und der Tabelle Titel gibt es eine "Ein-zu-viele-Beziehung", da es zu jedem Ausleihdatum ein Buch gibt, aber nicht alle Titel zwangsläufig ausgeliehen sein müssen.

Die SQL Abfrage lautet:

SELECT Tabelle_Medium.Titel, Tabelle_Medium.Interpret_Autor, [Tabelle_Ausleihe.ausgeliehen am]
FROM Tabelle_Ausleihe LEFT JOIN Tabelle_Medium 
ON Tabelle_Ausleihe.id_Titel = Tabelle_Medium.id_medium;

Analisiert man die Abfrage, so lässt sich folgende Grundstruktur ausmachen:

SELECT (Tabellentitel) 
FROM (linke Tabelle) LEFT JOIN (rechte Tabelle) 
ON (linke Tabellenverknüpfung) = (rechte Tabellenverknüpfung)

Neu in dieser Abfrage ist, dass sich die Titelnamen auf verschiedene Tabellen beziehen. Deshalb muss man nun die Tabellennamen mit Punkt (.) abgetrennt vor den Titelnamen setzen:

Tabellennamen.Titelnamen

z.B. Tabelle_Ausleihe.id_Titel

In dieser Abfrage hat sich noch ein kleiner Stolperstein eingeschlichen. Im Titel "ausgeliehen am" befindet sich ein Leerzeichen. Titel mit Leerzeichen müssen in eckige Klammern gesetzt werden, da sonst Access mit dem Leerzeichen das Ende des Titelnamens annimmt. Richtig muss es folgendermaßen aussehen:

[Tabelle_Ausleihe.ausgeliehen am]

Zur Erinnerung: Gute Datenbanken vermeiden Lücken in Titel. Daher hat es sich eingebürgert, dass man Lücken mit den Unterstrich (_) ausfüllt.


Beispieldatei CD_Verwaltung.accdb


Abfragen über mehrere Tabellen

Abfragen über mehrere Tabellen muss man genau planen, dann ist das Aufstellen der SQL-Anweisung nur noch Fleißarbeit.

Die Tabelle_Ausleihe hat Beziehungen zu beiden anderen Tabellen über die id_Medium und die id_Nutzer. Um die Bindung zu beiden anderen Tabellen herstellen zu können, muss die Tabelle_Ausleihe in der SQL-Anweisung zwischen den beiden anderen Tabellen stehen.

Das bedeutet, dass die oben benutze Anweisung umgeschrieben werden muss. Die Tabellen werden in der Reihenfolge getauscht, demnach wird auch LEFT JOIN in RIGHT JOIN getauscht.

SELECT Tabelle_Medium.Titel, Tabelle_Medium.Interpret_Autor, [Tabelle_Ausleihe.ausgeliehen am]
FROM Tabelle_Medium RIGHT JOIN Tabelle_Ausleihe 
ON Tabelle_Ausleihe.id_Titel = Tabelle_Medium.id_medium;

Im Ergebnis ändert sich zunächst nichts.

Die zweite Bindung lautet:

Tabelle_Ausleihe LEFT JOIN Tabelle_Nutzer ON Tabelle_Ausleihe.id_Nutzer=Tabelle_Nutzer.id_Nutzer

Diese wird in Klammern gesetzt und ersetzt die Bindung "Tabelle_Ausleihe".

SELECT Tabelle_Medium.Titel, Tabelle_Medium.Interpret_Autor, [Tabelle_Ausleihe.ausgeliehen am]
FROM Tabelle_Medium RIGHT JOIN (Tabelle_Ausleihe 
LEFT JOIN Tabelle_Nutzer 
ON Tabelle_Ausleihe.id_Nutzer=Tabelle_Nutzer.id_Nutzer) 
ON Tabelle_Ausleihe.id_Titel = Tabelle_Medium.id_medium;

Nun ist die Bindung zwischen den drei Tabellen fertig. Nach der SELECT Anweisung wird noch der Name des Ausleihers eingetragen (Tabelle_Nutzer.Vorname, Tabelle_Nutzer.Name).

SELECT Tabelle_Nutzer.Vorname,  Tabelle_Nutzer.Nachname, Tabelle_Medium.Titel, Tabelle_Medium.Interpret_Autor, [Tabelle_Ausleihe.ausgeliehen am]
FROM Tabelle_Medium RIGHT JOIN
(Tabelle_Ausleihe LEFT JOIN Tabelle_Nutzer 
ON Tabelle_Ausleihe.id_Nutzer=Tabelle_Nutzer.id_Nutzer)
ON Tabelle_Ausleihe.id_Titel = Tabelle_Medium.id_medium;


Beispieldatei CD_Verwaltung.accdb


Weiterführende Online-Tutorials

Nutzer, die sich weiterführend mit SQL auseinandersetzen wollen, sei eines der hier aufgeführten Online-Tutorials empfohlen.