Vnoření dotazu do jiného dotazu nebo výrazu pomocí poddotazu

Důležité :  Tento článek je strojově přeložený – přečtěte si toto upozornění. Anglickou verzi tohoto článku pro referenci najdete tady.

V některých případech může být vhodné použít výsledky dotazu jako pole v jiném dotazu nebo jako kritérium pole dotazu. Předpokládejme například, že chcete zjistit interval mezi objednávkami na jednotlivé výrobky. Abyste mohli vytvořit dotaz umožňující tento interval zjistit, bude nutné porovnat data jednotlivých objednávek s ostatními daty objednávek na daný výrobek. K porovnání těchto dat objednávek je také nutné použít dotaz. Tento dotaz můžete vnořit do svého hlavního dotazu pomocí Poddotaz.

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

V tomto článku

Použití výsledků dotazu jako pole pro jiný dotaz

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

Běžná klíčová slova SQL, která lze pro poddotazy používat

Použití výsledků dotazu jako pole pro jiný dotaz

Pokud chcete výsledky poddotazu použít jako pole v hlavním dotazu, můžete poddotaz použít jako alias pole.

Poznámka : Poddotaz, který použijete jako alias pole, může vrátit maximálně jedno pole.

Pomocí aliasu pole poddotazu můžete zobrazit hodnoty, které jsou závislé na jiných hodnotách v aktuálním řádku, což není možné bez použití poddotazu. Například dejte nám vrátíte příkladu místo, kam chcete zobrazit interval mezi objednávky pro jednotlivá pole svých produktů. Pokud chcete určit tento interval, budete muset porovnání datem každé objednávky pro ostatní data objednávky pro tento výrobek. Můžete vytvořit dotaz, který se zobrazí tyto informace pomocí šablony databáze Northwind 2007.

Ukázat nastavení databáze Northwind 2007

  1. Klepněte na Tlačítko Microsoft Office Obrázek tlačítka a potom klepněte na příkaz Nový.

  2. V levém podokně klepněte v části Kategorie šablon na položku Místní šablony.

  3. V části Místní šablony klepněte na položku Northwind 2007 a potom na možnost Vytvořit.

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

  1. Ve skupině Jiné na kartě Vytvořit klikněte na Návrh dotazu.

  2. V dialogovém okně Zobrazit tabulku klikněte na kartu Dotazy a potom dvakrát klikněte na možnost Objednávky výrobků.

  3. Zavřete dialogové okno Zobrazit tabulku.

  4. Dvojitým kliknutím přidejte pole Kód výrobku a Datum obj do návrhové mřížky dotazu.

  5. V řádku Řadit sloupce Kód výrobku mřížky vyberte možnost Vzestupně.

  6. V řádku Řadit sloupce Datum obj mřížky vyberte možnost Sestupně.

  7. 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 příkaz Lupa.

  8. 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 nejaktuálnější datum objednávky, které je starší než datum objednávky již přidružené k řádku. Všimněte si, jakým způsobem se pomocí klíčového slova AS vytváří alias tabulky, abyste mohli porovnávat hodnoty v poddotazu s hodnotami v aktuálním řádku hlavního dotazu.

  9. Ve čtvrtém sloupci mřížky zadejte do řádku Pole následující výraz:

Interval: [Order Date]-[Prior Date]

Tento výraz vypočítá interval mezi datem každé objednávky a předchozím datem objednávky pro daný výrobek pomocí hodnoty pro předchozí datum, která byla definována pomocí poddotazu.

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

    Dotaz je spuštěn a zobrazí seznam názvů výrobků, data objednávek, data předchozích objednávek a interval mezi daty objednávek. Výsledky jsou seřazeny nejprve podle kódu výrobku (ve vzestupném pořadí) a následně podle data objednávky (v sestupném pořadí).

    Poznámka : Vzhledem k tomu, že Kód výrobku je vyhledávací pole, zobrazí aplikace Access ve výchozím nastavení místo skutečných kódů výrobků vyhledávací hodnoty (v tomto případě název výrobku). Přestože se tím změní zobrazované hodnoty, nezmění se pořadí řazení.

  2. Zavřete databázi Northwind.

Začátek stránky

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

Poddotaz můžete použít jako kritérium pole, a to v případě, že chcete použít výsledky poddotazu k omezení hodnot, které se v daném poli zobrazí.

