Bei Microsoft anmelden
Melden Sie sich an, oder erstellen Sie ein Konto.
Hallo,
Wählen Sie ein anderes Konto aus.
Sie haben mehrere Konten.
Wählen Sie das Konto aus, mit dem Sie sich anmelden möchten.

Manchmal möchten Sie die Ergebnisse einer Abfrage als Feld in einer anderen Abfrage oder als Kriterium für ein Abfragefeld verwenden. Angenommen, Sie möchten das Intervall zwischen den Bestellungen für jedes Ihrer Produkte anzeigen. Um eine Abfrage zu erstellen, die dieses Intervall anzeigt, müssen Sie jedes Bestelldatum mit anderen Bestelldaten für dieses Produkt vergleichen. Für den Vergleich dieser Bestelldaten ist auch eine Abfrage erforderlich. Sie können diese Abfrage in Ihrer Standard-Abfrage schachteln, indem Sie einen Unterabfrage verwenden.

Sie können eine Unterabfrage in einem Ausdruck oder in einer sql-Anweisung (strukturierte Abfragesprache) in SQL-Ansicht schreiben.

Inhalt dieses Artikels

Verwenden der Ergebnisse einer Abfrage als Feld in einer anderen Abfrage

Sie können eine Unterabfrage als Feldalias verwenden. Verwenden Sie eine Unterabfrage als Feldalias, wenn Sie die Unterabfrageergebnisse als Feld in Ihrer Standard Abfrage verwenden möchten.

Hinweis: Eine Unterabfrage, die Sie als Feldalias verwenden, kann nicht mehr als ein Feld zurückgeben.

Sie können einen Unterabfragefeldalias verwenden, um Werte anzuzeigen, die von anderen Werten in der aktuellen Zeile abhängen, was ohne die Verwendung einer Unterabfrage nicht möglich ist.

Kehren wir beispielsweise zu dem Beispiel zurück, in dem Sie das Intervall zwischen den Bestellungen für jedes Ihrer Produkte anzeigen möchten. Um dieses Intervall zu bestimmen, müssen Sie jedes Bestelldatum mit anderen Bestelldaten für dieses Produkt vergleichen. Sie können eine Abfrage erstellen, die diese Informationen anzeigt, indem Sie die Northwind-Datenbankvorlage verwenden.

  1. Klicken Sie auf der Registerkarte Datei auf Neu.

  2. Klicken Sie unter Verfügbare Vorlagen auf Beispielvorlagen.

  3. Klicken Sie auf Northwind und dann auf Erstellen.

  4. Befolgen Sie die Anweisungen auf der Seite Northwind Traders (auf der Objektregisterkarte Startbildschirm), um die Datenbank zu öffnen. Schließen Sie dann das Fenster Anmelde-Dialog.

  5. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Abfragen auf Abfrageentwurf.

  6. Klicken Sie auf die Registerkarte Abfragen , und doppelklicken Sie dann auf Produktbestellungen.

  7. Doppelklicken Sie auf das Feld Produkt-ID und das Feld Bestelldatum , um sie dem Abfrageentwurfsraster hinzuzufügen.

  8. Wählen Sie in der Zeile Sortieren der Spalte Produkt-ID des Rasters die Option Aufsteigend aus.

  9. Wählen Sie in der Zeile Sortieren der Spalte Order Date des Rasters Die Option Absteigend aus.

  10. Klicken Sie in der dritten Spalte des Rasters mit der rechten Maustaste auf die Zeile Feld , und klicken Sie dann im Kontextmenü auf Zoom .

  11. Geben Sie im Dialogfeld Zoom den folgenden Ausdruck ein, oder fügen Sie ihn ein:

    Prior Date: (SELECT MAX([Order Date]) 
    FROM [Product Orders] AS [Old Orders]
    WHERE [Old Orders].[Order Date] < [Product Orders].[Order Date]
    AND [Old Orders].[Product ID] = [Product Orders].[Product ID])

    Dieser Ausdruck ist die Unterabfrage. Für jede Zeile wählt die Unterabfrage das letzte Bestelldatum aus, das weniger aktuell ist als das Bestelldatum, das der Zeile bereits zugeordnet ist. Beachten Sie, wie Sie die AS-Schlüsselwort (keyword) verwenden, um einen Tabellenalias zu erstellen, damit Sie Werte in der Unterabfrage mit Werten in der aktuellen Zeile der Standard Abfrage vergleichen können.

  12. Geben Sie in der vierten Spalte des Rasters in der Zeile Feld den folgenden Ausdruck ein:

    Interval: [Order Date]-[Prior Date]

    Dieser Ausdruck berechnet das Intervall zwischen jedem Bestelldatum und dem vorherigen Bestelldatum für dieses Produkt unter Verwendung des Werts für das Vorherige Datum, den wir mithilfe einer Unterabfrage definiert haben.

  13. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

    1. Die Abfrage wird ausgeführt und zeigt eine Liste mit Produktnamen, Bestelldaten, früheren Bestelldaten und dem Intervall zwischen Bestelldaten an. Die Ergebnisse werden zuerst nach Produkt-ID (in aufsteigender Reihenfolge) und dann nach Bestelldatum (in absteigender Reihenfolge) sortiert.

    2. Hinweis: Da es sich bei der Produkt-ID um ein Nachschlagefeld handelt, zeigt Access standardmäßig die Nachschlagewerte (in diesem Fall den Produktnamen) anstelle der tatsächlichen Produkt-IDs an. Obwohl dadurch die angezeigten Werte geändert werden, ändert sich die Sortierreihenfolge nicht.

  14. Schließen Sie die Northwind-Datenbank.

