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 výsledky dotazu použít 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 výrobků. Pokud chcete vytvořit dotaz, který tento interval zobrazuje, musíte porovnat data jednotlivých objednávek s jinými daty objednávek pro tento produkt. Porovnání těchto dat objednávek vyžaduje také dotaz. Tento dotaz můžete vnořit do hlavního dotazu pomocí Poddotaz.

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

V tomto článku

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

Jako alias pole můžete použít poddotaz. Poddotaz použijte jako alias pole, pokud chcete výsledky poddotazu 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 poddotazu můžete použít k zobrazení hodnot závislých na jiných hodnotách na aktuálním řádku, což není možné bez použití poddotazu.

Vraťte se třeba k příkladu, ve kterém chcete vidět interval mezi objednávkami jednotlivých produktů. Tento interval určíte tak, že porovnáváte data jednotlivých objednávek s jinými daty objednávek pro tento produkt. Pomocí šablony databáze Northwind můžete vytvořit dotaz, který tyto informace zobrazí.

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

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

  3. Klikněte na Northwind apotom na Create (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ě Dotazy na Návrh dotazu.

  6. Klikněte na kartu Dotazy a potom poklikejte na Objednávky výrobků.

  7. Poklikejte na pole Kód výrobku a Datum objednávky a přidejte je do návrhové mřížky dotazu.

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

  9. V řádku Seřadit ve sloupci Datum objednávky mřížky vyberte Sestupně.

  10. Ve třetím sloupci mřížky klikněte pravým tlačítkem myši na řádek pole a v místní nabídce klikněte na Příkaz 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 poddotaz vybere datum poslední objednávky, které je méně nedávné než datum objednávky, které je k řádku už přidružené. Všimněte si, jak pomocí klíčového slova AS vytvoříte alias tabulky, abyste mohli porovnat hodnoty v poddotazu s hodnotami v aktuálním řádku hlavního dotazu.

  12. Ve čtvrtém sloupci mřížky zadejte do řádku Pole tento výraz:

    Interval: [Order Date]-[Prior Date]

    Tento výraz vypočítá interval mezi datem každé objednávky a datem předchozí objednávky pro tento produkt pomocí hodnoty pro předchozí datum, které 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ů, dat objednávek, předchozích dat objednávek a intervalu mezi kalendářními daty objednávek. Výsledky jsou nejdřív seřazené podle ID výrobku (vzestupně) a potom podle data objednávky (v sestupném pořadí).

    2. Poznámka: Vzhledem k tomu, že kód výrobku je vyhledávací pole, Access standardně zobrazuje vyhledávací hodnoty (v tomto případě název produktu) a ne skutečná ID výrobků. I když se tím změní zobrazená hodnota, pořadí řazení se nezmění.

  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. Pokud chcete pomocí výsledků poddotazu omezit hodnoty, které se zobrazí, použijte jako kritérium pole poddotaz.

Předpokládejme například, že chcete zkontrolovat seznam objednávek zpracovaných zaměstnanci, kteří nejsou obchodní zástupci. Při vygenerování tohoto seznamu je potřeba porovnat ID zaměstnance pro každou objednávku se seznamem ID zaměstnanců pro zaměstnance, kteří nejsou obchodní zástupci. Chcete-li tento seznam vytvořit 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 Kód zaměstnance, pole Kód objednávky a pole Datum objednávky, abyste je mohli přidat do návrhové mřížky dotazu. V tabulce Zaměstnanci poklikejte na pole Funkce 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 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. Tato možnost vybere všechna ID zaměstnanců, pokud zaměstnanec nemá pracovní práci obchodního zástupce, a poskytuje tento výsledek nastavený na hlavní dotaz. Hlavní dotaz potom 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 výsledky dotazu zobrazí seznam objednávek, které zpracují zaměstnanci, kteří nejsou obchodní zástupci.

Začátek stránky

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

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

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

  • ALL    Funkce ALL v klauzuli WHERE načítá řádky, které vyhovují poddotazu, ve srovnání s každým řádkem vrácený poddotazem.

    Předpokládejme třeba, že analyzujete data studentů na vysoké škole. Studenti si musí udržovat minimální gpa, které se liší od hlavních po hlavní. Hlavní obory a jejich minimální gpas jsou uložené v tabulce s názvem Majors (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 položek (a jejich minimální GPA), pro které každý student s tímto hlavním oborem překračuje minimální GPA, můžete použít tento dotaz:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ANY    Funkce ANY v klauzuli WHERE načítá řádky, které vyhovují podnabídce v porovnání s aspoň jedním z řádků vrácených poddotazem.

    Předpokládejme třeba, že analyzujete data studentů na vysoké škole. Studenti si musí udržovat minimální gpa, které se liší od hlavních po hlavní. Hlavní obory a jejich minimální gpas jsou uložené v tabulce s názvem Majors (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 položek (a jejich minimální GPA), pro které jakýkoliv student s tímto oborem nesplňuje minimální gpa, můžete použít tento 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 použít také klíčové slovo SOME. Klíčové slovo SOME je synonymem pro ANY.

  • EXISTS     V klauzuli WHERE použijte možnost EXISTS k označení toho, že poddotaz by měl vrátit aspoň jeden řádek. Pokud chcete naznačit, že poddotaz by neměl vracet žádné řádky, můžete před možnost EXISTS použít ne.

    Následující dotaz například vrátí seznam výrobků, které jsou nalezeny v alespoň jedné stávající objednávce:

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

    Pomocí funkce NOT EXISTS vrátí dotaz seznam produktů, které nejsou nalezeny v alespoň jednom stávajícím pořadí:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • IN    V klauzuli WHERE ověřte, jestli je hodnota v aktuálním řádku hlavního dotazu součástí sady, která vrací poddotaz. Pokud chcete ověřit, jestli hodnota v aktuálním řádku hlavního dotazu není součástí sady, kterou vrací poddotaz, můžete před in použít příkaz NE.

    Následující dotaz například vrátí seznam objednávek (s daty objednávek), které zpracují zaměstnanci, kteří nejsou obchodní zástupci:

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

    Při použití funkce NE IN můžete stejný dotaz napsat takto:

    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?

Rozšiřte své znalosti a dovednosti

Projít školení >

Získejte nové funkce jako první

ZAPOJTE SE DO PROGRAMU MICROSOFT 365 INSIDER

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?

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

×