Prihláste sa s kontom Microsoft
Prihláste sa alebo si vytvorte konto.
Dobrý deň,
Vyberte iné konto.
Máte viacero kont
Vyberte konto, s ktorým sa chcete prihlásiť.

Niekedy možno budete chcieť použiť výsledky dotazu ako pole v inom dotaze alebo ako kritérium pre pole dotazu. Predpokladajme napríklad, že chcete zobraziť interval medzi objednávkami pre každý produkt. Ak chcete vytvoriť dotaz zobrazujúci tento interval, musíte porovnať každý dátum objednávky s ostatnými dátumami objednávok pre daný produkt. Na porovnanie týchto dátumov objednávok sa vyžaduje aj dotaz. Tento dotaz môžete vnoriť do hlavného dotazu pomocou poddotaz.

Poddotaz môžete napísať v výraz alebo v príkaze jazyk SQL (Structured Query Language) (SQL) v zobrazenie SQL.

Obsah tohto článku

Použitie výsledkov dotazu ako poľa v inom dotaze

Poddotaz môžete použiť ako alias poľa. Ak chcete použiť výsledky poddotazu ako pole v hlavnom dotaze, použite poddotaz ako alias poľa.

Poznámka: Poddotaz, ktorý používate ako alias poľa, nemôže vrátiť viac ako jedno pole.

Alias poľa poddotazu môžete použiť na zobrazenie hodnôt, ktoré závisia od iných hodnôt v aktuálnom riadku, čo nie je možné bez použitia poddotazu.

Vráťme sa napríklad k príkladu, v ktorom chcete vidieť interval medzi objednávkami pre každý z vašich produktov. Ak chcete určiť tento interval, musíte porovnať každý dátum objednávky s ostatnými dátumami objednávok pre daný produkt. Pomocou šablóny databázy Northwind môžete vytvoriť dotaz, ktorý tieto informácie zobrazí.

  1. Na karte Súbor kliknite na položku Nový.

  2. V časti Dostupné šablóny kliknite na položku Vzorové šablóny.

  3. Kliknite na položku Northwind a potom na položku Vytvoriť.

  4. Postupujte podľa pokynov na strane Northwind Traders (na karte objektu Úvodná obrazovka) a otvorte databázu. Potom zatvorte dialógové okno prihlásenia.

  5. Na karte Vytvoriť kliknite v skupine Dotazy na položku Návrh dotazu.

  6. Kliknite na kartu Dotazy a potom dvakrát kliknite na položku Objednávky produktov.

  7. Dvakrát kliknite na pole ID produktu a pole Dátum objednávky a pridajte ich do mriežky návrhu dotazu.

  8. V riadku Zoradiť v stĺpci ID produktu v mriežke vyberte položku Vzostupne.

  9. V riadku Zoradiť v stĺpci Dátum objednávky mriežky vyberte možnosť Zostupne.

  10. V treťom stĺpci mriežky kliknite pravým tlačidlom myši na riadok Pole a potom v kontextovej ponuke kliknite na položku Lupa .

  11. V dialógovom okne Lupa zadajte alebo prilepte nasledujúci 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. Pre každý riadok poddotaz vyberie najnovší dátum objednávky, ktorý je menej nedávny ako dátum objednávky, ktorý je už priradený k riadku. Všimnite si, ako pomocou kľúčového slova AS vytvoríte alias tabuľky, aby ste mohli porovnať hodnoty v poddotazi s hodnotami v aktuálnom riadku hlavného dotazu.

  12. Do štvrtého stĺpca mriežky zadajte do riadka Pole nasledujúci výraz:

    Interval: [Order Date]-[Prior Date]

    Tento výraz vypočíta interval medzi každým dátumom objednávky a dátumom predchádzajúcej objednávky pre tento produkt pomocou hodnoty pre predchádzajúci dátum, ktorý sme definovali pomocou poddotazu.

  13. Prejdite na kartu Návrh a v skupine Výsledky kliknite na položku Spustiť.

    1. Dotaz sa spustí a zobrazí zoznam názvov produktov, dátumov objednávok, predchádzajúcich dátumov objednávok a intervalu medzi dátumami objednávok. Výsledky sú zoradené najprv podľa ID produktu (vo vzostupnom poradí) a potom podľa dátumu objednávky (v zostupnom poradí).

    2. Poznámka: Keďže ID produktu je vyhľadávacie pole, Access predvolene zobrazuje vyhľadávacie hodnoty (v tomto prípade názov produktu) a nie skutočné ID produktov. Napriek tomu, že sa zmenia zobrazené hodnoty, poradie zoradenia sa nezmení.

  14. Zavrite databázu Northwind.

