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

Ważne : Ten artykuł został przetłumaczony maszynowo, zobacz zastrzeżenie. Angielskojęzyczną wersję tego artykułu można znaleźć tutaj .

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

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 służy do wyświetlenia wartości zależnych od innych wartości w bieżącym wierszu, co nie jest możliwe bez użycia podkwerendy. Na przykład Pozwól nam powróć do przykładu miejsce, w którym mają być wyświetlane interwał między zamówień dla wszystkich produktów. Aby określić ten interwał, musisz porównanie poszczególnych Data zamówienia, aby inne dat zamówień dla tego produktu. Możesz utworzyć kwerendę, która zawiera te informacje za pomocą szablonu bazę danych Northwind 2007.

Pokaż, jak skonfigurować bazę danych Northwind 2007

  1. Kliknij przycisk Microsoft Office Obraz przycisku pakietu Office , a następnie kliknij polecenie Nowy.

  2. W lewym okienku w obszarze Kategorie szablonów kliknij przycisk Szablony lokalne.

  3. W obszarze Szablony lokalne kliknij pozycję Northwind 2007, 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 Inne kliknij przycisk 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.

  9. 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.

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

    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

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 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 plik Northwind 2007.accdb i włącz jego zawartość.

  2. Zamknij formularz logowania.

  3. Na karcie Tworzenie w grupie Inne kliknij przycisk 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 ID pracownika, pole ID 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 ID 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

Uwaga : Zrzeczenie dotyczące tłumaczenia maszynowego: Ten artykuł został przetłumaczony przez system komputerowy bez interwencji człowieka. Firma Microsoft udostępnia te tłumaczenia maszynowe, aby ułatwić użytkownikom, którzy nie znają języka angielskiego, korzystanie z zawartości dotyczącej produktów, usług i technologii firmy Microsoft. Ponieważ ten artykuł został przetłumaczony maszynowo, może zawierać błędy w słownictwie, składniowe lub gramatyczne.

Rozwijaj swoje umiejętności
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.

×