Verschachteln einer Abfrage in einer anderen Abfrage oder in einem Ausdruck mithilfe einer Unterabfrage

Hinweis: Wir möchten Ihnen die aktuellsten Hilfeinhalte so schnell wie möglich in Ihrer eigenen Sprache bereitstellen. Diese Seite wurde automatisiert übersetzt und kann Grammatikfehler oder Ungenauigkeiten enthalten. Unser Ziel ist es, Ihnen hilfreiche Inhalte bereitzustellen. Teilen Sie uns bitte über den Link am unteren Rand dieser Seite mit, ob die Informationen für Sie hilfreich sind. Hier finden Sie den englischen Artikel als Referenz.

Es kann vorkommen, dass Sie die Ergebnisse einer Abfrage als Feld in einer anderen Abfrage oder als Kriterium für ein Abfragefeld verwenden möchten. Nehmen wir beispielsweise einmal an, Sie möchten die Zeiträume zwischen den Bestellungen eines jeden Produkts anzeigen. Zum Erstellen einer Abfrage, die diese Zeiträume anzeigt, müssen Sie die einzelnen Bestelldaten mit anderen Bestelldaten des jeweiligen Produkts vergleichen. Für den Vergleich dieser Bestelldaten ist ebenfalls eine Abfrage erforderlich. Sie können diese Abfrage in die Hauptabfrage verschachteln, indem Sie eine Unterabfrage verwenden.

Unterabfragen können in einem Ausdruck oder in einer SQL-Anweisung (Structured Query Language) in der SQL-Ansicht geschrieben werden.

Inhalt dieses Artikels

Verwenden der Ergebnisse einer Abfrage als Feld in einer anderen Abfrage

Verwenden einer Unterabfrage als Kriterium für ein Abfragefeld

Allgemeine SQL-Schlüsselwörter, die in Verbindung mit Unterabfragen verwendet werden können

Verwenden der Ergebnisse einer Abfrage als Feld in einer anderen Abfrage

Sie können eine Unterabfrage als Feldalias verwenden. Verwenden einer Unterabfrage als Feldalias an, wenn Sie die Ergebnisse der Unterabfrage als Feld in Ihrer Abfrage Hauptfenster verwenden möchten.

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

Sie können eine Unterabfrage als Feldalias Werte angezeigt werden, die auf anderen Werten in der aktuellen Zeile abhängig sind, die nicht möglich ist ohne eine Unterabfrage verwenden. Angenommen, lassen Sie uns zurück zum Beispiel, wo Sie den Abstand zwischen den Bestellungen für Ihre Produkte finden Sie unter möchten. Wenn Sie um dieses Intervall zu ermitteln, müssen Sie jeweiligen Bestelldatum zu anderen Bestelldaten für dieses Produkt vergleichen. Sie können eine Abfrage erstellen, die diese Informationen anzeigt, mithilfe der Northwind 2007-Vorlage.

Demo zum Einrichten von Nordwind 2007

  1. Klicken Sie auf die Microsoft Office-Schaltfläche  Abbildung der Office-Schaltfläche , und klicken Sie dann auf Neu.

  2. Klicken Sie im linken Bereich klicken Sie unter Kategorien auf Lokale Vorlagen.

  3. Klicken Sie unter Lokale Vorlagen klicken Sie auf Northwind 2007, und klicken Sie 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.

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

  2. Klicken Sie im Dialogfeld Tabelle anzeigen auf die Registerkarte Abfragen, und doppelklicken Sie dann auf Artikelbestellungen.

  3. Schließen Sie das Dialogfeld Tabelle anzeigen.

  4. Doppelklicken Sie auf das Feld Bestell-Nr und das Feld Bestelldatum, um diese dem Abfrageentwurfsbereich hinzuzufügen.

  5. Wählen Sie in der Zeile Sortieren der Spalte Bestell-Nr des Rasters Aufsteigend aus.

  6. Wählen Sie in der Zeile Sortieren der Spalte Bestelldatum des Rasters Absteigend aus.

  7. Klicken Sie in der dritten Spalte des Entwurfsbereichs mit der rechten Maustaste auf die Zeile Feld und anschließend im Kontextmenü auf Zoom.

  8. Geben Sie im Feld Zoom den folgenden Ausdruck 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. Mit der Unterabfrage wird für jede Zeile das letzte Bestelldatum ausgewählt, das älter als das bereits der Zeile zugeordnete Bestelldatum ist. Beachten Sie, wie das Schlüsselwort AS für die Erstellung eines Tabellenalias verwendet wird, damit Sie die Werte in der Unterabfrage mit den Werten in der aktuellen Zeile der Hauptabfrage vergleichen können.

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

