Przejdź do głównej zawartości
Pomoc techniczna
Zaloguj się przy użyciu konta Microsoft
Zaloguj się lub utwórz konto.
Witaj,
Wybierz inne konto.
Masz wiele kont
Wybierz konto, za pomocą którego chcesz się zalogować.

Czasami może być konieczne użycie wyników zapytania jako pola w innym zapytaniu lub jako kryterium dla pola zapytania. Załóżmy na przykład, że chcesz wyświetlić interwał między zamówieniami dla każdego z produktów. Aby utworzyć zapytanie wyświetlające ten interwał, musisz porównać każdą datę zamówienia z innymi datami zamówień dla tego produktu. Porównanie tych dat zamówień wymaga również zapytania. To zapytanie można zagnieździć wewnątrz zapytania głównego przy użyciu podzapytanie.

Podzapytania można napisać w wyrażenie lub w instrukcji Structured Query Language (SQL) w widok SQL.

W tym artykule

Używanie wyników zapytania jako pola w innym zapytaniu

Możesz użyć podzapytania jako aliasu pola. Użyj podzapytania jako aliasu pola, jeśli chcesz użyć wyników podzapytania jako pola w zapytaniu głównym.

Uwaga: Podzapytanie używane jako alias pola nie może zwrócić więcej niż jednego pola.

Alias pola podzapytania umożliwia wyświetlanie wartości zależnych od innych wartości w bieżącym wierszu, co nie jest możliwe bez użycia podzapytania.

Na przykład wróćmy do przykładu, w którym chcesz zobaczyć interwał między zamówieniami każdego z Twoich produktów. Aby określić ten interwał, musisz porównać każdą datę zamówienia z innymi datami zamówień danego produktu. Możesz utworzyć zapytanie wyświetlające te informacje przy użyciu szablonu bazy danych Northwind.

  1. Na karcie Plik kliknij pozycję Nowy.

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

  3. Kliknij pozycję Northwind, a następnie kliknij pozycję 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.

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

  6. Kliknij kartę Zapytania , a następnie kliknij dwukrotnie pozycję Zamówienia produktów.

  7. Kliknij dwukrotnie pole Identyfikator produktu i pole Data zamówienia , aby dodać je do siatki projektu zapytania.

  8. W wierszu Sortuj w kolumnie Identyfikator produktu siatki wybierz pozycję Rosnąco.

  9. W wierszu Sortuj w kolumnie Data zamówienia siatki wybierz pozycję Malejąco.

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

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

    To wyrażenie jest podzapytaniem. Dla każdego wiersza podzapytanie wybiera najnowszą datę zamówienia, która jest niedawno używana niż data zamówienia, która jest już skojarzona z wierszem. Zwróć uwagę na to, jak za pomocą słowa kluczowego AS utworzyć alias tabeli, aby porównać wartości w podzapytaniu z wartościami w bieżącym wierszu zapytania głównego.

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

    Interval: [Order Date]-[Prior Date]

    To wyrażenie oblicza interwał między każdą datą zamówienia a poprzednią datą zamówienia dla tego produktu, używając wartości dla daty wcześniejszej zdefiniowanej przy użyciu podzapytania.

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

    1. Zapytanie zostanie uruchomione i wyświetli listę nazw produktów, dat zamówień, dat zamówień wcześniejszych oraz interwału między datami zamówienia. Wyniki są sortowane najpierw według identyfikatora produktu (w kolejności rosnącej), a następnie według daty zamówienia (w kolejności malejącej).

    2. Uwaga: Ponieważ identyfikator produktu jest polem odnośnika, program Access domyślnie wyświetla wartości odnośników (w tym przypadku nazwę produktu), a nie rzeczywiste identyfikatory produktów. Mimo że powoduje to zmianę wyświetlanych wartości, nie zmienia kolejności sortowania.

  14. Zamknij bazę danych Northwind.

Początek strony

Używanie podzapytania jako kryterium pola zapytania

Jako kryterium pola możesz użyć podzapytania. Użyj podzapytania jako kryterium pola, jeśli chcesz ograniczyć wartości wyświetlane w tym polu za pomocą wyników podzapytania.

