MySQL Tutorial de subinterogare cu exemple
Ce sunt subinterogฤrile?
O subinterogare este o interogare de selectare care este conศinutฤ รฎn interiorul unei alte interogฤri. Interogarea de selecศie interioarฤ este de obicei utilizatฤ pentru a determina rezultatele interogฤrii de selectare exterioarฤ.
Sฤ ne uitฤm la sintaxa subinterogฤrii -
O plรขngere comunฤ a clienศilor la Biblioteca video MyFlix este numฤrul redus de titluri de filme. Conducerea vrea sฤ cumpere filme pentru o categorie care are cel mai mic numฤr de titluri.
Puteศi utiliza o interogare precum
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Dฤ un rezultat
Sฤ vedem cum funcศioneazฤ aceastฤ interogare
Cele de mai sus este o formฤ de Sub-interogare de rรขnd. รn astfel de sub-interogฤri, interogarea interioarฤ poate da doar UN singur rezultat. Operatorii permisi atunci cรขnd se lucreazฤ cu subinterogฤri de rรขnd sunt [=, >, =, <=, ,!=, ]
Sฤ ne uitฤm la un alt exemplu,
Sฤ presupunem cฤ doriศi Nume ศi numere de telefon ale membrilor persoanelor care au รฎnchiriat un film ศi รฎncฤ nu le-au returnat. Dupฤ ce obศineศi Nume ศi Numฤr de Telefon, le suni pentru a oferi un memento. Puteศi utiliza o interogare precum
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Sฤ vedem cum funcศioneazฤ aceastฤ interogare
รn acest caz, interogarea internฤ returneazฤ mai multe rezultate. Cele de mai sus este tipul Tsub-quer capabily.
Pรขnฤ acum am vฤzut douฤ interogฤri, sฤ vedem acum un exemplu de interogare triplฤ!
Sฤ presupunem cฤ conducerea doreศte sฤ recompenseze membrul cel mai bine plฤtit.
Putem rula o interogare de genul
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Interogarea de mai sus dฤ urmฤtorul rezultat -
Sub-interogฤri vs alฤturari!
รn comparaศie cu Joins , interogฤrile secundare sunt uศor de utilizat ศi uศor de citit. Nu sunt la fel de complicate ca Se alฤturฤ
Prin urmare, sunt utilizate frecvent de SQL รฎncepฤtori.
Dar interogฤrile secundare au probleme de performanศฤ. Utilizarea unei alฤturari รฎn loc de o sub-interogare vฤ poate oferi uneori o creศtere a performanศei de pรขnฤ la 500 de ori.
Avรขnd posibilitatea de a alege, este recomandat sฤ utilizaศi un JOIN peste o subinterogare.
Sub-interogฤrile ar trebui sฤ fie folosite doar ca soluศie de rezervฤ atunci cรขnd nu puteศi utiliza o operaศiune JOIN pentru a realiza cele de mai sus
Rezumat
- Subinterogฤrile sunt interogฤri รฎncorporate รฎn interiorul unei alte interogฤri. Interogarea รฎncorporatฤ este cunoscutฤ ca interogare interioarฤ, iar interogarea container este cunoscutฤ ca interogare exterioarฤ.
- Sub-interogฤrile sunt uศor de utilizat, oferฤ o mare flexibilitate ศi pot fi uศor defalcate รฎn componente logice unice care alcฤtuiesc interogarea, ceea ce este foarte util atunci cรขnd Testarea ศi depanarea interogฤrilor.
- MySQL acceptฤ trei tipuri de subinterogฤri, subinterogฤri scalare, de rรขnd ศi de tabel.
- Subinterogฤrile scalare returneazฤ doar un singur rรขnd ศi o singurฤ coloanฤ.
- Interogฤrile sub rรขnduri returneazฤ doar un singur rรขnd, dar pot avea mai multe coloane.
- Subinterogฤrile de tabel pot returna mai multe rรขnduri, precum ศi coloane.
- Subinterogฤrile pot fi folosite ศi รฎn interogฤrile INSERT, UPDATE ศi DELETE.
- Pentru probleme de performanศฤ, atunci cรขnd vine vorba de obศinerea de date din mai multe tabele, este recomandat sฤ folosiศi JOIN-uri รฎn loc de subinterogฤri. Interogฤrile secundare ar trebui folosite numai cu un motiv รฎntemeiat.






