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

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 <token>TE000126768</token>.

Do napisania podkwerendy można użyć <token>TE000127167</token> lub instrukcji SQL (Structured Query Language) w <token>TE000126761</token>.

W tym artykule

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm1">Używanie wyników kwerendy jako pola w innej kwerendzie</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm2">Używanie podkwerendy jako kryterium dla pola kwerendy</link>

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#bm3">Typowe słowa kluczowe SQL używane w podkwerendach</link>

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

Podkwerendę można zastosować jako alias pola. Podkwerenda może zostać użyta jako alias pola w celu użycia wyników podkwerendy jako pola w kwerendzie głównej.

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.

  1. Na karcie <ui>Plik</ui> kliknij pozycję <ui>Nowe</ui>.

  2. W obszarze <ui>Dostępne szablony</ui> kliknij pozycję <ui>Przykładowe szablony</ui>.

  3. Kliknij pozycję <ui>Northwind</ui>, a następnie kliknij przycisk <ui>Utwórz</ui>.

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

  5. Na karcie <ui>Tworzenie</ui> w grupie <ui>Kwerendy</ui> kliknij pozycję <ui>Projekt kwerendy</ui>.

  6. W oknie dialogowym <ui>Pokazywanie tabeli</ui> kliknij kartę <ui>Kwerendy</ui>, a następnie kliknij dwukrotnie kwerendę <ui>Zamówienia produktu</ui>.

  7. Zamknij okno dialogowe <ui>Pokazywanie tabeli</ui>.

  8. Kliknij dwukrotnie pole <ui>ID produktu</ui> oraz pole <ui>Data zamówienia</ui>, aby je dodać do siatki projektu kwerendy.

  9. W wierszu <ui>Sortuj</ui> kolumny <ui>ID produktu</ui> siatki zaznacz opcję <ui>Rosnąco</ui>.

  10. W wierszu <ui>Sortuj</ui> kolumny <ui>Data zamówienia</ui> siatki zaznacz opcję <ui>Malejąco</ui>.

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

  12. W oknie dialogowym <ui>Powiększenie</ui> 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.

  13. W czwartej kolumnie siatki w wierszu <ui>Pole</ui> wpisz następujące wyrażenie:

    <codeInline>Interval: [Order Date]-[Prior Date]</codeInline>

    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.<br />

  14. Na karcie <ui>Projektowanie</ui> w grupie <ui>Wyniki</ui> kliknij przycisk <ui>Uruchom</ui>.

    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.

  15. Zamknij bazę danych Northwind.

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Początek strony</link>

Używanie podkwerendy jako kryterium dla pola kwerendy

Istnieje możliwość użycia podkwerendy jako kryterium pola. Podkwerenda może zostać zastosowana jako kryterium pola w celu użycia wyników podkwerendy do ograniczenia wartości wyświetlanych w polu.

Załóżmy na przykład, że użytkownik chce przejrzeć listę zamówień zrealizowanych przez pracowników, którzy <legacyItalic>nie</legacyItalic> 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 bazę danych Northwind.accdb i włącz jej zawartość.

  2. Zamknij formularz logowania.

  3. Na karcie <ui>Tworzenie</ui> w grupie <ui>Inne</ui> kliknij polecenie <ui>Projekt kwerendy</ui>.

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

  5. Zamknij okno dialogowe <ui>Pokazywanie tabeli</ui>.

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

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

  8. W oknie <ui>Powiększenie</ui> 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 <ui>Projektowanie</ui> w grupie <ui>Wyniki</ui> kliknij przycisk <ui>Uruchom</ui>.

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

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Początek strony</link>

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.

  • <embeddedLabel>ALL</embeddedLabel> 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]);
  • <embeddedLabel>ANY</embeddedLabel> 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.

  • <embeddedLabel>EXISTS</embeddedLabel> 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]);
  • <embeddedLabel>IN</embeddedLabel> 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');

<link xlink:href="a8532322-e42f-4f94-bc38-ace7c182916a#__top">Początek strony</link>

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.

×