Werbung

Microsoft Access ist wohl das leistungsstärkste Tool in der gesamten Microsoft Office-Suite, verwirrt jedoch Office-Hauptbenutzer (und macht ihnen manchmal Angst). Wie soll sich jemand mit einer steileren Lernkurve als Word oder Excel mit der Verwendung dieses Tools auseinandersetzen? Diese Woche, Bruce Epper Ich werde einige der Probleme betrachten, die durch diese Frage von einem unserer Leser ausgelöst wurden.

Ein Leser fragt:

Ich habe Probleme beim Schreiben einer Abfrage in Microsoft Access.

Ich habe eine Datenbank mit zwei Produkttabellen, die eine gemeinsame Spalte mit einem numerischen Produktcode und einem zugehörigen Produktnamen enthalten.

Ich möchte herausfinden, welche Produkte aus Tabelle A in Tabelle B aufgeführt sind. Ich möchte eine Spalte mit dem Namen Ergebnisse hinzufügen, die den Produktnamen aus Tabelle A enthält, falls vorhanden, und den Produktnamen aus Tabelle B, wenn er in Tabelle A nicht vorhanden ist.

Hast du irgendeinen Ratschlag?

Antwort von Bruce:

Microsoft Access ist ein Datenbankverwaltungssystem (DBMS), das sowohl für Windows- als auch für Mac-Computer entwickelt wurde. Es verwendet die Jet-Datenbank-Engine von Microsoft für die Datenverarbeitung und -speicherung. Es bietet auch eine grafische Oberfläche für Benutzer, die das Verständnis der SQL-Struktur (Structured Query Language) nahezu überflüssig macht.

instagram viewer

SQL ist die Befehlssprache zum Hinzufügen, Löschen, Aktualisieren und Zurückgeben von Informationen, die in gespeichert sind Datenbank sowie Ändern von Kerndatenbankkomponenten wie Hinzufügen, Löschen oder Ändern von Tabellen oder Indizes.

Startpunkt

Wenn Sie noch nicht mit Access oder einem anderen RDBMS vertraut sind, empfehlen wir Ihnen, mit diesen Ressourcen zu beginnen, bevor Sie fortfahren:

  • Was ist eine Datenbank? Was ist eigentlich eine Datenbank? [MakeUseOf erklärt]Für einen Programmierer oder Technikbegeisterten ist das Konzept einer Datenbank eine Selbstverständlichkeit. Für viele Menschen ist das Konzept einer Datenbank selbst jedoch etwas fremd ... Weiterlesen Hier verwendet Ryan Dube Excel, um die Grundlagen relationaler Datenbanken zu zeigen.
  • Eine Kurzanleitung für den Einstieg in Microsoft Access 2007 Eine Kurzanleitung für den Einstieg in Microsoft Access 2007 Weiterlesen Dies ist eine allgemeine Übersicht über Access und die Komponenten, aus denen eine Access-Datenbank besteht.
  • Ein kurzes Tutorial zu Tabellen in Microsoft Access 2007 Ein kurzes Tutorial zu Tabellen in Microsoft Access 2007 Weiterlesen Sehen Sie sich an, wie Sie Ihre erste Datenbank und Tabellen erstellen, um Ihre strukturierten Daten zu speichern.
  • Ein kurzes Tutorial zu Abfragen in Microsoft Access 2007 Ein kurzes Tutorial zu Abfragen in Microsoft Access 2007 Weiterlesen untersucht die Mittel, um bestimmte Teile der in den Datenbanktabellen gespeicherten Daten zurückzugeben.

Wenn Sie ein grundlegendes Verständnis der in diesen Artikeln bereitgestellten Konzepte haben, ist das Folgende etwas leichter zu verdauen.

Datenbankbeziehungen und Normalisierung

Stellen Sie sich vor, Sie leiten ein Unternehmen, das weltweit 50 verschiedene Arten von Widgets verkauft. Sie haben einen Kundenstamm von 1.250 und verkaufen in einem durchschnittlichen Monat 10.000 Widgets an diese Kunden. Sie verwenden derzeit eine einzige Tabelle, um alle diese Verkäufe zu verfolgen - effektiv eine einzige Datenbanktabelle. Und jedes Jahr werden Ihrer Tabelle Tausende von Zeilen hinzugefügt.

Flachtisch-1Flachtisch-2

Die obigen Bilder sind Teil der von Ihnen verwendeten Tabelle zur Auftragsverfolgung. Angenommen, diese beiden Kunden kaufen mehrmals im Jahr Widgets bei Ihnen, sodass Sie für beide weitaus mehr Zeilen haben.

Wenn Joan Smith Ted Baines heiratet und seinen Nachnamen annimmt, muss jetzt jede einzelne Zeile, die ihren Namen enthält, geändert werden. Das Problem verschärft sich, wenn Sie zufällig zwei verschiedene Kunden mit dem Namen "Joan Smith" haben. Es ist gerade viel schwieriger geworden, Ihre Verkaufsdaten aufgrund eines ziemlich häufigen Ereignisses konsistent zu halten.

Durch die Verwendung einer Datenbank und die Normalisierung der Daten können wir Artikel in mehrere Tabellen wie Inventar, Kunden und Bestellungen aufteilen.

Normalisierung

Wenn wir uns nur den Client-Teil unseres Beispiels ansehen, entfernen wir die Spalten für Client-Name und Client-Adresse und fügen sie in eine neue Tabelle ein. Im obigen Bild habe ich die Dinge auch besser aufgeschlüsselt, um einen detaillierteren Zugriff auf die Daten zu erhalten. Die neue Tabelle enthält auch eine Spalte für einen Primärschlüssel (ClientID) - eine Nummer, mit der auf jede Zeile in dieser Tabelle zugegriffen wird.

In der ursprünglichen Tabelle, in der wir diese Daten entfernt haben, haben wir eine Spalte für einen Fremdschlüssel (ClientID) hinzugefügt, die auf die richtige Zeile mit den Informationen für diesen bestimmten Client verweist.

Wenn Joan Smith ihren Namen in Joan Baines ändert, muss die Änderung nur einmal in der Client-Tabelle vorgenommen werden. Jede andere Referenz aus verknüpften Tabellen enthält den richtigen Kundennamen und einen Bericht, in dem angegeben ist, wofür Joan gekauft hat In den letzten 5 Jahren werden alle Bestellungen sowohl unter ihrem Mädchennamen als auch unter ihrem verheirateten Namen eingehen, ohne dass der Bericht geändert werden muss generiert.

Als zusätzlichen Vorteil reduziert dies auch den Gesamtverbrauch an Speicherplatz.

Typen verbinden

SQL definiert fünf verschiedene Arten von Verknüpfungen: INNER, LEFT OUTER, RIGHT OUTER, FULL OUTER und CROSS. Das Schlüsselwort OUTER ist in der SQL-Anweisung optional.

Microsoft Access ermöglicht die Verwendung von INNER (Standard), LEFT OUTER, RIGHT OUTER und CROSS. FULL OUTER wird als solches nicht unterstützt, aber durch Verwendung von LEFT OUTER, UNION ALL und RIGHT OUTER kann es auf Kosten von mehr CPU-Zyklen und E / A-Operationen gefälscht werden.

Die Ausgabe eines CROSS-Joins enthält jede Zeile der linken Tabelle, gepaart mit jeder Zeile der rechten Tabelle. Das einzige Mal, dass ich jemals einen CROSS-Join gesehen habe, war beim Auslastungstest von Datenbankservern.

Schauen wir uns an, wie die grundlegenden Verknüpfungen funktionieren, und passen sie dann an unsere Bedürfnisse an.

Beginnen wir mit der Erstellung von zwei Tabellen, ProdA und ProdB, mit den folgenden Designeigenschaften.

access-table-defs