Na začiatok stránky

Použitie poddotazu ako kritéria pre pole dotazu

Poddotaz môžete použiť ako kritérium poľa. Poddotaz použite ako kritérium poľa, ak chcete použiť výsledky poddotazu na obmedzenie hodnôt, ktoré sa zobrazia v poli.

Predpokladajme napríklad, že chcete skontrolovať zoznam objednávok, ktoré spracovali zamestnanci, ktorí nie sú obchodnými zástupcami. Ak chcete vygenerovať tento zoznam, musíte porovnať ID zamestnanca pre každú objednávku so zoznamom ID zamestnancov pre zamestnancov, ktorí nie sú obchodnými zástupcami. Ak chcete vytvoriť tento zoznam a použiť ho ako kritérium poľa, použite poddotaz, ako je to znázornené v nasledujúcom postupe:

  1. Otvorte súbor Northwind.accdb a povoľte jeho obsah.

  2. Zavrite prihlasovací formulár.

  3. Prejdite na kartu Vytvoriť a v skupine Ďalšie kliknite na položku Návrh dotazu.

  4. Na karte Tabuľky dvakrát kliknite na položky Objednávky a Zamestnanci.

  5. V tabuľke Objednávky dvakrát kliknite na pole IDENTIFIKÁCIA zamestnanca , pole ID objednávky a pole Dátum objednávky a pridajte ich do mriežky návrhu dotazu. V tabuľke Zamestnanci dvakrát kliknite na pole Názov úlohy a pridajte ho do mriežky návrhu.

  6. Kliknite pravým tlačidlom myši na riadok Kritériá v stĺpci ID zamestnanca a potom v kontextovej ponuke kliknite na položku Lupa .

  7. Do poľa Lupa zadajte alebo prilepte nasledujúci výraz:

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

    Toto je poddotaz. Vyberie všetky IDENTIFIKÁCIE zamestnancov, v ktorých zamestnanec nemá pracovnú pozíciu obchodného zástupcu, a poskytne tento výsledok do hlavného dotazu. Hlavný dotaz potom skontroluje, či identifikácie zamestnancov z tabuľky Objednávky sú v množine výsledkov.

  8. Prejdite na kartu Návrh a v skupine Výsledky kliknite na položku Spustiť.

    Spustí sa dotaz a vo výsledkoch dotazu sa zobrazí zoznam objednávok spracovaných zamestnancami, ktorí nie sú obchodnými zástupcami.

Na začiatok stránky

Bežné kľúčové slová SQL, ktoré môžete použiť s poddotazom

Existuje niekoľko kľúčových slov SQL, ktoré môžete použiť s poddotazom:

Poznámka: Tento zoznam nie je úplný. V poddotazi môžete použiť ľubovoľné platné kľúčové slovo SQL okrem kľúčových slov definujúcich údaje.

  • VŠETKY    Pomocou funkcie ALL v klauzule WHERE načítajte riadky, ktoré spĺňajú podmienku v porovnaní s každým riadkom vráteným poddotazom.

    Predpokladajme napríklad, že analyzujete údaje o študentoch na vysokej škole. Študenti musia zachovať minimálnu GPA, ktorá sa líši od hlavnej po hlavnú. Majors a ich minimálne GPA sú uložené v tabuľke s názvom Majors a príslušné informácie o študentoch sú uložené v tabuľke s názvom Student_Records.

    Ak chcete zobraziť zoznam veľkých spoločností (a ich minimálne gpa), pre ktoré každý študent s týmto hlavným presahuje minimálnu GPA, môžete použiť nasledujúci dotaz:

    SELECT [Major], [Min_GPA] 
    FROM [Majors]
    WHERE [Min_GPA] < ALL
    (SELECT [GPA] FROM [Student_Records]
    WHERE [Student_Records].[Major]=[Majors].[Major]);
  • ŽIADNE    Príkaz ANY v klauzule WHERE sa používa na načítanie riadkov, ktoré spĺňajú podmienku v porovnaní s aspoň jedným z riadkov vrátených poddotazom.

    Predpokladajme napríklad, že analyzujete údaje o študentoch na vysokej škole. Študenti musia zachovať minimálnu GPA, ktorá sa líši od hlavnej po hlavnú. Majors a ich minimálne GPA sú uložené v tabuľke s názvom Majors a príslušné informácie o študentoch sú uložené v tabuľke s názvom Student_Records.

    Ak chcete zobraziť zoznam veľkých spoločností (a ich minimálne gpa), pre ktoré každý študent s týmto hlavným nespĺňa minimálne GPA, môžete použiť nasledujúci dotaz:

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

    Poznámka: Na rovnaký účel môžete použiť aj kľúčové slovo SOME. Kľúčové slovo SOME je synonymom funkcie ANY.

  • EXISTS     Klauzula EXISTS v klauzule WHERE označuje, že poddotaz by mal vrátiť aspoň jeden riadok. Ak chcete označiť, že poddotaz by nemal vracať žiadne riadky, môžete uviesť predponu EXISTS s NOT.

    Nasledujúci dotaz napríklad vráti zoznam produktov, ktoré sa nachádzajú aspoň v jednom existujúcom poradí:

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

    Pomocou funkcie NOT EXISTS dotaz vráti zoznam produktov, ktoré sa nenašli aspoň v jednom existujúcom poradí:

    SELECT *
    FROM [Products]
    WHERE NOT EXISTS
    (SELECT * FROM [Order Details]
    WHERE [Order Details].[Product ID]=[Products].[ID]);
  • PALCOV    Pomocou funkcie IN v klauzule WHERE overte, či je hodnota v aktuálnom riadku hlavného dotazu súčasťou množiny, ktorú vráti poddotaz. Ak chcete overiť, či hodnota v aktuálnom riadku hlavného dotazu nie je súčasťou množiny, ktorú vráti poddotaz, môžete tiež použiť funkciu IN s hodnotou NOT.

    Nasledujúci dotaz napríklad vráti zoznam objednávok (s dátumami objednávok), ktoré spracovali zamestnanci, ktorí nie sú obchodnými zástupcami:

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

    Pomocou funkcie NOT IN môžete rovnaký dotaz napísať takto:

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

Na začiatok stránky

Potrebujete ďalšiu pomoc?

Chcete ďalšie možnosti?

Môžete preskúmať výhody predplatného, prehľadávať školiace kurzy, naučiť sa zabezpečiť svoje zariadenie a ešte oveľa viac.

Komunity pomôžu s kladením otázok a odpovedaním na ne, s poskytovaním pripomienok a so získavaním informácií od odborníkov s bohatými znalosťami.

Boli tieto informácie užitočné?

Aká je podľa vás jazyková kvalita textu?
Čo sa vám páčilo, prípadne čo nie?
Stlačením tlačidla Odoslať sa vaše pripomienky použijú na zlepšenie produktov a služieb spoločnosti Microsoft. Váš správca IT bude môcť tieto údaje zhromažďovať. Vyhlásenie o ochrane osobných údajov.

Ďakujeme za vaše pripomienky!

×