Seitenanfang

Verwenden einer Unterabfrage als Kriterium für ein Abfragefeld

Sie können eine Unterabfrage als Feldkriterium verwenden. Verwenden Sie eine Unterabfrage als Feldkriterium, wenn Sie die Ergebnisse der Unterabfrage verwenden möchten, um die werte einzuschränken, die im Feld angezeigt werden.

Angenommen, Sie möchten eine Liste von Aufträgen überprüfen, die von Mitarbeitern verarbeitet wurden, die keine Vertriebsmitarbeiter sind. Um diese Liste zu generieren, müssen Sie die Mitarbeiter-ID für jede Bestellung mit einer Liste der Mitarbeiter-IDs für Mitarbeiter vergleichen, die keine Vertriebsmitarbeiter sind. Um diese Liste zu erstellen und als Feldkriterium zu verwenden, verwenden Sie eine Unterabfrage, wie im folgenden Verfahren gezeigt:

  1. Öffnen Sie Northwind.accdb, und aktivieren Sie den Inhalt.

  2. Schließen Sie das Anmeldeformular.

  3. Klicken Sie auf der Registerkarte Erstellen in der Gruppe Abfragen auf Abfrageentwurf.

  4. Doppelklicken Sie auf der Registerkarte Tabellen auf Aufträge und Mitarbeiter.

  5. Doppelklicken Sie in der Tabelle Aufträge auf das Feld Mitarbeiter-ID , das Feld Auftrags-ID und das Feld Bestelldatum , um sie dem Abfrageentwurfsraster hinzuzufügen. Doppelklicken Sie in der Tabelle Employees (Mitarbeiter) auf das Feld Job Title (Position ), um es dem Entwurfsraster hinzuzufügen.

  6. Klicken Sie mit der rechten Maustaste auf die Zeile Kriterien der Spalte Mitarbeiter-ID, und klicken Sie dann im Kontextmenü auf Zoom .

  7. Geben Sie im Feld Zoom den folgenden Ausdruck ein, oder fügen Sie ihn ein:

    IN (SELECT [ID] FROM [Employees] 
    WHERE [Job Title]<>'Sales Representative')

    Dies ist die Unterabfrage. Es wählt alle Mitarbeiter-IDs aus, bei denen der Mitarbeiter keine Position als Vertriebsmitarbeiter hat, und stellt dieses Resultset an die Standard Abfrage bereit. Die Standard Abfrage überprüft dann, ob mitarbeiter-IDs aus der Tabelle Orders im Resultset enthalten sind.

  8. Klicken Sie auf der Registerkarte Entwurf in der Gruppe Ergebnisse auf Ausführen.

    Die Abfrage wird ausgeführt, und die Abfrageergebnisse zeigen eine Liste der Aufträge an, die von Mitarbeitern verarbeitet wurden, die keine Vertriebsmitarbeiter sind.

Seitenanfang

Allgemeine SQL-Schlüsselwörter, die Sie mit einer Unterabfrage verwenden können

Es gibt mehrere SQL-Schlüsselwörter, die Sie mit einer Unterabfrage verwenden können:

