Što su podupiti?
Podupit je odabrani upit koji se nalazi unutar drugog upita. Unutarnji upit za odabir obično se koristi za određivanje rezultata vanjskog upita za odabir.
Pogledajmo sintaksu podupita -
Česta zamjerka kupaca u MyFlix Video Library je nizak broj naslova filmova. Uprava želi kupiti filmove za kategoriju koja ima najmanje naslova.
Možete koristiti upit poput
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Daje rezultat
Pogledajmo kako funkcionira ovaj upit
Gore navedeno je oblik podupita za redoslijed . U takvim podupitima unutarnji upit može dati samo JEDAN rezultat. Dopušteni operatori kada rade s podupitima reda su [=,>, =, <=,,! =,]
Pogledajmo još jedan primjer,
Pretpostavimo da želite Imena i Telefonske brojeve članova ljudi koji su unajmili film i trebaju ih vratiti. Kad dobijete Imena i Telefonski broj, pozovite ih da biste ih podsjetili. Možete koristiti upit poput
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Pogledajmo kako funkcionira ovaj upit
U ovom slučaju, unutarnji upit vraća više rezultata. Navedeni je tip T Table sub-quer y.
Do sada smo vidjeli dva upita, pogledajmo sada primjer trostrukog upita !!!
Pretpostavimo da uprava želi nagraditi člana koji najviše plaća.
Možemo pokrenuti upit poput
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Gornji upit daje sljedeći rezultat -
Podupiti protiv pridruživanja!
U usporedbi s Joins, potupiti su jednostavni za upotrebu i lako se čitaju. Nisu toliko komplicirani kao Joins
Stoga ih SQL početnici često koriste.
Ali podupiti imaju problema s izvedbom. Korištenje pridruživanja umjesto potupita ponekad vam može povećati performanse do 500 puta.
S obzirom na izbor, preporuča se korištenje PRIDRUŽITI se preko podupita.
Potupiti se trebaju koristiti kao zamjensko rješenje samo ako ne možete koristiti JOIN operaciju da biste postigli gore navedeno
Sažetak
- Potupiti su ugrađeni upiti unutar drugog upita. Ugrađeni upit poznat je kao unutarnji upit, a upit spremnika poznat je kao vanjski upit.
- Potupiti su jednostavni za upotrebu, nude veliku fleksibilnost i mogu se lako rastaviti na pojedinačne logičke komponente koje čine upit što je vrlo korisno prilikom testiranja i otklanjanja pogrešaka u upitima.
- MySQL podržava tri vrste podupita, skalarne, redoslijede i tablice.
- Skalirani podupiti vraćaju samo jedan redak i jedan stupac.
- Podupiti za redove vraćaju samo jedan redak, ali mogu imati više stupaca.
- Podupiti tablice mogu vratiti više redaka kao i stupaca.
- Podupiti se također mogu koristiti u INSERT, UPDATE i DELETE upitima.
- Za probleme s performansama, kada je riječ o dobivanju podataka iz više tablica, toplo se preporučuje da se umjesto pridruženih upita koriste JOIN-ovi. Potupiti se trebaju koristiti samo s dobrim razlogom.