Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Někdy můžete chtít použít výsledky dotazu jako pole v jiném dotazu nebo jako kritérium pro pole dotazu. Předpokládejme například, že chcete zobrazit interval mezi objednávkami jednotlivých produktů. Pokud chcete vytvořit dotaz, který zobrazuje tento interval, musíte porovnat každé datum objednávky s jinými daty objednávek pro daný produkt. Porovnání těchto dat objednávek také vyžaduje dotaz. Tento dotaz můžete vnořit do hlavního dotazu pomocí Poddotaz.

Poddotaz můžete napsat v Výraz nebo v příkazu jazyk SQL (Structured Query Language) (SQL) v Zobrazení SQL.

V tomto článku

Použití výsledků dotazu jako pole v jiném dotazu

Poddotaz můžete použít jako alias pole. Poddotaz použijte jako alias pole, pokud chcete výsledky poddotazů použít jako pole v hlavním dotazu.

Poznámka: Poddotaz, který použijete jako alias pole, nemůže vrátit více než jedno pole.

Alias pole poddotazů můžete použít k zobrazení hodnot, které závisí na jiných hodnotách v aktuálním řádku, což není možné bez použití poddotazů.

Vraťme se například k příkladu, kde chcete zobrazit interval mezi objednávkami jednotlivých produktů. Pokud chcete tento interval určit, musíte porovnat každé datum objednávky s jinými daty objednávek pro daný produkt. Pomocí šablony databáze Northwind můžete vytvořit dotaz, který zobrazí tyto informace.

  1. Na kartě Soubor klikněte na Nový.

  2. V části Dostupné šablony klikněte na Ukázkové šablony.

  3. Klikněte na Northwind a potom na Vytvořit.

  4. Podle pokynů na stránce Northwind Traders (na kartě objektu Úvodní obrazovka) otevřete databázi a potom zavřete přihlašovací dialogové okno.

  5. Na kartě Vytvoření klikněte ve skupině Dotazů na tlačítko Návrh dotazu.

  6. Klikněte na kartu Dotazy a potom poklikejte na Položku Objednávky produktů.

  7. Poklikejte na pole Id produktu a na pole Datum objednávky a přidejte je do návrhové mřížky dotazu.

  8. V řádku Seřadit ve sloupci ID produktu v mřížce vyberte Vzestupně.

  9. Na řádku Seřadit ve sloupci Datum objednávky v mřížce vyberte Sestupně.

  10. Ve třetím sloupci mřížky klikněte pravým tlačítkem myši na řádek Pole a potom v místní nabídce klikněte na Lupa .

  11. V dialogovém okně Lupa zadejte nebo vložte následující výraz:

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

    Tento výraz je poddotaz. Pro každý řádek vybere poddotaz poslední datum objednávky, které je méně nedávné než datum objednávky, které je již přidružené k danému řádku. Všimněte si, jak pomocí klíčového slova AS vytvořit alias tabulky, abyste mohli porovnat hodnoty v poddotazu s hodnotami v aktuálním řádku hlavního dotazu.

  12. Do čtvrtého sloupce mřížky zadejte do řádku Pole následující výraz:

    Interval: [Order Date]-[Prior Date]

    Tento výraz vypočítá interval mezi každým datem objednávky a datem předchozí objednávky pro daný produkt pomocí hodnoty předchozího data, kterou jsme definovali pomocí poddotazu.

  13. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

    1. Dotaz se spustí a zobrazí seznam názvů produktů, data objednávek, předchozí data objednávek a interval mezi daty objednávek. Výsledky jsou seřazeny nejprve podle ID produktu (ve vzestupném pořadí) a potom podle data objednávky (v sestupném pořadí).

    2. Poznámka: Vzhledem k tomu, že ID produktu je vyhledávací pole, Access ve výchozím nastavení zobrazuje vyhledávací hodnoty (v tomto případě název produktu) místo skutečných ID produktů. I když se tím změní zobrazené hodnoty, nezmění se pořadí řazení.

  14. Zavřete databázi Northwind.

Začátek stránky

Použití poddotazu jako kritéria pro pole dotazu

Jako kritérium pole můžete použít poddotaz. Poddotaz použijte jako kritérium pole, pokud chcete použít výsledky poddotazu k omezení hodnot zobrazených v poli.

