MySQL SubQuery-zelfstudie met voorbeelden
Wat zijn subquery's?
Een subquery is een selectiequery die zich in een andere query bevindt. De binnenste selectiequery wordt meestal gebruikt om de resultaten van de buitenste selectiequery te bepalen.
Laten we eens kijken naar de syntaxis van de subquery:
Een veelgehoorde klacht van klanten bij de MyFlix Videotheek is het lage aantal filmtitels. Het management wil films kopen voor een categorie met het minste aantal titels.
Je kunt een query gebruiken zoals
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Het geeft resultaat
Laten we eens kijken hoe deze zoekopdracht werkt
Bovenstaande is een vorm van Rij-subquery. In zulke subquery's kan de , innerlijke query slechts ÉÉN resultaat opleveren. De toegestane operatoren bij het werken met rij-subquery's zijn [=, >, =, <=, ,!=, ]
Laten we eens naar een ander voorbeeld kijken,
Stel dat u Namen en telefoonnummers wilt van leden van mensen die een film hebben gehuurd en deze nog niet hebben teruggebracht. Zodra u Namen en telefoonnummers hebt, belt u ze op om een herinnering te geven. U kunt een query gebruiken zoals
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
Laten we eens kijken hoe deze zoekopdracht werkt
In dit geval retourneert de binnenquery meer dan één resultaat. Bovenstaande is een type Tstaat sub-query.
Tot nu toe hebben we twee queries gezien, laten we er nu een voorbeeld van zien drievoudige vraag!!!
Stel dat het management het best betalende lid wil belonen.
We kunnen een query uitvoeren zoals
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
De bovenstaande query geeft het volgende resultaat:
Subquery's versus joins!
In vergelijking met Joins zijn subquery's eenvoudig te gebruiken en gemakkelijk te lezen. Ze zijn niet zo ingewikkeld als Sluit zich aan bij
Vandaar dat er veelvuldig gebruik van wordt gemaakt SQL-beginners.
Maar subquery's hebben prestatieproblemen. Het gebruik van een join in plaats van een subquery kan u soms een prestatieverbetering van wel 500 keer opleveren.
Als u de keuze heeft, wordt het aanbevolen om een JOIN over een subquery te gebruiken.
Subquery's mogen alleen worden gebruikt als een noodoplossing wanneer u geen JOIN-bewerking kunt gebruiken om het bovenstaande te bereiken
Samenvatting
- Subquery's zijn ingebedde query's binnen een andere query. De ingesloten query staat bekend als de binnenste query en de containerquery staat bekend als de buitenste query.
- Subquery's zijn gemakkelijk te gebruiken, bieden grote flexibiliteit en kunnen eenvoudig worden opgesplitst in afzonderlijke logische componenten waaruit de query bestaat, wat erg handig is wanneer Testen en het debuggen van de queries.
- MySQL ondersteunt drie soorten subquery's: scalaire, rij- en tabelsubquery's.
- Scalaire subquery's retourneren slechts één rij en één kolom.
- Rij-subquery's retourneren slechts één rij, maar kunnen meer dan één kolom bevatten.
- Tabelsubquery's kunnen zowel meerdere rijen als kolommen retourneren.
- Subquery's kunnen ook worden gebruikt in INSERT-, UPDATE- en DELETE-query's.
- Voor prestatieproblemen, wanneer het aankomt op het ophalen van data uit meerdere tabellen, is het sterk aan te raden om JOINs te gebruiken in plaats van subquery's. Subquery's zouden alleen gebruikt moeten worden met een goede reden.