Předpokládejme například, že chcete zkontrolovat seznam objednávek zpracovaných zaměstnanci, kteří nejsou obchodní zástupci. Abyste mohli tento seznam vygenerovat, je nutné porovnat kód zaměstnance pro každou objednávku se seznamem kódů zaměstnanců, kteří nejsou obchodní zástupci. Budete-li chtít tento seznam vytvořit a použít jej jako kritérium pole, použijete poddotaz (jak je vidět z následujícího postupu):

  1. Otevřete databázi Northwind 2007.accdb a povolte její obsah.

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

  3. Ve skupině Jiné na kartě Vytvořit klikněte na Návrh dotazu.

  4. V dialogovém okně Zobrazit tabulku dvakrát klikněte na kartě Tabulky na položku Objednávky a Zaměstnanci.

  5. Zavřete dialogové okno Zobrazit tabulku.

  6. V tabulce Objednávky klikněte dvakrát na pole Kód, Kód objednávky a nakonec na pole Datum obj. Tím je přidáte do návrhové mřížky dotazu. Dvojitým kliknutím v tabulce Zaměstnanci přidejte do návrhové mřížky pole Funkce.

  7. Klikněte pravým tlačítkem na řádek Kritéria ve sloupci Kód a následně v místní nabídce klikněte na příkaz Lupa.

  8. V dialogovém okně 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šechny kódy zaměstnanců, kteří nemají funkci Obchodní zástupce, a předá tuto sadu výsledků dotazu do hlavního dotazu. Hlavní dotaz následně zkontroluje, zda výsledná sada dotazu obsahuje kódy zaměstnanců z tabulky Objednávky.

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

    Dotaz je spuštěn a ve výsledcích dotazu se zobrazí seznam objednávek zpracovaných zaměstnanci, kteří nejsou obchodní zástupci.

Začátek stránky

Běžná klíčová slova SQL, která lze pro poddotazy používat

S poddotazy lze používat několik klíčových slov SQL:

Poznámka : Nejde o vyčerpávající seznam. V poddotazech můžete používat všechna platná klíčová slova s výjimkou definičních klíčových slov.

  • ALL    Klíčové slovo ALL můžete použít v klauzuli WHERE k načtení řádků, které odpovídají podmínce při porovnání s každým řádkem vráceným poddotazem.

    Předpokládejme například, že byste analyzovali data studentů na vysoké škole. Studenti si musí udržovat minimální průměrné hodnocení (výsledek GPA), které se u jednotlivých oborů liší. Obory a jejich minimální průměrná hodnocení GPA jsou uloženy v tabulce s názvem Obory a relevantní informace o studentech v tabulce s názvem Záznamy_studentů.

    Pokud byste chtěli zobrazit seznam oborů (a jejich minimální průměrná hodnocení GPA), kde mají všichni studenti studující tento obor vyšší než minimální výsledek GPA, mohli byste 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    Klíčové slovo ANY lze použít klauzuli WHERE k načtení řádků odpovídajících podmínce při porovnání s minimálně jedním řádkem vráceným poddotazem.

    Předpokládejme například, že byste analyzovali data studentů na vysoké škole. Studenti si musí udržovat minimální průměrné hodnocení (výsledek GPA), které se u jednotlivých oborů liší. Obory a jejich minimální průměrná hodnocení GPA jsou uloženy v tabulce s názvem Obory a relevantní informace o studentech v tabulce s názvem Záznamy_studentů.

    Pokud byste chtěli zobrazit seznam oborů (a jejich minimální průměrná hodnocení GPA), kde některý student studující tento obor nedosahuje minimálního hodnocení GPA, mohli byste 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ým účelům můžete také použít klíčové slovo SOME. Jde o synonymum ke klíčovému slovu ANY.

  • EXISTS    Použitím klíčového slova EXISTS v klauzuli WHERE můžete uvést, že má poddotaz vrátit minimálně jeden řádek. Můžete před ním také uvést klíčové slovo NOT, které označuje, že by poddotaz neměl vrátit žádné řádky.

    Například následující dotaz vrátí seznam výrobků, které se nacházejí minimálně v jedné existující objednávce:

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

    Pokud použijete klíčová slova NOT EXISTS, vrátí dotaz seznam výrobků, které nebyly nalezeny ani 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í klíčového slova IN v klauzuli WHERE můžete ověřit, že je hodnota v aktuálním řádku hlavního dotazu součástí sady výsledků dotazu, kterou poddotaz vrací. Můžete před ním také použít klíčové slovo NOT. Tímto způsobem lze ověřit, že hodnota v aktuálním řádku hlavního dotazu není součástí sady výsledků dotazu, kterou vrací poddotaz.

    Například následující dotaz vrací seznam objednávek (s daty objednávek) zpracovaných 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í klíčového slova NOT IN byste však mohli stejný dotaz zapsat 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

Poznámka : Upozornění ke strojovému překladu: Tento článek přeložil počítačový systém bez zásahu člověka. Společnost Microsoft nabízí tyto strojové překlady proto, aby umožnila uživatelům, kteří nemluví anglicky, získat informace o produktech, službách a technologiích této společnosti. Protože je tento článek strojově přeložený, může obsahovat slovní, syntaktické nebo gramatické chyby.

Rozšiřte své znalosti a dovednosti
Projít školení
Získejte nové funkce jako první
Připojte se k účastníkům programu Office Insiders

Byly tyto informace užitečné?

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

Děkujeme vám za váš názor. Vypadá to, že bude užitečné, když vás spojíme s některým z našich agentů z podpory Office.

×