Interval: [Order Date]-[Prior Date]

Mit diesem Ausdruck wird der Zeitraum zwischen dem jeweiligen Bestelldatum und dem vorherigen Bestelldatum des Produkts berechnet, und zwar unter Verwendung des Werts für das vorherige Datum, der mithilfe der Unterabfrage festgelegt wurde.

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

    Die Abfrage wird ausgeführt und zeigt eine Liste von Produktnamen, Bestelldaten, vorherige Bestelldaten und den Abstand zwischen den Bestelldaten an. Die Ergebnisse werden zuerst nach Produkt-ID (in aufsteigender Reihenfolge) und dann nach dem Bestelldatum (in absteigender Reihenfolge) sortiert.

    Hinweis: Da Produkt-ID eines Nachschlagefelds, standardmäßig ist zeigt Access die Nachschlagewerte (in diesem Fall der Produktname), anstatt die eigentliche Produkt-IDs an. Obwohl dies die Werte, die angezeigt werden ändern, ändert es nicht die Sortierreihenfolge an.

  2. Schließen Sie die Nordwind-Datenbank.

Seitenanfang

Verwenden einer Unterabfrage als Kriterium für ein Abfragefeld

Sie können eine Unterabfrage als Kriterium Feld verwenden. Verwenden einer Unterabfrage als Kriterium Feld ein, wenn die Ergebnisse der Unterabfrage verwenden, die Werte einschränken, die im Feld angezeigt werden soll.

Nehmen wir beispielsweise einmal an, Sie möchten eine Liste der Aufträge anzeigen, die von Mitarbeitern bearbeitet wurden, die keine Vertriebsmitarbeiter sind. Zum Generieren dieser Liste müssen Sie die Mitarbeiter-ID eines jeden Auftrags mit der Liste der Kennungen der Mitarbeiter vergleichen, die keine Vertriebsmitarbeiter sind. Zum Erstellen dieser Liste und zur Verwendung der Liste als Feldkriterium verwenden Sie wie im nachstehenden Verfahren gezeigt eine Unterabfrage:

  1. Öffnen Sie die Nordwind-2007.accdb, und aktivieren Sie deren Inhalt.

  2. Schließen Sie das Anmeldeformular.

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

  4. Doppelklicken Sie im Dialogfeld Tabelle anzeigen auf der Registerkarte Tabellen auf Bestellungen und Personal.

  5. Schließen Sie das Dialogfeld Tabelle anzeigen.

  6. Doppelklicken Sie in der Tabelle Bestellungen auf das Feld Personal-Nr, das Feld Bestell-Nr und das Feld Bestelldatum, um diese dem Abfrageentwurfsbereich hinzuzufügen. Doppelklicken Sie in der Tabelle Personal auf das Feld Position, um dieses Feld dem Abfrageentwurfsbereich hinzuzufügen.

  7. Klicken Sie mit der rechten Maustaste auf die Zeile Kriterien der Spalte Personal-Nr, und klicken Sie dann im Kontextmenü auf Zoom.

  8. Geben Sie im Feld Zoom den folgenden Ausdruck ein:

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

    Hierbei handelt es sich um die Unterabfrage. Es werden alle die Mitarbeiter-IDs, wobei der Mitarbeiter hat keine Position der Vertriebsmitarbeiter und liefert die Resultset der Abfrage Hauptfenster, ausgewählt. Die wichtigste Abfrage überprüft dann sehen, ob die Mitarbeiter-IDs, aus der Tabelle Orders im Ergebnis festgelegt sind.

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

    Die Abfrage wird ausgeführt, und als Abfrageergebnis wird eine Liste der Aufträge angezeigt, die von Mitarbeiter verarbeitet wurden, die keine Vertriebsmitarbeiter sind.

