Poddotazy jazyka SQL

Důležité informace:  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.

Poddotaz je příkaz SELECT vložený v příkazu SELECT, SELECT...INTO, INSERT...INTO, DELETE nebo UPDATE nebo uvnitř jiného poddotazu.

Syntaxe

Poddotaz je možné vytvořit pomocí tří tvarů syntaxe:

porovnání [ANY | ALL | SOME] (příkaz_sql)

výraz [NOT] IN (příkaz_sql)

[NOT] EXISTS (příkaz_sql)

Poddotaz má následující části:

Část

Popis

porovnání

Výraz a operátor porovnání, který porovnává výraz s výsledky poddotazu.

výraz

Výraz hledaný ve výsledné sadě poddotazu.

příkaz_sql

Příkaz SELECT, jehož formát a pravidla odpovídají ostatním příkazům SELECT. Příkaz musí být uzavřen v závorkách.


Poznámky

Poddotaz je možné použít namísto výrazu v seznamu polí příkazu SELECT nebo v klauzulích WHERE a HAVING. V takovém případě je příkaz SELECT použit k získání sady jedné nebo několika určitých hodnot použitých při vyhodnocení výrazu v klauzuli WHERE či HAVING.

Chcete-li v hlavním dotazu načíst záznamy vyhovující porovnání s libovolným záznamem získaným v poddotazu, použijte predikát ANY nebo SOME (predikáty jsou synonyma). V následujícím příkladu jsou vráceny všechny produkty, jejichž jednotková cena je větší než cena produktu prodaného se slevou 25 procent a vyšší:

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

Chcete-li v hlavním dotazu načíst záznamy vyhovující porovnání se všemi záznamy získanými v poddotazu, použijte predikát ALL. Pokud v předchozím příkladu zaměníte predikát ANY za predikát ALL, budou vráceny pouze produkty, jejichž jednotková cena je větší než cena všech produktů prodaných se slevou 25 procent a vyšší. Tento predikát je více omezující.

Chcete-li v hlavním dotazu načíst záznamy, pro něž mezi záznamy získanými v poddotazu existuje záznam obsahující stejné hodnoty, použijte predikát IN. V následujícím příkladu jsou vráceny všechny produkty se slevou 25 procent a vyšší:

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

Naopak můžete použít predikát NOT IN, chcete-li v hlavním dotazu načíst záznamy, pro něž mezi záznamy získanými v poddotazu neexistuje záznam obsahující stejné hodnoty.

Chcete-li v logických porovnáních určit, zda poddotaz vrátí nějaké záznamy, použijte predikát EXISTS (případně s nepovinným vyhrazeným slovem NOT).

Můžete také aliasy tabulky v poddotazu odkazující na tabulky uvedená v klauzuli FROM mimo poddotazu. Následující příklad vrátí názvy zaměstnanců, kteří mají platy jsou rovna nebo větší než průměrná platu všechny zaměstnance se stejným názvem projektu. Tabulka Zaměstnanci je dán 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;

V předchozím příkladu je Rezervované slovo AS nepovinné.

V křížové dotazy jsou povoleny poddotazy –, jako predikáty (použité v klauzuli WHERE). Poddotazy jako výstupu (uvedené v seznamu VYBERTE) nejsou povolené v křížové dotazy.



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.

×