Co jsou poddotazy?
Dílčí dotaz je výběrový dotaz, který je obsažen v jiném dotazu. Vnitřní výběrový dotaz se obvykle používá k určení výsledků vnějšího výběrového dotazu.
Podívejme se na syntaxi dílčích dotazů -
Běžnou stížností zákazníků na MyFlix Video Library je nízký počet filmových titulů. Vedení chce koupit filmy pro kategorii, která má nejmenší počet titulů.
Můžete použít dotaz jako
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Dává výsledek
Podívejme se, jak tento dotaz funguje
Výše uvedené je forma poddotazu na řádek . V takových poddotazech může vnitřní dotaz poskytnout pouze JEDEN výsledek. Povolené operátory při práci s poddotazy řádků jsou [=,>, =, <=,,! =,]
Podívejme se na další příklad,
Předpokládejme, že chcete Jména a Telefonní čísla členů lidí, kteří si pronajali film a ještě je nevrátí. Jakmile získáte jména a telefonní číslo, zavolejte je a připomenete. Můžete použít dotaz jako
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Podívejme se, jak tento dotaz funguje
V tomto případě vnitřní dotaz vrátí více než jeden výsledek. Výše uvedený je typ schopný sub-dotazu y.
Dosud jsme viděli dva dotazy, pojďme nyní vidět příklad trojitého dotazu !!!
Předpokládejme, že vedení chce odměnit nejlépe platícího člena.
Můžeme spustit dotaz jako
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Výše uvedený dotaz dává následující výsledek -
Dílčí dotazy vs se připojují!
Ve srovnání s Joins jsou poddotazy snadno použitelné a snadno čitelné. Nejsou tak složité jako Joins
Proto jsou často používány začátečníky SQL.
Ale poddotazy mají problémy s výkonem. Použití spojení namísto dílčího dotazu vám může někdy poskytnout až 500násobné zvýšení výkonu.
Vzhledem k možnosti výběru se doporučuje použít JOIN přes dílčí dotaz.
Dílčí dotazy by se měly používat pouze jako záložní řešení, když k dosažení výše uvedeného nemůžete použít operaci JOIN
souhrn
- Poddotazy jsou vložené dotazy uvnitř jiného dotazu. Vložený dotaz se označuje jako vnitřní dotaz a dotaz na kontejner se nazývá vnější dotaz.
- Dílčí dotazy se snadno používají, nabízejí velkou flexibilitu a lze je snadno rozdělit na jednotlivé logické komponenty, které tvoří dotaz, který je velmi užitečný při testování a ladění dotazů.
- MySQL podporuje tři typy poddotazů, skalární, řádkové a tabulkové poddotazy.
- Skalární dílčí dotazy vracejí pouze jeden řádek a jeden sloupec.
- Řádkové dílčí dotazy vracejí pouze jeden řádek, ale mohou mít více než jeden sloupec.
- Poddotazy tabulky mohou vrátit více řádků i sloupců.
- Poddotazy lze také použít v dotazech INSERT, UPDATE a DELETE.
- Pokud jde o problémy s výkonem, pokud jde o získávání dat z více tabulek, důrazně se doporučuje používat JOINy místo poddotazů. Dílčí dotazy by měly být používány pouze z dobrého důvodu.