Přihlásit se pomocí účtu Microsoft
Přihlaste se nebo si vytvořte účet.
Dobrý den,
Vyberte jiný účet.
Máte více účtů.
Zvolte účet, pomocí kterého se chcete přihlásit.

Poddotaz je příkaz SELECT vnořený do objektu SELECT, SELECT... INTO, INSERT... PŘÍKAZ INTO, DELETE nebo UPDATE nebo uvnitř jiného poddotazu.

Syntaxe

K vytvoření poddotazu můžete použít tři formy syntaxe:

porovnání [ANY | ALL | SOME] (sqlstatement)

expression [NOT] IN (sqlstatement)

[NE] EXISTS (sqlstatement)

Poddotaz má tyto čá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, pro který se hledá sada výsledků poddotazu.

sqlstatement

Příkaz SELECT, který má stejný formát a pravidla jako jakýkoli jiný příkaz SELECT. Musí být uzavřen v závorkách.


Poznámky

Poddotaz můžete použít místo výrazu v seznamu polí příkazu SELECT nebo v klauzuli WHERE nebo HAVING. V poddotazu použijete příkaz SELECT k zadání sady jedné nebo více konkrétních hodnot, které se mají vyhodnotit ve výrazu klauzule WHERE nebo HAVING.

K načtení záznamů v hlavním dotazu, které vyhovují porovnání se všemi záznamy načtenými v poddotazu, použijte predikát ANY nebo SOME, které jsou synonymní. Následující příklad vrátí všechny produkty, jejichž jednotková cena je vyšší než cena jakéhokoli produktu prodaného se slevou 25 procent nebo vyšší:

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

Predikát ALL použijte k načtení pouze těch záznamů v hlavním dotazu, které splňují porovnání se všemi záznamy načtenými v poddotazu. Pokud jste v předchozím příkladu změnili hodnotu ANY na ALL, dotaz by vrátil pouze produkty, jejichž jednotková cena je vyšší než cena všech produktů prodaných se slevou 25 procent nebo vyšší. To je mnohem restriktivnější.

Predikát IN použijte k načtení pouze těch záznamů v hlavním dotazu, pro které některý záznam v poddotazu obsahuje stejnou hodnotu. Následující příklad vrátí všechny produkty se slevou 25 procent nebo vyšší:

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

Naopak funkci NOT IN můžete použít k načtení pouze těch záznamů v hlavním dotazu, pro které žádný záznam v poddotazu neobsahuje stejnou hodnotu.

Pomocí predikátu EXISTS (s volitelným slovem NOT reserved) v porovnání pravda/nepravda určete, jestli poddotaz vrací nějaké záznamy.

Aliasy názvů tabulek můžete také použít v poddotazu k odkazování na tabulky uvedené v klauzuli FROM mimo poddotaz. Následující příklad vrátí jména zaměstnanců, jejichž platy jsou stejné nebo vyšší než průměrná mzda všech zaměstnanců se stejnou pracovní pozici. V tabulce Employees (Zaměstnanci) je přiřazen 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ý.

Některé poddotazy jsou v křížových dotazech povolené – konkrétně jako predikáty (ty v klauzuli WHERE). Poddotazy jako výstup (ty v seznamu SELECT) nejsou v křížových dotazech povolené.



Potřebujete další pomoc?

Chcete další možnosti?

Prozkoumejte výhody předplatného, projděte si školicí kurzy, zjistěte, jak zabezpečit své zařízení a mnohem více.

Komunity vám pomohou klást otázky a odpovídat na ně, poskytovat zpětnou vazbu a vyslechnout odborníky s bohatými znalostmi.

Byly tyto informace užitečné?

Jak jste spokojeni s kvalitou jazyka?
Co ovlivnilo váš názor?
Po stisknutí tlačítka pro odeslání se vaše zpětná vazba použije k vylepšování produktů a služeb Microsoftu. Váš správce IT bude moci tato data shromažďovat. Prohlášení o zásadách ochrany osobních údajů.

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

×