Hinweis: Diese Liste ist nicht vollständig. Sie können beliebige gültige SQL-Schlüsselwort (keyword) in einer Unterabfrage verwenden, mit Ausnahme von Datendefinitionsschlüsselwörtern.

  • ALLE    Verwenden Sie ALL in einer WHERE-Klausel, um Zeilen abzurufen, die die Bedingung im Vergleich zu jeder Zeile erfüllen, die von der Unterabfrage zurückgegeben wird.

    Angenommen, Sie analysieren Schülerdaten an einer Hochschule. Die Studierenden müssen ein Mindest-GPA einhalten, das von Hauptfach zu Hauptfach variiert. Hauptfachgruppen und deren Mindest-GPAs werden in einer Tabelle mit dem Namen Majors gespeichert, und die relevanten Kursteilnehmerinformationen werden in einer Tabelle namens Student_Records gespeichert.

    Sie können die folgende Abfrage verwenden, um eine Liste der Hauptfachgruppen (und deren Mindest-GPAs) anzuzeigen, für die jeder Kursteilnehmer mit diesem Hauptfach den Mindest-GPA-Wert überschreitet:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • JEGLICHE    Verwenden Sie ANY in einer WHERE-Klausel, um Zeilen abzurufen, die die Bedingung im Vergleich zu mindestens einer der von der Unterabfrage zurückgegebenen Zeilen erfüllen.

    Angenommen, Sie analysieren Schülerdaten an einer Hochschule. Die Studierenden müssen ein Mindest-GPA einhalten, das von Hauptfach zu Hauptfach variiert. Hauptfachgruppen und deren Mindest-GPAs werden in einer Tabelle mit dem Namen Majors gespeichert, und die relevanten Kursteilnehmerinformationen werden in einer Tabelle namens Student_Records gespeichert.

    Sie können die folgende Abfrage verwenden, um eine Liste der Hauptfachgruppen (und deren Mindest-GPAs) anzuzeigen, für die jeder Kursteilnehmer mit diesem Hauptfach nicht die Mindest-GPA erfüllt:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] > ANY
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);

    Hinweis: Sie können auch die SOME-Schlüsselwort (keyword) für den gleichen Zweck verwenden. Die SOME-Schlüsselwort (keyword) ist gleichbedeutend mit ANY.

  • EXISTS     Verwenden Sie EXISTS in einer WHERE-Klausel, um anzugeben, dass eine Unterabfrage mindestens eine Zeile zurückgeben soll. Sie können EXISTS auch mit NOT voran stellen, um anzugeben, dass eine Unterabfrage keine Zeilen zurückgeben soll.

    Die folgende Abfrage gibt beispielsweise eine Liste von Produkten zurück, die in mindestens einer vorhandenen Reihenfolge gefunden werden:

    SELECT *
    FROM [Products]
    WHERE EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);

    Mit NOT EXISTS gibt die Abfrage eine Liste von Produkten zurück, die nicht in mindestens einer vorhandenen Reihenfolge gefunden werden:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Verwenden Sie IN in einer WHERE-Klausel, um zu überprüfen, ob ein Wert in der aktuellen Zeile der Standard Abfrage Teil des Satzes ist, den die Unterabfrage zurückgibt. Sie können IN auch MIT NOT voranstellen, um zu überprüfen, ob ein Wert in der aktuellen Zeile der Standard Abfrage nicht Teil des Satzes ist, den die Unterabfrage zurückgibt.

    Die folgende Abfrage gibt beispielsweise eine Liste von Aufträgen (mit Bestelldaten) zurück, die von Mitarbeitern verarbeitet wurden, die keine Vertriebsmitarbeiter sind:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]<>'Sales Representative');

    Wenn Sie NOT IN verwenden, können Sie dieselbe Abfrage wie folgt schreiben:

    SELECT [Order ID], [Order Date]
    FROM [Orders]
    WHERE [Employee ID] NOT IN
    (SELECT [ID] FROM [Employees]
    WHERE [Job Title]='Sales Representative');

Seitenanfang

Benötigen Sie weitere Hilfe?

Möchten Sie weitere Optionen?

Erkunden Sie die Abonnementvorteile, durchsuchen Sie Trainingskurse, erfahren Sie, wie Sie Ihr Gerät schützen und vieles mehr.

In den Communities können Sie Fragen stellen und beantworten, Feedback geben und von Experten mit umfassendem Wissen hören.

War diese Information hilfreich?

Wie zufrieden sind Sie mit der Sprachqualität?
Was hat Ihre Erfahrung beeinflusst?
Wenn Sie auf "Absenden" klicken, wird Ihr Feedback zur Verbesserung von Produkten und Diensten von Microsoft verwendet. Ihr IT-Administrator kann diese Daten sammeln. Datenschutzbestimmungen.

Vielen Dank für Ihr Feedback!

×