SQL-Abfragen in Access lernen: Praktischer Leitfaden für Anfänger

Microsoft Access bleibt in vielen Unternehmen das schnelle Abfragewerkzeug, um lokale Dateien oder ODBC-Quellen auszuwerten. Der ACE-Engine (Nachfolger von Jet), der weiterhin in Microsoft 365 integriert ist, betreibt interne Anwendungen, die manchmal mehrere Jahrzehnte alt sind. Das Erlernen des Schreibens von SQL-Abfragen direkt in Access ermöglicht es, zu verstehen, was die QBE-Gitter im Hintergrund generieren, und einzugreifen, wenn das Ergebnis nicht dem Erwarteten entspricht.

Jet/ACE SQL und Standard-SQL: Was Access akzeptiert und was nicht

Die meisten SQL-Tutorials online verwenden MySQL, PostgreSQL oder SQL Server als Referenz. Die Beispiele funktionieren oft so, wie sie sind, auf diesen Engines, aber nicht immer auf Access. Der SQL-Dialekt von Access (Jet/ACE SQL) hat Besonderheiten, die Anfänger verwirren, die gewohnt sind, Code aus einem Forum zu kopieren und einzufügen.

Access unterstützt weder CTE (WITH) noch Fensterfunktionen, die in SQL Server oder PostgreSQL verfügbar sind. Jede rekursive oder analytische Abfrage, die online gefunden wird, muss neu geschrieben werden, oft mit Hilfe von verschachtelten Unterabfragen oder temporären gespeicherten Abfragen.

Im Gegensatz dazu bietet Access die TRANSFORM-Klausel für Kreuzabfragen, eine Syntax, die in der SQL-Norm nicht vorhanden ist. Diese Klausel ermöglicht es, Zeilen in Spalten zu pivotieren, ohne ein Tabellenkalkulationsprogramm zu verwenden. Diejenigen, die SQL-Abfragen in Access lernen möchten, sparen Zeit, indem sie diese Abweichungen von Anfang an identifizieren, anstatt zu suchen, warum ein generisches Beispiel einen Syntaxfehler verursacht.

Ein weiterer bemerkenswerter Unterschied ist die Syntax für Joins. Access erfordert oft verschachtelte Klammern, sobald mehrere JOINs in einer Abfrage kombiniert werden, während andere Engines eine lineare Schreibweise akzeptieren. Das Vergessen dieser Klammern führt zu einem Kompilierungsfehler ohne explizite Fehlermeldung.

Mann in einem Coworking-Space, der SQL-Abfragen auf Microsoft Access mit einem ausgedruckten Spickzettel auf dem Tisch konsultiert

SQL-Modus von Access: Wechsel von der grafischen zur direkten Eingabe

Der grafische Abfrage-Designer (QBE-Gitter) ist der übliche Einstiegspunkt in Access. Jede Aktion, das Ziehen eines Feldes, das Ankreuzen eines Sortierkästchens, das Festlegen eines Kriteriums, erzeugt im Hintergrund SQL. Der Wechsel in den SQL-Modus (Tab „Ansicht“ und dann „SQL-Modus“) zeigt die Abfrage so an, wie die ACE-Engine sie ausführen wird.

Lesen, bevor man schreibt

Bevor man eine Abfrage von Grund auf neu verfasst, ist die effektivste Methode, die Abfrage im grafischen Modus zu erstellen und dann das produzierte SQL zu lesen. Dieses Lesen ermöglicht es, jedes visuelle Element (Tabelle, Verknüpfung, Kriterium) mit seiner SQL-Übersetzung zu verknüpfen. Man erkennt schnell die Struktur SELECT, FROM, WHERE, ORDER BY.

Sobald diese Zuordnung erlernt ist, wird es natürlich, das SQL direkt zu ändern. Man fügt eine Funktion hinzu, ersetzt ein Kriterium, fügt ein GROUP BY ein, alles ohne erneut durch das Gitter zu gehen.