Seitenanfang

Allgemeine SQL-Schlüsselwörter, die in Verbindung mit Unterabfragen verwendet werden können

Es gibt verschiedene SQL-Schlüsselwörter, die in Verbindung mit Unterabfragen verwendet werden können:

Hinweis: Diese Liste erhebt keinen Anspruch auf Vollständigkeit. In einer Unterabfrage kann jedes gültige SQL-Schlüsselwort mit Ausnahme von Schlüsselwörtern für die Datendefinition verwendet werden.

  • ALL    Sie verwenden ALL in einer WHERE-Klausel, um Zeilen abzurufen, die der Bedingung entsprechen, wenn sie mit jeder von der Unterabfrage zurückgegebenen Zeile verglichen werden.

    Nehmen Sie beispielsweise an, dass Sie Student Daten bei einer Kalkulation analysieren. Die Kursteilnehmer müssen einen minimalen Durchschnittsnote liegt, aus den Haupt-Haupt-variierende aufrechterhalten. Hauptfächer und der zugehörigen minimalen Durchschnittsnoten werden in einer Tabelle mit dem Namen Hauptfächer gespeichert, und die relevanten-Student Informationen werden in einer Tabelle namens Student_Records gespeichert.

    Zum Anzeigen einer Liste der Hauptfächer (und der zugehörigen minimalen Durchschnittsnoten), bei denen der jeweilige Studierende mit diesem Hauptfach über der minimalen Durchschnittsnote liegt, kann die folgende Abfrage verwendet werden:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Sie verwenden ANY in einer WHERE-Klausel, um Zeilen abzurufen, die der Bedingung entsprechen, wenn sie mit mindestens einer von der Unterabfrage zurückgegebenen Zeile verglichen werden.

    Nehmen Sie beispielsweise an, dass Sie Student Daten bei einer Kalkulation analysieren. Die Kursteilnehmer müssen einen minimalen Durchschnittsnote liegt, aus den Haupt-Haupt-variierende aufrechterhalten. Hauptfächer und der zugehörigen minimalen Durchschnittsnoten werden in einer Tabelle mit dem Namen Hauptfächer gespeichert, und die relevanten-Student Informationen werden in einer Tabelle namens Student_Records gespeichert.

    Zum Anzeigen einer Liste der Hauptfächer (und der zugehörigen minimalen Durchschnittsnoten), bei denen irgendeiner der Studierenden mit diesem Hauptfach unter der minimalen Durchschnittsnote liegt, kann die folgende Abfrage verwendet werden:

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

    Hinweis: Für den gleichen Zweck kann auch das Schlüsselwort SOME verwendet werden; das Schlüsselwort SOME wird synonym zum Schlüsselwort ANY verwendet.

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

    Mit der folgenden Abfrage wird beispielsweise eine Liste der Produkte zurückgegeben, die sich in mindestens einem vorhandenen Auftrag befinden:

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

    Bei Verwendung von NOT EXISTS wird eine Liste der Produkte zurückgegeben, die sich nicht in mindestens einem vorhandenen Auftrag befinden:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Sie verwenden IN in einer WHERE-Klausel, um zu prüfen, ob ein Wert in der aktuellen Zeile der Hauptabfrage Teil des von der Unterabfrage zurückgegebenen Ergebnissets ist. Sie können IN auch NOT voranstellen, um zu prüfen, ob ein Wert in der aktuellen Zeile der Hauptabfrage nicht Teil des Ergebnissets der Unterabfrage ist.

    So gibt die folgende Abfrage beispielsweise eine Liste der Bestellungen (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');

    Bei Verwendung von NOT IN hätte die gleiche Abfrage auch wie folgt geschrieben werden können:

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

Seitenanfang

Ihre Office-Fähigkeiten erweitern
Schulung erkunden
Neue Funktionen als Erster erhalten
An Office Insider teilnehmen

War diese Information hilfreich?

Vielen Dank für Ihr Feedback!

Vielen Dank für Ihr Feedback. Es klingt, als ob es hilfreich sein könnte, Sie mit einem unserer Office-Supportmitarbeiter zu verbinden.

×