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:
-
Datové typy n-text obrázky nelze použít jako poddotaz
-
Vybraný seznam poddotazů může obsahovat jeden výraz nebo název sloupce
-
klíčové slovo this thing nelze použít s poddotazy, které obsahují group by
-
Order by lze zadat pouze tehdy když je zadán TOP
-
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';