Die AutoNumber ist eine automatisch inkrementierende lange Ganzzahl, die Einträgen beim Hinzufügen zur Tabelle zugewiesen wird. Die Option Text wurde nicht geändert, sodass eine Textzeichenfolge mit bis zu 255 Zeichen akzeptiert wird.

Füllen Sie sie nun mit einigen Daten.

Zugriffstabellen

Um die Unterschiede in der Funktionsweise der drei Verknüpfungstypen aufzuzeigen, habe ich die Einträge 1, 5 und 8 aus ProdA gelöscht.

Erstellen Sie als Nächstes eine neue Abfrage, indem Sie auf gehen Erstellen> Abfragedesign. Wählen Sie beide Tabellen im Dialogfeld "Tabelle anzeigen" und aus Klicken Sie auf Hinzufügen, dann Schließen.

neue Abfrage

Klicken Sie in der Tabelle ProdA auf ProductID, ziehen Sie sie in der Tabelle ProdB auf ProductID und lassen Sie die Maustaste los, um die Beziehung zwischen den Tabellen herzustellen.

Designansicht

Klicken Sie mit der rechten Maustaste auf die Zeile zwischen den Tabellen, die die Beziehung zwischen den Elementen und darstellt Wählen Sie Join Properties.

join_properties

Standardmäßig ist Join-Typ 1 (INNER) ausgewählt. Option 2 ist eine Verknüpfung von LINKS AUSSEN und 3 ist eine Verknüpfung von RECHTS AUSSEN.

Wir werden uns zuerst den INNER-Join ansehen. Klicken Sie also auf OK, um den Dialog zu schließen.

Wählen Sie im Abfrage-Designer die Felder aus den Dropdown-Listen aus, die angezeigt werden sollen.

Design-Ansicht-2

Wenn wir die Abfrage ausführen (das rote Ausrufezeichen in der Multifunktionsleiste), wird das Feld ProductName aus beiden Tabellen mit dem Wert aus der Tabelle ProdA in der ersten Spalte und ProdB in der zweiten angezeigt.

inner_join

Beachten Sie, dass die Ergebnisse nur Werte anzeigen, bei denen ProductID in beiden Tabellen gleich ist. Obwohl in der Tabelle ProdB ein Eintrag für ProductID = 1 vorhanden ist, wird dieser in den Ergebnissen nicht angezeigt, da ProductID = 1 in der Tabelle ProdA nicht vorhanden ist. Gleiches gilt für ProductID = 11. Es existiert in der Tabelle ProdA, aber nicht in der Tabelle ProdB.

Design-Band

Wenn Sie die Schaltfläche Ansicht in der Multifunktionsleiste verwenden und zur SQL-Ansicht wechseln, können Sie die SQL-Abfrage anzeigen, die vom Designer generiert wurde, um diese Ergebnisse abzurufen.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA INNER JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Wenn Sie zur Entwurfsansicht zurückkehren, ändern Sie den Verknüpfungstyp in 2 (LINKS AUSSEN). Führen Sie die Abfrage aus, um die Ergebnisse anzuzeigen.

Linke äußere Verbindung

Wie Sie sehen können, wird jeder Eintrag in der Tabelle ProdA in den Ergebnissen dargestellt, während in den Ergebnissen nur diejenigen in ProdB angezeigt werden, die einen übereinstimmenden ProductID-Eintrag in der Tabelle ProdB haben.

Das Leerzeichen in der Spalte ProdB.ProductName ist ein spezieller Wert (NULL), da die Tabelle ProdB keinen übereinstimmenden Wert enthält. Dies wird sich später als wichtig erweisen.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA LEFT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Versuchen Sie dasselbe mit der dritten Art der Verknüpfung (RECHTS AUSSEN).

right_outer_join

Die Ergebnisse zeigen alles aus der Tabelle ProdB, während leere (als NULL bezeichnete) Werte angezeigt werden, bei denen die ProdA-Tabelle keinen übereinstimmenden Wert hat. Dies bringt uns bisher den in der Frage unseres Lesers gewünschten Ergebnissen am nächsten.

