Zagnieżdżanie kwerendy wewnątrz innej kwerendy lub w wyrażeniu przy użyciu podkwerendy

Uwaga:  Staramy się udostępniać najnowszą zawartość Pomocy w Twoim języku tak szybko, jak to możliwe. Ta strona została przetłumaczona automatycznie i może zawierać błędy gramatyczne lub nieścisłości. Chcemy, aby ta zawartość była dla Ciebie przydatna. Prosimy o powiadomienie nas, czy te informacje były pomocne, u dołu tej strony. Oto angielskojęzyczny artykuł do wglądu.

Czasami może zaistnieć potrzeba użycia wyników kwerendy jako pola w innej kwerendzie lub jako kryterium dla pola kwerendy. Załóżmy na przykład, że użytkownik chce zobaczyć interwał między zamówieniami poszczególnych produktów. Aby utworzyć kwerendę pokazującą ten interwał, należy porównać daty poszczególnych zamówień danego produktu. Do porównania tych dat również jest wymagana kwerenda. Kwerendę można zagnieździć wewnątrz kwerendy głównej przy użyciu podzapytanie.

Do napisania podkwerendy można użyć wyrażenie lub instrukcji SQL (Structured Query Language) w widok SQL.

W tym artykule

Używanie wyników kwerendy jako pola w innej kwerendzie

Używanie podkwerendy jako kryterium dla pola kwerendy

Typowe słowa kluczowe SQL używane w podkwerendach

Używanie wyników kwerendy jako pola w innej kwerendzie

Podkwerendy można użyć jako alias pola. Używanie podkwerendy jako alias pola, gdy chcesz użyć wyników podkwerendy jako pola w kwerendzie głównym.

Uwaga: Podkwerenda użyta jako alias pola może zwrócić maksymalnie jedno pole.

Alias pola podkwerendy może zostać użyty do wyświetlenia wartości zależnych od innych wartości w bieżącym wierszu, co nie jest możliwe bez użycia podkwerendy.

Wróćmy do przykładu, w którym użytkownik chce zobaczyć interwał między zamówieniami poszczególnych produktów. Aby ustalić ten interwał, należy porównać poszczególne daty zamówień danego produktu. Można utworzyć kwerendę powodującą wyświetlenie tych informacji przy użyciu szablonu bazy danych Northwind.

Pokaż, jak skonfigurować bazę danych Northwind

  1. Na karcie Plik kliknij pozycję Nowe.

  2. W obszarze Dostępne szablony kliknij pozycję Przykładowe szablony.

  3. Kliknij pozycję Northwind, a następnie kliknij przycisk Utwórz.

  4. Postępuj zgodnie ze wskazówkami na stronie Northwind Traders (na karcie obiektu Ekran uruchamiania), aby otworzyć bazę danych, a następnie zamknij okno dialogowe Logowanie.

  1. Na karcie Tworzenie w grupie Kwerendy kliknij pozycję Projekt kwerendy.

  2. W oknie dialogowym Pokazywanie tabeli kliknij kartę Kwerendy, a następnie kliknij dwukrotnie kwerendę Zamówienia produktu.

  3. Zamknij okno dialogowe Pokazywanie tabeli.

  4. Kliknij dwukrotnie pole ID produktu oraz pole Data zamówienia, aby je dodać do siatki projektu kwerendy.

  5. W wierszu Sortuj kolumny ID produktu siatki zaznacz opcję Rosnąco.

  6. W wierszu Sortuj kolumny Data zamówienia siatki zaznacz opcję Malejąco.

  7. W trzeciej kolumnie siatki kliknij prawym przyciskiem myszy wiersz Pole, a następnie w menu skrótów kliknij polecenie Powiększenie.

  8. W oknie dialogowym Powiększenie wpisz lub wklej następujące wyrażenie:

    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])

Wyrażenie to jest podkwerendą. Dla każdego wiersza podkwerenda wybierze najnowszą datę zamówienia, która jest starsza od daty zamówienia skojarzonej z wierszem. Słowo kluczowe AS powinny zostać użyte do utworzenia aliasu tabeli, tak aby było możliwe porównanie wartości w podkwerendzie z wartościami w bieżącym wierszu kwerendy głównej.

  1. W czwartej kolumnie siatki w wierszu Pole wpisz następujące wyrażenie:

    Interval: [Order Date]-[Prior Date]

Wyrażenie to oblicza interwał między poszczególnymi datami zamówienia produktu przy użyciu wartości wcześniejszej daty zdefiniowanej za pomocą podkwerendy.

  1. Na karcie Projektowanie w grupie Wyniki kliknij przycisk Uruchom.

    1. Zostanie uruchomiona kwerenda, w której zostanie wyświetlona lista nazw produktów, dat zamówień, wcześniejszych dat zamówień oraz interwał między tymi datami. Wyniki są najpierw sortowane według identyfikatora produktu (rosnąco), a następnie według daty zamówienia (malejąco).

    2. Uwaga: Ponieważ pole ID produktu jest polem odnośnika, domyślnie w programie Access są wyświetlane wartości odnośników (w tym przypadku nazwa produktu), a nie rzeczywiste identyfikatory produktów. Zmienia to wyświetlane wartości, ale nie zmienia kolejności sortowania.

  2. Zamknij bazę danych Northwind.

Początek strony

Używanie podkwerendy jako kryterium dla pola kwerendy

Za pomocą podkwerendy jako kryterium dla pola. Używanie podkwerendy jako kryterium dla pola, gdy chcesz ograniczające wyniki podkwerendy wartości wyświetlane w polu.