Die grundlegenden Befehle im Access-Kontext

  • SELECT und FROM: Felder aus einer oder mehreren Tabellen auswählen. Access verwendet den Punkt, um den Tabellennamen vom Feldnamen zu trennen (Clients.Nom), und eckige Klammern, um Namen mit Leerzeichen oder Sonderzeichen einzurahmen ([Bestelldatum]).
  • WHERE: Datensätze filtern. Die klassischen Vergleichsoperatoren funktionieren, aber die Platzhalter unterscheiden sich: Access verwendet das Sternchen (*) anstelle des Prozentzeichens (%) mit dem LIKE-Operator.
  • JOIN: Tabellen miteinander verbinden. Access bevorzugt die Syntax INNER JOIN, LEFT JOIN, RIGHT JOIN mit der bereits erwähnten Anforderung an mehrere Klammern.
  • ORDER BY und GROUP BY: sortieren und gruppieren. Die HAVING-Klausel funktioniert wie im Standard-SQL, was das Filtern nach der Aggregation vereinfacht.

Häufige Fehler beim Einstieg in SQL auf Access

Einige Fehler treten bei Anfängern systematisch auf. Sie im Voraus zu identifizieren, verhindert frustrierende Stunden des Debuggens.

Der erste betrifft die fehlenden eckigen Klammern um die Feldnamen. Sobald ein Spaltenname ein Leerzeichen, einen Akzent oder ein reserviertes Zeichen enthält, verlangt Access eckige Klammern. Das Schreiben von Bestelldatum anstelle von [Bestelldatum] führt sofort zu einem Fehler.

Der zweite betrifft die Datentypen. Access unterscheidet zwischen doppelten Anführungszeichen für Text in bestimmten Versionen und einfachen Anführungszeichen in anderen Kontexten. Das Rautezeichen (#) umschließt Datumsangaben: WHERE [Bestelldatum] > #01/01/2024#. Die Verwendung von Anführungszeichen anstelle des Rautes für ein Datum ist eine sehr häufige Quelle der Verwirrung.

Der dritte Fehler betrifft mehrere Joins. Jedes Paar von JOIN muss in Klammern eingeschlossen werden, wenn mehr als zwei Tabellen beteiligt sind. Die Fehlermeldung, die Access in diesem Fall anzeigt, ist wenig aussagekräftig, was viele Anfänger dazu bringt, die SQL-Abfrage aufzugeben und zum grafischen Gitter zurückzukehren.

Jugendlicher, der SQL-Abfragen auf Access in seinem Zimmer mit einem Datenbankhandbuch und Lernkarten an der Wand studiert

Über SELECT-Abfragen hinaus auf Access fortschreiten

Sobald die Auswahlabfragen beherrscht sind, öffnet Access die Tür zu Aktionsabfragen: INSERT INTO, UPDATE und DELETE. Diese Befehle funktionieren ähnlich wie im Standard-SQL, mit einer zusätzlichen Vorsicht: Access führt Aktionsabfragen standardmäßig ohne Bestätigungsaufforderung aus, wenn die Warnungen in den Datenbankoptionen deaktiviert sind.

Zuerst im Auswahlmodus zu testen (das UPDATE vorübergehend in SELECT umzuwandeln, um die betroffenen Zeilen zu überprüfen) bleibt eine gute Praxis, bevor Datenänderungen vorgenommen werden.

Kreuzabfragen, die über die TRANSFORM-Klausel zugänglich sind, verdienen besondere Aufmerksamkeit. Sie ermöglichen es, eine direkt nutzbare Zusammenfassungstabelle zu erstellen, ohne einen Export nach Excel. Die Syntax ist spezifisch für Access: TRANSFORM gefolgt von der Aggregationsfunktion, dann ein klassisches SELECT ergänzt durch ein PIVOT auf das Feld, das in Spalten umgewandelt werden soll.

Für diejenigen, die Access mit externen Quellen (SQL Server, CSV-Dateien über ODBC) verbinden möchten, stellen die Passthrough-SQL-Abfragen eine erweiterte Option dar. Sie senden das SQL direkt an den entfernten Server und umgehen so die Einschränkungen der ACE-Engine. Das in diesem Modus geschriebene SQL muss die Syntax des Zielservers einhalten, nicht die von Access.

Der SQL-Dialekt von Access hat seine Grenzen, bietet jedoch ein konkretes Lernfeld für diejenigen, die bereits täglich mit diesem Werkzeug arbeiten. Die Beherrschung der Besonderheiten von Jet/ACE SQL verhindert, dass man blind ungeeignete Beispiele reproduziert und bietet eine solide Grundlage, um später auf leistungsstärkere Engines zu migrieren.

SQL-Abfragen in Access lernen: Praktischer Leitfaden für Anfänger