SELECT ProdA.ProductName, ProdB.ProductName FROM ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Verwenden von Funktionen in einer Abfrage

Die Ergebnisse einer Funktion können auch als Teil einer Abfrage zurückgegeben werden. Wir möchten, dass eine neue Spalte mit dem Namen "Ergebnisse" in unserer Ergebnismenge angezeigt wird. Sein Wert ist der Inhalt der ProductName-Spalte der Tabelle ProdA, wenn ProdA einen Wert hat (er ist nicht NULL), andernfalls sollte er der Tabelle ProdB entnommen werden.

Die Immediate IF (IIF) -Funktion kann verwendet werden, um dieses Ergebnis zu generieren. Die Funktion akzeptiert drei Parameter. Die erste ist eine Bedingung, die einen wahren oder falschen Wert ergeben muss. Der zweite Parameter ist der Wert, der zurückgegeben werden soll, wenn die Bedingung True ist, und der dritte Parameter ist der Wert, der zurückgegeben werden soll, wenn die Bedingung False ist.

Das Vollfunktionskonstrukt für unsere Situation sieht folgendermaßen aus:

IIF (ProdA.ProductID ist Null, ProdB.ProductName, ProdA.ProductName)

Beachten Sie, dass der Bedingungsparameter nicht auf Gleichheit prüft. Ein Nullwert in einer Datenbank hat keinen Wert, der mit einem anderen Wert verglichen werden kann, einschließlich eines anderen Nullwerts. Mit anderen Worten, Null ist nicht gleich Null. Je. Um dies zu umgehen, überprüfen wir den Wert stattdessen mit dem Schlüsselwort "Is".

Wir hätten auch "Is Not Null" verwenden und die Reihenfolge der Parameter "True" und "False" ändern können, um das gleiche Ergebnis zu erzielen.

Wenn Sie dies in den Abfrage-Designer einfügen, müssen Sie die gesamte Funktion in den Eintrag Feld: eingeben. Um die Spalte "Ergebnisse" zu erstellen, müssen Sie einen Alias ​​verwenden. Stellen Sie dazu der Funktion "Ergebnisse:" voran, wie im folgenden Screenshot dargestellt.

rechts-außen-Alias-Ergebnis-Design

Der entsprechende SQL-Code hierfür wäre:

SELECT ProdA.ProductName, ProdB.ProductName, IIF (ProdA.ProductID ist Null, ProdB.ProductName, ProdA.ProductName) AS Ergebnisse von ProdA RIGHT JOIN ProdB ON ProdA.ProductID = ProdB.ProductID;

Wenn wir diese Abfrage ausführen, werden diese Ergebnisse erzeugt.

right_outer_with_aliased_results

Hier sehen wir für jeden Eintrag, in dem die Tabelle ProdA einen Wert hat, diesen Wert in der Spalte Ergebnisse wiederzugeben. Wenn die ProdA-Tabelle keinen Eintrag enthält, wird der Eintrag von ProdB in den Ergebnissen angezeigt. Dies ist genau das, was unser Leser gefragt hat.

Weitere Ressourcen zum Erlernen von Microsoft Access finden Sie unter Joel Lee So lernen Sie Microsoft Access kennen: 5 kostenlose Online-Ressourcen So lernen Sie Microsoft Access kennen: 5 kostenlose Online-RessourcenMüssen Sie eine große Datenmenge verwalten? Sie sollten sich Microsoft Access ansehen. Unsere kostenlosen Lernressourcen können Ihnen den Einstieg erleichtern und die Fähigkeiten für komplexere Projekte erlernen. Weiterlesen .

Bruce spielt seit den 70er Jahren mit Elektronik, seit den frühen 80er Jahren mit Computern und beantwortet Fragen zu Technologien, die er die ganze Zeit weder benutzt noch gesehen hat. Er ärgert sich auch, wenn er versucht, Gitarre zu spielen.