Hva er underspørsmål?
En underspørring er et valgt spørsmål som er inneholdt i et annet spørsmål. Det indre valgspørsmålet brukes vanligvis til å bestemme resultatene av det ytre valgspørsmålet.
La oss se på undersøkningssyntaks -
En vanlig kundeklage på MyFlix Video Library er det lave antallet filmtitler. Ledelsen ønsker å kjøpe filmer for en kategori som har minst antall titler.
Du kan bruke et spørsmål som
SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);
Det gir et resultat
La oss se hvordan dette spørsmålet fungerer
Ovennevnte er en form for radundersøking . I slike underspøringer kan den indre spørringen bare gi ET resultat. De tillatte operatørene når de arbeider med radundersøk er [=,>, =, <=,,! =,]
La oss se på et annet eksempel,
Anta at du vil ha navn og telefonnummer til medlemmer av personer som har leid en film og ennå ikke skal returnere dem. Når du har fått navn og telefonnummer, kan du ringe dem for å gi en påminnelse. Du kan bruke et spørsmål som
SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );
La oss se hvordan dette spørsmålet fungerer
I dette tilfellet returnerer den indre spørringen mer enn ett resultat. Ovennevnte er type T -mulig underspørring y.
Inntil nå har vi sett to spørsmål, la oss nå se et eksempel på trippel spørring !!!
Anta at ledelsen vil belønne det høyest betalende medlemmet.
Vi kan kjøre et spørsmål som
Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));
Ovennevnte spørring gir følgende resultat -
Sub-Queries Vs Joines!
Når man sammenligner med Joins, er underspørsmål enkle å bruke og lette å lese. De er ikke så kompliserte som Joins
Derfor brukes det ofte av SQL-nybegynnere.
Men underspørsmål har ytelsesproblemer. Å bruke en join i stedet for en underspørring kan til tider gi deg opptil 500 ganger ytelsesforbedring.
Gitt et valg, anbefales det å bruke JOIN over en underspørring.
Sub-spørringer bør bare brukes som en reserveløsning når du ikke kan bruke en JOIN-operasjon for å oppnå det ovennevnte
Sammendrag
- Delspørringer er innebygde spørringer i et annet søk. Den innebygde spørringen er kjent som den indre spørringen, og container-spørringen er kjent som den ytre spørringen.
- Delspørsmål er enkle å bruke, gir stor fleksibilitet og kan enkelt deles opp i enkle logiske komponenter som utgjør spørringen, noe som er veldig nyttig når du tester og feilsøker spørsmålene.
- MySQL støtter tre typer underspørringer, skalar, rad og tabellundersøk.
- Scalar-underspørringer returnerer bare en enkelt rad og en kolonne.
- Radundersøk returnerer bare en enkelt rad, men kan ha mer enn én kolonne.
- Tabellundersøk kan returnere flere rader så vel som kolonner.
- Delspørringer kan også brukes i INSERT, UPDATE og DELETE-spørsmål.
- For ytelsesproblemer, når det gjelder å hente data fra flere tabeller, anbefales det sterkt å bruke JOINs i stedet for underspørringer. Delspørsmål skal bare brukes med god grunn.