Předpokládejme například, že chcete zkontrolovat seznam objednávek zpracovaných zaměstnanci, kteří nejsou prodejními zástupci. Pokud chcete tento seznam vygenerovat, musíte porovnat ID zaměstnance pro každou objednávku se seznamem ID zaměstnanců pro zaměstnance, kteří nejsou prodejními zástupci. Pokud chcete vytvořit tento seznam a použít ho jako kritérium pole, použijte poddotaz, jak je znázorněno v následujícím postupu:

  1. Otevřete Soubor Northwind.accdb a povolte jeho obsah.

  2. Zavřete formulář pro přihlášení.

  3. Na kartě Vytvoření klikněte ve skupině Dotazy na Návrh dotazu.

  4. Na kartě Tabulky poklikejte na Objednávky a zaměstnanci.

  5. V tabulce Objednávky poklikejte na pole ID zaměstnance , pole ID objednávky a pole Datum objednávky a přidejte je do návrhové mřížky dotazu. V tabulce Zaměstnanci poklikejte na pole Pracovní pozice a přidejte ho do návrhové mřížky.

  6. Klikněte pravým tlačítkem myši na řádek Kritéria ve sloupci ID zaměstnance a potom v místní nabídce klikněte na Příkaz Lupa .

  7. Do pole Lupa zadejte nebo vložte následující výraz:

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

    Toto je poddotaz. Vybere všechna ID zaměstnanců, u kterých zaměstnanec nemá pracovní pozici Obchodní zástupce, a poskytne výsledek nastavený na hlavní dotaz. Hlavní dotaz pak zkontroluje, jestli jsou ID zaměstnanců z tabulky Objednávky v sadě výsledků.

  8. Na kartě Návrh klikněte ve skupině Výsledky na tlačítko Spustit.

    Dotaz se spustí a ve výsledcích dotazu se zobrazí seznam objednávek zpracovaných zaměstnanci, kteří nejsou prodejními zástupci.

Začátek stránky

Běžná klíčová slova SQL, která můžete použít s poddotazem

Existuje několik klíčových slov SQL, která můžete použít s poddotazem:

Poznámka: Tento seznam není vyčerpávající. V poddotazu můžete použít libovolné platné klíčové slovo SQL s výjimkou klíčových slov definice dat.

  • VŠECHNY    Příkaz ALL v klauzuli WHERE použijte k načtení řádků, které splňují podmínku v porovnání s každým řádkem vráceným poddotazem.

    Předpokládejme například, že analyzujete data studentů na vysoké škole. Studenti musí dodržovat minimální GPA, který se liší od hlavního k hlavnímu. Hlavní obory a jejich minimální počet gpa jsou uloženy v tabulce s názvem Hlavní obory a příslušné informace o studentech jsou uložené v tabulce s názvem Student_Records.

    Pokud chcete zobrazit seznam hlavních studijních objektů (a jejich minimálních gpa), pro které každý student s tímto oborem překročí minimální gpa, můžete použít následující dotaz:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Pomocí příkazu ANY v klauzuli WHERE můžete načíst řádky, které splňují podmínku v porovnání alespoň s jedním z řádků vrácených poddotazem.

    Předpokládejme například, že analyzujete data studentů na vysoké škole. Studenti musí dodržovat minimální GPA, který se liší od hlavního k hlavnímu. Hlavní obory a jejich minimální počet gpa jsou uloženy v tabulce s názvem Hlavní obory a příslušné informace o studentech jsou uložené v tabulce s názvem Student_Records.

    Pokud chcete zobrazit seznam hlavních objektů (a jejich minimálních gpa), pro které žádný student s tímto oborem nesplňuje minimální gpa, můžete použít následující dotaz:

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

    Poznámka: Ke stejnému účelu můžete také použít klíčové slovo SOME; klíčové slovo SOME je synonymum pro ANY.

  • EXISTS     Pomocí funkce EXISTS v klauzuli WHERE označte, že poddotaz by měl vrátit alespoň jeden řádek. Můžete také předcházet exists s NOT, což znamená, že poddotaz by neměl vracet žádné řádky.

    Například následující dotaz vrátí seznam produktů, které se nacházejí alespoň v jednom existujícím pořadí:

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

    Při použití příkazu NOT EXISTS vrátí dotaz seznam produktů, které nebyly nalezeny alespoň v jedné existující objednávce:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    Pomocí in v klauzuli WHERE ověřte, že hodnota v aktuálním řádku hlavního dotazu je součástí sady, kterou vrací poddotaz. Před in můžete také použít funkci NOT, abyste ověřili, že hodnota v aktuálním řádku hlavního dotazu není součástí sady, kterou vrací poddotaz.

    Například následující dotaz vrátí seznam objednávek (s daty objednávek), které byly zpracovány zaměstnanci, kteří nejsou prodejními zástupci:

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

    Pomocí funkce NOT IN byste mohli napsat stejný dotaz tímto způsobem:

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

Začátek stránky

Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

Děkujeme vám za zpětnou vazbu.

×