Załóżmy na przykład, że użytkownik chce przejrzeć listę zamówień zrealizowanych przez pracowników, którzy nie są przedstawicielami handlowymi. Aby utworzyć taką listę, należy porównać identyfikatory pracowników związanych z każdym zamówieniem z listą identyfikatorów pracowników, którzy nie są przedstawicielami handlowymi. Do utworzenia takiej listy i użycia jej jako kryterium pola jest używana podkwerenda, tak jak przedstawiono w poniższej procedurze:

  1. Otwórz Northwind 2007.accdb i Włącz jej zawartość.

  2. Zamknij formularz logowania.

  3. Na karcie Tworzenie w grupie Inne kliknij polecenie Projekt kwerendy.

  4. W oknie dialogowym Pokazywanie tabeli na karcie Tabele kliknij dwukrotnie tabele Zamówienia i Pracownicy.

  5. Zamknij okno dialogowe Pokazywanie tabeli.

  6. W tabeli Zamówienia kliknij dwukrotnie pole Identyfikator pracownika, pole Identyfikator zamówienia oraz pole Data zamówienia, aby je dodać do siatki projektu kwerendy. W tabeli Pracownicy kliknij dwukrotnie pole Tytuł zawodowy, aby je dodać do siatki projektu.

  7. Kliknij prawym przyciskiem myszy wiersz Kryteria kolumny Identyfikator pracownika, a następnie w menu skrótów kliknij polecenie Powiększ.

  8. W oknie Powiększenie wpisz lub wklej następujące wyrażenie:

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

    Jest to podkwerenda. Zostaną wybrane identyfikatory wszystkich pracowników, którzy nie mają tytułu zawodowego przedstawiciela handlowego. Następnie kwerenda główna sprawdzi, czy identyfikatory pracowników z tabeli Zamówienia znajdują się w zestawie wyników.

  9. Na karcie Projektowanie w grupie Wyniki kliknij przycisk Uruchom.

    Zostanie uruchomiona kwerenda, a w wynikach kwerendy zostanie wyświetlona lista zamówień zrealizowanych przez pracowników, którzy nie są przedstawicielami handlowymi.

Początek strony

Typowe słowa kluczowe SQL używane w podkwerendach

Istnieje kilka słów kluczowych SQL, których można używać w podkwerendach:

Uwaga: Ta lista nie jest wyczerpująca. W podkwerendach można używać każdego prawidłowego słowa kluczowego SQL poza słowami kluczowymi definiującymi dane.

  • ALL    Słowo kluczowe ALL jest używane w klauzuli WHERE w celu pobrania wierszy spełniających warunek po porównaniu ich z każdym wierszem zwróconym przez podkwerendę.

    Załóżmy na przykład, że użytkownik analizuje dane o studentach na uczelni. Studenci muszą utrzymywać minimalną średnią ocen, która różni się w zależności od specjalizacji. Minimalne średnie ocen dla poszczególnych specjalizacji są przechowywane w tabeli o nazwie Specjalizacje, a odpowiednie informacje o studentach są przechowywane w tabeli o nazwie Kartoteka_Studentow.

    Aby zobaczyć listę specjalizacji (oraz ich minimalną średnią ocen), w których przypadku wszyscy studenci mają średnią ocen przekraczającą minimalną średnią ocen dla danej specjalizacji, można użyć następującej kwerendy:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Słowo kluczowe ANY jest używane w klauzuli WHERE w celu pobrania wierszy spełniających warunek po porównaniu ich z przynajmniej jednym wierszem zwróconym przez podkwerendę.

    Załóżmy na przykład, że użytkownik analizuje dane o studentach na uczelni. Studenci muszą utrzymywać minimalną średnią ocen, która różni się w zależności od specjalizacji. Minimalne średnie ocen dla poszczególnych specjalizacji są przechowywane w tabeli o nazwie Specjalizacje, a odpowiednie informacje o studentach są przechowywane w tabeli o nazwie Kartoteka_Studentow.

    Aby zobaczyć listę specjalizacji (oraz ich minimalną średnią ocen), w których przypadku dowolny student ma średnią ocen nie przekraczającą minimalnej średniej ocen dla danej specjalizacji, można użyć następującej kwerendy:

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

    Uwaga: W tym samym celu można również użyć słowa kluczowego SOME, które jest synonimem słowa kluczowego ANY.

  • EXISTS    Użycie słowa kluczowego EXISTS w klauzuli WHERE powoduje zwrócenie przez podkwerendę co najmniej jednego wiersza. Można również poprzedzić słowo kluczowe EXISTS słowem kluczowym NOT, aby podkwerenda nie zwracała żadnego wiersza.

    Na przykład poniższa kwerenda zwraca listę produktów odnalezionych w przynajmniej jednym istniejącym zamówieniu:

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

    Gdy zostaną użyte słowa kluczowe NOT EXISTS, kwerenda zwróci listę produktów, które nie zostały odnalezione w przynajmniej jednym istniejącym zamówieniu:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Słowo kluczowe IN jest używane w klauzuli WHERE w celu zweryfikowania, czy wartość w bieżącym wierszu kwerendy głównej jest częścią zestawu zwróconego przez podkwerendę. Można również poprzedzić słowo kluczowe IN słowem kluczowym NOT, aby zweryfikować, czy wartość w bieżącym wierszu kwerendy głównej nie jest częścią zestawu zwróconego przez kwerendę.

    Na przykład poniższa kwerenda zwraca listę zamówień (razem z datami zamówień) zrealizowanych przez pracowników, którzy nie są przedstawicielami handlowymi:

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

    W ten sposób można napisać tę samą kwerendę, używając słów kluczowych NOT IN:

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

Początek strony

Rozwijaj umiejętności związane z pakietem Office
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów pakietu Office

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×