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 –

MySQL Allekérdezés

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

MySQL Allekérdezés

Lássuk, hogyan működik ez a lekérdezés

MySQL Alleké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 );


MySQL Allekérdezés

Lássuk, hogyan működik ez a lekérdezés

MySQL Alleké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:

MySQL Allekérdezés

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.

Allekérdezések vs csatlakozások

Ö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.