Access sql nicht gleich

Ich habe eine Datenbank aus der ich 3 Kriterien abfragen will. Ich gebe als Kriterium: "nicht NAME" ein. In einer Spalte führt Access dieses Kriterium durch, sobald ich dies für die zweite Spalte eingebe, wird in der ersten Spalte wieder ein paar Zeilen mit dem eigentlich gelöschten Namen eingefügt die vorher entfernt wurden.

Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben

Content-Key: 19724

Url: https://administrator.de/contentid/19724

Ausgedruckt am: 29.12.2022 um 00:12 Uhr

Aus dem Kurs: Access: Abfragen mit SQL

Tabellen aneinanderreihen

In diesem Datenmodell gibt es zwei Stellen, wo Adressen vorkommen. Das ist nicht ungewöhnlich, das sind typischerweise Kunden, Lieferanten, Mitarbeiter, in diesem Fall sind es Mitarbeiter und Schüler. Auf den ersten Blick scheinen die Tabellen sehr ähnlich, sodass man sich fragt, warum ich die nicht in die gleiche Tabelle schreibe, aber im wirklichen Leben werden hier zu den Mitarbeitern bedeutend mehr Daten gespeichert. Und da ist z.B. nur die Kontoverbindung, und bei den Schülern vielleicht noch andere Informationen. Also, es gibt zwei Stellen mit Tabellen, die beide Adressen haben. Und ich möchte denen jetzt zu Weihnachten einen netten Brief schreiben, über die Zukunft der Musikschule. Natürlich in einer Liste, ich möchte nicht zwei Tabellen abfragen müssen. Das ist im Grunde ein kompletter Widerspruch zu alledem, was ich bisher gemacht habe. Zwischen diesen Tabellen gibt es einfach keine Beziehung. Wenn ich die nebeneinander in eine einzige Abfrage aufnehme, dann kriege ich das gefürchtete Kreuzprodukt, das heißt, jede Mitarbeiter-Adresse wird mit jeder Schüler-Adresse multipliziert. Das will ich nicht. Ich will eine Liste beider Adressen hintereinander. Die Lösung zu diesem Problem besteht in einer UNION-Abfrage. Das sind beliebig viele Abfragen, die hintereinander ausgeführt werden. Also, ich kann mit einem ganz normalen SELECT-Statement anfangen, und hier jetzt festlegen, auf welche Tabelle ich mich beziehe. Also, zuerst auf die Tabelle "Mitarbeiter". Einzige Bedingung in Access ist, dass die Anzahl der Spalten identisch ist. Das ist bei diesen Tabellen nicht so, vor allem sind die in unterschiedlicher Reihenfolge, daher werde ich die besser ausdrücklich benennen, also hier mit den Feldern, die heißen könnten: Ich nehme erstmal nur "NameKomplett", und eventuell die weitere Adresse. Im Grunde kann ich sie auch schon hier eintragen, das spart mir ein wenig Schreibarbeit, also auch hier noch die Straßennummer, die Postleitzahl, und den Ort. Das wäre dann geeignet, um bspw. in einem Word-Serienbrief darauf zuzugreifen. Ich gucke erstmal den ersten Teil an, der wird, wenig überraschend, funktionieren. Hier stehen alle Mitarbeiter, 29 an der Zahl, mit ihren Adressen. Jetzt kommt die entscheidende Änderung. Nämlich hier das Schlüsselwort "UNION ALL", und ein zweites "SELECT" hinterher. Dieses bezieht sich diesmal auf die Schüler, also die Tabelle "Schueler". Und hier muss ich jetzt einfach die entsprechenden Felder ergänzen. Also auch hier gibt es ein "schueNameKomplett", dann gibt es ein "schueStrasseNr", das hätte ich auch von oben kopieren können, weil die bei mir sehr ähnlich heißen, und einen "schueOrt". Und wenn Sie jetzt nochmal gucken, das waren 29 Mitarbeiter, und nach dem Ausführen, Aktualisieren, haben Sie jetzt hier 554, nämlich die 525 Schüler plus die Mitarbeiter. UNION ALL sorgt dafür, dass die alle hintereinander stehen, bei Access sogar völlig egal, welchen Datentyp die haben, und an dieser Stelle sich wie eine einzige Tabelle verhalten. Sie können noch ein weiteres UNION ALL und SELECT hinten ranschreiben. Damit ich es einmal komplett mache, wenn es ein Semikolon gibt, dann nur ein einziges am Ende aller SELECT-Anweisungen, also nicht hinter jedem SELECT. Sie können sogar für jede der beteiligten Tabellen noch vermerken, das geht mit einer berechnenden Funktion, aus welcher Datenquelle die kommt. Z.B. könnte ich hier schreiben "Mitarbeiter", und er findet natürlich einen Feldnamen, "AS Quelle", schreibe ich mal. Und hier, das sind Schüler innerhalb der Gänsefüßchen darf ich ohne Probleme Umlaute benutzen, "AS", und ich nenne das mal deutlich "AndereQuelle". Es dürfte auch "Quelle" heißen, das mache ich aber im Normalfall so, aber ich kann Ihnen bei der Gelegenheit zeigen, was eigentlich mit den Überschriften passiert. Wenn Sie das jetzt ausführen, gibt es ein neues Feld. Sie können jetzt hier nach unten fahren. Da sehen Sie, hier ist zu jeder Tabelle angezeigt, wo die Daten herkommen. Und das ist nämlich das Geheimnis einer UNION-Abfrage, die erste Abfrage gewinnt. Das heißt, wenn ich die Feldnamen nicht hier fälschlich mitbenennen möchte, dann sollte ich jetzt hier hinschreiben: "AS NameKomplett". Und hier: "AS StrasseNr" würde ich das benennen. Und da "AS PLZ". Entsprechend "AS Ort". Und hier würde ich dann tatsächlich, da muss irgendein Name stehen, den gleichen benutzen, theoretisch könnten Sie da auch "AS X" schreiben. Der ist relativ belanglos. Alle folgenden Feldnamen von den nächsten Abfragen werden ignoriert, das wird – wenn ich das jetzt ausführe, sehen Sie das – unter den Feldnamen der ersten Abfrage behandelt. Und das bedeutet nämlich, wenn Sie sortieren wollen, dann kommt hier hinten noch ein "ORDER BY", und sagen wir mal, nach dem Ort, weil das so schön kurz ist, dann müssen Sie sich auf "Ort" beziehen, das ist der Name der gesamten Spalte, so wie es nämlich da oben umbenannt wurde. Es ist nicht mehr "mitarOrt", oder "schueOrt" oder sowas, sondern es ist wirklich nur der Ort, und jetzt ist es hier nach dem Ort sortiert, wie verlangt, also eine UNION ALL-Abfrage, oder allgemeiner: eine UNION-Abfrage, die kann mehrere Abfragen hintereinander schreiben, als ob es sich um eine einzige Tabelle handelt.

Inhalt

Hat Access Zukunft?

Access ist Bestandteil des aktuellen Microsoft/Office 365-Miet-Paketes und wird dort laufend aktualisiert. Die aktuelle Kaufversion Access 2021 wurde im Rahmen von Office 2021 am 5.10.2021 veröffentlicht und hat wie alle anderen Office-Produkte den garantierten Support bis 13.10.2026.

Ist Access eine SQL Datenbank?

Access ist eine Desktop-Datenbank. Das bedeutet, dass das Datenbanksystem mitsamt der Datenbank und der Datenbank-Applikation auf dem Rechner eines Anwenders installiert ist und auch nur von einem Anwender benutzt wird.

Warum ist Access keine Datenbank?

Viele Entwickler sind der Meinung, dass Microsoft Access keine echte Datenbank ist, da wichtige Funktionen fehlen. Zum Beispiel können keine gesteuerten Transaktionen in Microsoft Access durchgeführt werden, da diese Datenbank überhaupt nicht für komplexe Aufgaben ausgelegt ist.

Ist Access eine Programmiersprache?

C++Microsoft Access / Programmiersprachenull