Poddotazy SQL

Dôležité : Tento článok je strojovo preložený, prečítajte si vyhlásenie. Anglickú verziu tohto článku nájdete tu a môžete ju použiť ako 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.



Poznámka : Vyhlásenie týkajúce sa strojového prekladu: Tento článok bol preložený počítačovým systémom bez zásahu človeka. Poskytovaním týchto strojových prekladov umožňuje spoločnosť Microsoft aj používateľom, ktorí nehovoria po anglicky, využívať obsah o produktoch, službách a technológiách spoločnosti Microsoft. Článok bol preložený strojovo, môže preto obsahovať chyby týkajúce sa slovnej zásoby, syntaxe alebo gramatiky.

Rozšírte svoje zručnosti
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.

×