Wat zijn subquery's?
Een subquery is een selectiequery die zich in een andere query bevindt. De innerlijke selectiequery wordt meestal gebruikt om de resultaten van de buitenste selectquery te bepalen.
Laten we eens kijken naar de syntaxis van de subquery -
Een veelgehoorde klacht van klanten bij de MyFlix-videobibliotheek is het lage aantal filmtitels. De directie wil films kopen voor een categorie met het minste aantal titels.
U kunt een zoekopdracht gebruiken als
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Het geeft resultaat
Laten we eens kijken hoe deze vraag werkt
Het bovenstaande is een vorm van een rij-subquery . In dergelijke subquery's kan de innerlijke query slechts ÉÉN resultaat opleveren. De toegestane operators bij het werken met rij-subquery's zijn [=,>, =, <=,,! =,]
Laten we naar een ander voorbeeld kijken,
Stel dat u namen en telefoonnummers wilt van leden van mensen die een film hebben gehuurd en deze nog moeten inleveren. Zodra u de namen en het telefoonnummer heeft ontvangen, belt u ze op om een herinnering te geven. U kunt een zoekopdracht gebruiken als
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 vraag werkt
In dit geval retourneert de innerlijke query meer dan één resultaat. Het bovenstaande is een type Table-subquery .
Tot nu toe hebben we twee zoekopdrachten gezien, laten we nu een voorbeeld zien van een drievoudige zoekopdracht !!!
Stel dat het management het best betalende lid wil belonen.
We kunnen een zoekopdracht uitvoeren als
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
De bovenstaande vraag 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 Joins
Vandaar dat ze vaak worden gebruikt door SQL-beginners.
Maar subquery's hebben prestatieproblemen. Het gebruik van een join in plaats van een subquery kan je soms tot wel 500 keer betere prestaties opleveren.
Gegeven een keuze, wordt het aanbevolen om een JOIN te gebruiken boven een subquery.
Subquery's mogen alleen worden gebruikt als een noodoplossing als u geen JOIN-bewerking kunt gebruiken om het bovenstaande te bereiken
Overzicht
- Subquery's zijn ingesloten query's in een andere query. De ingesloten query staat bekend als de innerlijke query en de containerquery staat bekend als de buitenste query.
- Subquery's zijn gemakkelijk te gebruiken, bieden een grote flexibiliteit en kunnen gemakkelijk worden opgesplitst in enkele logische componenten waaruit de query bestaat, wat erg handig is bij het testen en debuggen van de query's.
- 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-queries.
- Voor prestatieproblemen, als het gaat om het ophalen van gegevens uit meerdere tabellen, wordt het sterk aanbevolen om JOIN's te gebruiken in plaats van subquery's. Subquery's mogen alleen met een goede reden worden gebruikt.