MySQL SubQuery oktatóanyag példákkal
Mik azok az allekérdezések?
Az allekérdezés egy másik lekérdezésben található kiválasztási lekérdezés. A belső kijelölési lekérdezést általában a külső kijelölési lekérdezés eredményeinek meghatározására használják.
Nézzük meg az allekérdezés szintaxisát –
A MyFlix Video Library gyakori vásárlói panasza a filmcímek alacsony száma. A vezetőség a legkevesebb filmet tartalmazó kategóriában szeretne filmeket vásárolni.
Használhat olyan lekérdezést, mint
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Eredményt ad
Lássuk, hogyan működik ez a lekérdezés
A fenti egy formája Sor Al-lekérdezés. Az ilyen részlekérdezésekben a belső lekérdezés csak EGY eredményt adhat. A megengedett operátorok sor-allekérdezések esetén a következők: [=, >, =, <=, ,!=, ]
Nézzünk egy másik példát,
Tegyük fel, hogy azoknak a tagjainak nevét és telefonszámát szeretné megadni, akik kölcsönöztek egy filmet, és még nem küldik vissza őket. Miután megkapta a neveket és telefonszámokat, felhívja őket, hogy emlékeztetőt adjon. Használhat olyan lekérdezést, mint
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Lássuk, hogyan működik ez a lekérdezés
Ebben az esetben a belső lekérdezés egynél több eredményt ad vissza. A fenti a T típusaképes sub-query.
Eddig két lekérdezést láttunk, lássunk most egy példát hármas lekérdezés!!!
Tegyük fel, hogy a vezetőség a legjobban fizető tagot akarja jutalmazni.
Olyan lekérdezést futtathatunk, mint
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
A fenti lekérdezés a következő eredményt adja:
Al-lekérdezések vs csatlakozások!
A Joins-szal összehasonlítva az allekérdezések egyszerűen használhatók és könnyen olvashatók. Nem olyan bonyolultak, mint csatlakozik
Ezért gyakran használják SQL kezdők.
Az allekérdezéseknek azonban teljesítményproblémái vannak. Allekérdezés helyett összekapcsolás használata időnként akár 500-szoros teljesítménynövekedést is eredményezhet.
Ha van választási lehetőség, javasolt a JOIN használata egy allekérdezésnél.
Az allekérdezéseket csak tartalék megoldásként szabad használni, ha nem tud JOIN műveletet használni a fentiek eléréséhez.
Összegzésként
- Az allekérdezések egy másik lekérdezésbe ágyazott lekérdezések. A beágyazott lekérdezés belső lekérdezés, a tároló lekérdezés pedig külső lekérdezés néven ismert.
- Az allekérdezések könnyen használhatók, nagy rugalmasságot kínálnak, és könnyen lebonthatók egyetlen logikai komponensekre, amelyek a lekérdezést alkotják, ami nagyon hasznos, ha Tesztelés és a lekérdezések hibakeresése.
- MySQL háromféle segédlekérdezést támogat, a skaláris, sor- és táblázat-allekérdezéseket.
- A skaláris allekérdezések csak egyetlen sort és egyetlen oszlopot adnak vissza.
- A sor allekérdezések csak egyetlen sort adnak vissza, de egynél több oszlopot is tartalmazhatnak.
- A táblázat-allekérdezések több sort és oszlopot is visszaadhatnak.
- A részlekérdezések az INSERT, UPDATE és DELETE lekérdezésekben is használhatók.
- Teljesítményproblémák esetén, amikor több táblából kell adatokat lekérni, erősen ajánlott a JOIN-ok használata az allekérdezések helyett. Az allekérdezéseket csak alapos indokkal szabad használni.