Załóżmy na przykład, że chcesz przejrzeć listę zamówień, które zostały przetworzone przez pracowników, którzy nie są przedstawicielami handlowymi. Aby wygenerować tę listę, musisz porównać identyfikator pracownika dla każdego zamówienia z listą identyfikatorów pracowników dla pracowników, którzy nie są przedstawicielami handlowymi. Aby utworzyć tę listę i użyć jej jako kryterium pola, należy użyć podzapytania, jak pokazano w poniższej procedurze:

  1. Otwórz stronę Northwind.accdb i włącz jej zawartość.

  2. Zamknij formularz logowania.

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

  4. Na karcie Tabele kliknij dwukrotnie pozycję Zamówienia i Pracownicy.

  5. W tabeli Zamówienia kliknij dwukrotnie pole Identyfikator pracownika , pole Identyfikator zamówienia i pole Data zamówienia , aby dodać je do siatki projektu zapytania. W tabeli Pracownicy kliknij dwukrotnie pole Stanowisko , aby dodać je do siatki projektu.

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

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

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

    To jest podzapytanie. Wybiera ona wszystkie identyfikatory pracowników, dla których pracownik nie ma stanowiska przedstawiciela handlowego, i dostarcza wynik ustawiony na zapytanie główne. Następnie zapytanie główne sprawdza, czy identyfikatory pracowników z tabeli Zamówienia znajdują się w zestawie wyników.

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

    Zapytanie zostanie uruchomione, a w wynikach zapytania zostanie wyświetlona lista zamówień, które zostały przetworzone przez pracowników, którzy nie są przedstawicielami handlowymi.

Początek strony

Typowe słowa kluczowe JĘZYKA SQL, których można używać z podzapytaniem

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

Uwaga: Ta lista nie jest wyczerpująca. W podzapytaniu można użyć dowolnego prawidłowego słowa kluczowego SQL, z wyłączeniem słów kluczowych definicji danych.

  • WSZYSTKIE    Użyj funkcji ALL w klauzuli WHERE, aby pobrać wiersze spełniające warunek w porównaniu z każdym wierszem zwróconym przez podzapytania.

    Załóżmy na przykład, że analizujesz dane uczniów na uczelni. Uczniowie muszą utrzymać minimalny gpa, który różni się od głównych do głównych. Główne i ich minimalne zasady grupy są przechowywane w tabeli o nazwie Kierunek studiów, a odpowiednie informacje o uczniach są przechowywane w tabeli o nazwie Student_Records.

    Aby wyświetlić listę głównych firm (i ich minimalne zasady grupy), dla których każdy uczeń z tym studiem przekracza minimalny gpa, możesz użyć następującego zapytania:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • WSZELKI    Użyj instrukcji ANY w klauzuli WHERE, aby pobrać wiersze spełniające warunek w porównaniu z co najmniej jednym wierszem zwróconym przez podzapytania.

    Załóżmy na przykład, że analizujesz dane uczniów na uczelni. Uczniowie muszą utrzymać minimalny gpa, który różni się od głównych do głównych. Główne i ich minimalne zasady grupy są przechowywane w tabeli o nazwie Kierunek studiów, a odpowiednie informacje o uczniach są przechowywane w tabeli o nazwie Student_Records.

    Aby wyświetlić listę głównych firm (i ich minimalne zasady grupy), dla których każdy uczeń z tym kierunkiem nie spełnia minimalnego gpa, możesz użyć następującego zapytania:

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

    Uwaga: Możesz również użyć słowa kluczowego SOME do tego samego celu; słowo kluczowe NIEKTÓRE jest synonimem nazwy ANY.

  • EXISTS     Użyj funkcji EXISTS w klauzuli WHERE, aby wskazać, że podzapytanie powinno zwrócić co najmniej jeden wiersz. Można również poprzedzić funkcję CZY.NIE, aby wskazać, że podzapytanie nie powinno zwracać żadnych wierszy.

    Na przykład poniższe zapytanie zwraca listę produktów, które znajdują się w co najmniej jednym istniejącym zamówieniu:

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

    Używając funkcji NIE ISTNIEJE, zapytanie zwraca listę produktów, których nie znaleziono w co najmniej jednym istniejącym zamówieniu:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • CALA    Użyj funkcji IN w klauzuli WHERE, aby sprawdzić, czy wartość w bieżącym wierszu zapytania głównego jest częścią zestawu zwracanego przez podzapytania. Możesz również poprzedzić in not, aby sprawdzić, czy wartość w bieżącym wierszu zapytania głównego nie jest częścią zestawu zwracanego przez podzapytanie.

    Na przykład poniższe zapytanie zwraca listę zamówień (z datami zamówień), które zostały przetworzone przez pracowników, którzy nie są przedstawicielami sprzedaży:

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

    Używając funkcji NOT IN, możesz napisać to samo zapytanie w ten sposób:

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

Początek strony

Potrzebujesz dalszej pomocy?

Chcesz uzyskać więcej opcji?

Poznaj korzyści z subskrypcji, przeglądaj kursy szkoleniowe, dowiedz się, jak zabezpieczyć urządzenie i nie tylko.

Społeczności pomagają zadawać i odpowiadać na pytania, przekazywać opinie i słuchać ekspertów z bogatą wiedzą.

Czy te informacje były pomocne?

Jaka jest jakość języka?
Co wpłynęło na Twoje wrażenia?
Jeśli naciśniesz pozycję „Wyślij”, Twoja opinia zostanie użyta do ulepszania produktów i usług firmy Microsoft. Twój administrator IT będzie mógł gromadzić te dane. Oświadczenie o ochronie prywatności.

Dziękujemy za opinię!

×