Čo sú poddotazy?
Podotázka je výberový dotaz, ktorý je obsiahnutý v inom dotaze. Vnútorný výberový dotaz sa zvyčajne používa na určenie výsledkov vonkajšieho výberového dotazu.
Pozrime sa na syntax subotázky -
Spoločnou sťažnosťou zákazníkov vo videotéke MyFlix je nízky počet filmových titulov. Vedenie chce kúpiť filmy pre kategóriu, ktorá má najmenší počet titulov.
Môžete použiť dotaz ako
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Dáva výsledok
Pozrime sa, ako tento dopyt funguje
Vyššie uvedené je forma poddotazu na riadok . V takýchto poddotazoch môže vnútorný dotaz poskytnúť iba JEDEN výsledok. Povolené operátory pri práci s poddotazmi na riadky sú [=,>, =, <=,,! =,]
Pozrime sa na ďalší príklad,
Predpokladajme, že potrebujete mená a telefónne čísla členov ľudí, ktorí si prenajali film a ešte ich nevrátia. Hneď ako získate mená a telefónne čísla, zavolajte ich a nezabudnite. Môžete použiť dotaz ako
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Pozrime sa, ako tento dopyt funguje
V takom prípade vnútorný dotaz vráti viac ako jeden výsledok. Vyššie uvedené je typ tabuľky sub-dopytu y.
Doteraz sme videli dva dotazy, poďme si pozrieť príklad trojitého dotazu !!!
Predpokladajme, že vedenie chce odmeniť najlepšie platiaceho člena.
Môžeme spustiť dopyt ako
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Vyššie uvedený dotaz dáva nasledujúci výsledok -
Sub-dotazy vs sa pripájajú!
Pri porovnaní s Joins sú poddotazy jednoduché na použitie a ľahko čitateľné. Nie sú také zložité ako Joins
Preto sú často používané začiatočníkmi SQL.
Ale poddotazy majú problémy s výkonom. Použitie spojenia namiesto čiastkového dotazu vám môže niekedy poskytnúť až 500-násobné zvýšenie výkonu.
Ak je na výber, odporúča sa použiť JOIN nad čiastkovým dotazom.
Poddotazy by sa mali použiť iba ako záložné riešenie, keď na dosiahnutie vyššie uvedeného nemôžete použiť operáciu JOIN
Zhrnutie
- Poddotazy sú vložené dotazy v rámci iného dotazu. Vložený dotaz sa nazýva vnútorný dotaz a dotaz kontajnera ako vonkajší dotaz.
- Poddotazy sa ľahko používajú, ponúkajú veľkú flexibilitu a dajú sa ľahko rozdeliť na jednotlivé logické komponenty, ktoré tvoria dotaz, ktorý je veľmi užitočný pri testovaní a ladení dotazov.
- MySQL podporuje tri typy poddotazov, skalárne, riadkové a tabuľkové poddotazy.
- Skalárne poddotazy vrátia iba jeden riadok a jeden stĺpec.
- Poddotazy riadkov vrátia iba jeden riadok, ale môžu mať viac ako jeden stĺpec.
- Poddotazy tabuľky môžu vrátiť viac riadkov aj stĺpcov.
- Poddotazy možno použiť aj v dotazoch INSERT, UPDATE a DELETE.
- V prípade problémov s výkonom sa pri získavaní údajov z viacerých tabuliek dôrazne odporúča používať namiesto poddotazov JOIN. Čiastkové dotazy by sa mali používať iba z dobrého dôvodu.