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 -

MySQL Subinterogare

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

MySQL Subinterogare

Sฤƒ vedem cum funcศ›ioneazฤƒ aceastฤƒ interogare

MySQL Subinterogare

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 );


MySQL Subinterogare

Sฤƒ vedem cum funcศ›ioneazฤƒ aceastฤƒ interogare

MySQL Subinterogare

รŽ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 -

MySQL Subinterogare

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

Sub-interogฤƒri vs alฤƒturari

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.

Rezumaศ›i aceastฤƒ postare cu: