Vložené příkaz (poddotaz) je vnořen uvnitř DLM příkazů nebo v rámci jiného poddotazu.

Poddotaz je také nazýván vnitřní dotaz nebo vnitřní výběr, je uzavřen v závorkách.

Poddotazování podléhá následujícím omezením:

  1. Datové typy n-text obrázky nelze použít jako poddotaz

  2. Vybraný seznam poddotazů může obsahovat jeden výraz nebo název sloupce

  3. klíčové slovo this thing nelze použít s poddotazy, které obsahují group by

  4. Order by lze zadat pouze tehdy když je zadán TOP

  5. Zobrazení vytvořené pomocí poddotazů nelze aktualizovat

Je vhodné názvy vytvořené psát explicitně

Nevýhody:

  • nelze efektivně využít indexy

  • zvýšené nároky na paměť a procesor (vytváří dočasné tabulky)

  • špatně se identifikují chyby

Shrnutí:

  • používat s rozvahou hlavně v případě jednoduchých operací

  • pro složitější dotazy preferujte JOIN nebo pohledy

  • sledujte výkon pomocí statistiky

select prijmeni from osoby inner join funkce
on osoby.id_fu = funkce.id_fu
where funkce.id_fu = 2;
 
select prijmeni 
from osoby
where osoby.id_fu = (select id_fu from funkce where id_fu = 2);
 
select prijmení 
from osoby 
where osoby.id_fu IN (select id_fu from funkce);

Př.: Zvýšit cenu za návštěvu o 25% u pacientů nad 60 roků

update navstevy 
set cena.nav = cena.nav * 1,25
where datediff(year, dat_nar, getdate()) > 60;
insert into archiv 
select id_le, id_pac, cena_nav, dat_nar from navstevy 
where dat_nar < '1945-01-01';
delete from navstevy 
where dat_nar < '1945-01-01';