MySQL SubQuery Tutorial med eksempler

Anonim

Hvad er underforespørgsler?

En underforespørgsel er en udvalgt forespørgsel, der er indeholdt i en anden forespørgsel. Den indre valgforespørgsel bruges normalt til at bestemme resultaterne af den ydre valgforespørgsel.

Lad os se på underforespørgselens syntaks -

En almindelig kundeklage i MyFlix Video Library er det lave antal filmtitler. Ledelsen ønsker at købe film til en kategori, der har mindst antal titler.

Du kan bruge en forespørgsel som

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);

Det giver et resultat

Lad os se, hvordan denne forespørgsel fungerer

Ovenstående er en form for rækkeundersøgelse . I sådanne underforespørgsler kan den indre forespørgsel kun give ET resultat. De tilladte operatorer, når der arbejdes med rækkeundersøgelser, er [=,>, =, <=,,! =,]

Lad os se på et andet eksempel,

Antag, at du vil have navne og telefonnumre på medlemmer af mennesker, der har lejet en film og endnu ikke skal returnere dem. Når du har fået navne og telefonnummer, ringer du dem op for at give en påmindelse. Du kan bruge en forespørgsel som

SELECT full_names,contact_number FROM members WHERE membership_number IN (SELECT membership_number FROM movierentals WHERE return_date IS NULL );

Lad os se, hvordan denne forespørgsel fungerer

I dette tilfælde returnerer den indre forespørgsel mere end et resultat. Ovenstående er typen af ​​T- mulig underforespørgsel y.

Indtil nu har vi set to forespørgsler, lad os nu se et eksempel på tredobbelt forespørgsel !!!

Antag, at ledelsen vil belønne det højst betalende medlem.

Vi kan køre en forespørgsel som

Select full_names From members WHERE membership_number = (SELECT membership_number FROM payments WHERE amount_paid = (SELECT MAX(amount_paid) FROM payments));

Ovenstående forespørgsel giver følgende resultat -

Underforespørgsler mod tilslutning!

Når man sammenligner med Joins, er underforespørgsler enkle at bruge og lette at læse. De er ikke så komplicerede som Joins

Derfor bruges der ofte af SQL-begyndere.

Men underforespørgsler har ydeevneproblemer. Brug af en join i stedet for en underforespørgsel kan til tider give dig op til 500 gange performance boost.

Hvis du vælger, anbefales det at bruge en JOIN over en underforespørgsel.

Underforespørgsler bør kun bruges som en løsning, når du ikke kan bruge en JOIN-operation til at opnå ovenstående

Resumé

  • Underforespørgsler er indlejrede forespørgsler i en anden forespørgsel. Den integrerede forespørgsel er kendt som den indre forespørgsel, og containerforespørgslen er kendt som den ydre forespørgsel.
  • Underforespørgsler er nemme at bruge, tilbyder stor fleksibilitet og kan let opdeles i enkelte logiske komponenter, der udgør forespørgslen, hvilket er meget nyttigt, når du tester og debuggerer forespørgslerne.
  • MySQL understøtter tre typer underforespørgsler, skalar, række og tabelunderforespørgsler.
  • Underforespørgsler på skalar returnerer kun en enkelt række og en enkelt kolonne.
  • Rækkeunderforespørgsler returnerer kun en enkelt række, men kan have mere end en kolonne.
  • Tabelundersøgelser kan returnere flere rækker såvel som kolonner.
  • Underforespørgsler kan også bruges i INSERT, UPDATE og SLET forespørgsler.
  • For ydeevneproblemer anbefales det stærkt at bruge JOIN'er i stedet for underforespørgsler, når det kommer til at hente data fra flere tabeller. Underforespørgsler bør kun bruges med god grund.