Poddotazy SQL

Poznámka:  Radi by sme vám čo najrýchlejšie poskytovali najaktuálnejší obsah Pomocníka vo vašom vlastnom jazyku. Táto stránka bola preložená automaticky a môže obsahovať gramatické chyby alebo nepresnosti. Naším cieľom je, aby bol tento obsah pre vás užitočný. Dali by ste nám v dolnej časti tejto stránky vedieť, či boli pre vás tieto informácie užitočné? Tu nájdete anglický článok pre jednoduchú referenciu.

Poddotaz je príkaz SELECT vnorený v príkaze SELECT, SELECT...INTO, INSERT...INTO, DELETE alebo v príkaze UPDATE alebo v inom poddotaze.

Syntax

Poddotaz možno vytvoriť pomocou syntaxe tromi spôsobmi:

porovnanie [ANY | ALL | SOME] (príkazsql)

výraz [NOT] IN (príkazsql)

[NOT] EXISTS (príkazsql)

Poddotaz má tieto časti:

Časť

Popis

porovnanie

výraz a operátor porovnávania, ktorý porovná výraz s výsledkami poddotazu.

výraz

Výraz, pre ktorý sa prehľadá množina výsledkov poddotazu.

príkazsql

Príkaz SELECT, ktorý má rovnaký formát a pravidlá ako všetky ostatné príkazy typu SELECT. Musí byť uzavretý v zátvorkách.


Poznámky

V zozname polí príkazu SELECT alebo v klauzule WHERE alebo HAVING možno namiesto výrazu použiť poddotaz. V poddotaze možno na poskytnutie množiny jednej alebo viacerých konkrétnych hodnôt na vyhodnotenie vo výraze klauzuly WHERE alebo HAVING použiť výraz SELECT.

Ak chcete, aby sa v hlavnom dotaze načítali záznamy, ktoré spĺňajú dané podmienky po porovnaní s viacerými záznamami načítanými v poddotaze, použite predikát ANY alebo SOME. Tieto predikáty sú synonymné. V nasledovnom príklade sú výsledkom všetky produkty, ktorých jednotková cena je vyššia ako cena produktov predávaných so zľavou 25 percent a viac:

SELECT * FROM Products WHERE UnitPrice > ANY (SELECT UnitPrice FROM OrderDetails WHERE Discount >= .25);

Predikát ALL použite na načítanie len tých záznamov z hlavného dotazu, ktoré spĺňajú dané podmienky po porovnaní so všetkými záznamami načítanými v poddotaze. Ak ste v predchádzajúcom príklade zmenili ANY na ALL, dotaz nájde len tie produkty, ktorých jednotková cena je vyššia ako cena všetkých produktov predávaných so zľavou 25 percent a viac. Toto predstavuje oveľa väčšie obmedzenie.

Predikát IN použite na načítanie len tých záznamov z hlavného dotazu, pre ktoré niektorý záznam poddotazu má hodnoty zhodné s hodnotou niektorého záznamu dotazu. V nasledujúcom príklade sú nájdeným výsledkom všetky produkty so zľavou 25 percent a viac:

SELECT * FROM Products WHERE ProductID IN (SELECT ProductID FROM OrderDetails WHERE Discount >= .25);

Naopak predikát NOT IN možno použiť na načítanie len tých záznamov z hlavného dotazu, pre ktoré nemá žiaden záznam poddotazu hodnoty zhodné s hodnotami niektorého záznamu dotazu.

Predikát EXISTS (v prípade potreby s rezervovaným slovom NOT) použite na zistenie, či poddotaz našiel nejaké záznamy.

Môžete použiť aj názov aliasov tabuliek v poddotaz odkazuje na tabuľky uvedené v klauzule FROM mimo poddotaz. Nasledujúci príklad vráti mená zamestnancov, ktorých platy sú rovnaké alebo väčšie ako priemernej mzdy všetkých zamestnancov s rovnakým názvom úlohy. Tabuľka zamestnanci je daný alias "T1":

SELECT LastName, FirstName, Title, Salary FROM Employees AS T1 WHERE Salary >= (SELECT Avg(Salary) FROM Employees WHERE T1.Title = Employees.Title) Order by Title;

vyhradené slovo AS v predchádzajúcom príklade je nepovinné.

Niektoré Poddotazy sú povolené v Krížové dotazy – špecificky, ako predikáty (tie v klauzule WHERE). Poddotazy ako výstup (tie v zozname vybrať) nie sú povolené v Krížové dotazy.



Rozšírte svoje zručnosti práce s balíkom Office
Preskúmať školenie
Buďte medzi prvými, ktorí získajú nové funkcie
Pridajte sa k insiderom pre Office

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

Ďakujeme za vaše pripomienky!

Ďakujeme vám za pripomienky. Pravdepodobne vám pomôže, ak vás spojíme s pracovníkom podpory pre Office.

×