SQL-frågor är köttet och potatisen i RDBMS CRUD (skapa, läs, uppdatera, ta bort). Men när din applikation eller företagsdatabas växer, blir behovet av intelligenta frågor för att hämta villkorad, kravspecifik data ett måste.

SQL är relativt omfattande och omfattar många funktioner - som var och en är väl lämpad för olika affärsanvändningar. En sådan funktion inkluderar användningen av underfrågor.

För att göra dina koder effektiva och effektiva kan du använda underfrågor i dina SQL-koder för att hämta data, manipulera befintliga variabler och uppnå flera mål på en gång.

Vad är SQL Sub-Queries?

En underfråga är en kapslad fråga, som fungerar som en parameter i en annan huvudfråga. Underfrågan är en inre fråga, medan huvudfrågan är yttre fråga.

Underfrågan returnerar förmodligen data som ett argument inom parentes för huvudfrågan, medan huvudfrågan återhämtar det slutliga resultatet.

Underfrågor är inbäddade i Välj uttalande eller i Var klausul. En sådan struktur tillåter underfrågan att uppträda som ett väl beskrivet datafiltreringsvillkor. Tyvärr kan underfrågor bara använda

instagram viewer
Grupp av kommandon och inte Sortera efter kommandon, eftersom de endast är tillåtna i huvudfrågan.

Relaterad: Allt du behöver veta om SQL GROUP BY-satsen

Vanligtvis består varje underfråga en enda kolumn med Välj klausul. Det finns dock scenarier där huvudfrågan har flera kolumner. En underfråga kan kapslas in i en annan underfråga, vilket gör den till en kapslande underfråga.

En underfrågas begränsning är följande:

Välj kolumnnamn från tabellen där villkor= 
(SELECT conditional_column FROM table) som alias;

Anta till exempel att du har följande tabell:

ID Förnamn Andranamn Byråavgift
1 John Veke 5000
2 Robert Graham 4000
3 Stefan Hicks 8000
4 Guppa Marley 1000
5 Mary Ellen 9000

I den här tabellen kan du skriva en underfråga istället för att skriva flera rader kod för att dra namnen på personer som tjänar över den genomsnittliga byråavgiften.

Relaterad: Hur man skapar en tabell i SQL

Så här ser frågan ut:

Välj * från agent_details
där Agency_Fee > (välj medelvärde (Agency_Fee) från agent_details);

Kommandot före > tecken är den yttre frågan, medan allt efter > tecken är den inre frågan.

Den inre frågan kommer att beräkna den genomsnittliga byråavgiften inom underfrågan, och den yttre frågan kommer att visa alla värden som är större än det beräknade medelvärdet.

Hur använder man underfrågor i SQL?

Det finns några olika sätt på vilka du kan använda underfrågor i SQL.

Underfrågor med Where-klausul

En av de mest grundläggande strukturerna för en underfråga i SQL finns inom Where-satsen. Det är det enklaste sättet att definiera vad du söker efter. Select-satsen returnerar värden enligt underfrågans villkor och använder den som en parameter för huvudfrågan.

Frågestruktur:

välj * från tabellnamn
där kolumnnamn = (välj kolumnnamn från tabellnamn);

Låt oss förklara detta med ett exempel.

Anta att du vill hitta den näst högsta byråavgiften från tabellen byrådetaljer. För att göra det finns det alternativa funktioner inom SQL; ändå är den bästa metoden att använda en underfråga.

Så här kan du definiera underfrågan:

välj *, max (byråavgift)
från agent_details
där Agency_fee < (välj max (Agency_fee) från agent_details);

Det resulterande uttalandet kommer att visa dig 8000, vilket är den näst högsta avgiften i den givna tabellen. När frågan körs, beräknar underfrågan det maximala värdet från listan över avgifter. Det högsta avgiftsbeloppet (9000) lagras i minnet.

När denna del har beräknats beräknas den andra delen av frågan, som hittar den näst högsta avgiften från tabellen (eftersom < tecken används). Slutresultatet är 8000, vilket är den näst högsta avgiften i tabellen.

Underfrågor inom From-klausulen

En annan variant inom underfrågor är att skicka villkoret i från klausul. Som ett liknande koncept bearbetas den inre frågan först, och den yttre frågan bearbetas efteråt. Den inre frågan kommer att filtrera på data och visa resultat där ID = 3.

Här är frågan som referens:

välj a.* från (
välj agenturavgift från agent_details
där ID= 3) som en;

Detta är en mycket grundläggande struktur; Men ju mer komplexa dina datatabeller är, kommer du att få fler rader med data som matchar dina villkor.

Använda underfrågor med infoga i uttalande

Om du vill uppdatera en befintlig tabell med några nya datarader kan du använda Sätt in i påstående. En underfråga kan visa sig vara ganska fördelaktig om du vill lägga till värden baserat på ett eller flera specifika villkor.

Frågestruktur:

infoga i tabellnamn 
välj * från tabellnamn
där kolumnnamn = villkor;
välj * från tabellnamn;

Här är ett exempel på hur du kan använda insert into-satsen med underfrågan:

infoga i agent_details
välj * från agent_details
där byråavgift i (1000, 5000);
välj * från agent_details;

När frågan körs kommer värdena som matchar villkoret att infogas i den befintliga tabellen igen. De Välj * referens plockar upp alla kolumner tillsammans och infogar den i tabellen agent_details som den är. De i uttalande används för att definiera flera filtervillkor samtidigt.

Använda underfrågor med uppdateringsutlåtande

Det finns situationer där du vill uppdatera de underliggande tabellerna medan du kör frågorna. För att göra det kan du använda uppdatering uttalande tillsammans med frågekommandona.

Så här skriver du underfrågan för att uppdatera informationen i tabellen i en instans:

uppdatera tabellnamn 
ställ in kolumnnamn = nytt_värde
där kolumnnamn =
(välj kolumnnamn från tabellnamn där = );

Här är ett exempel som visar användningen av uppdateringssatsen:

UPPDATERA agent_details 
SET agent_fee = 35 000
WHERE agenturavgift =
(SELECT agency_fee FROM agent_details WHERE First_name='John');
välj * från agent_details;

Underfrågan kommer att filtrera på kolumnen agenturavgift och peka ut raden/raderna där First_Name matchar John. Den yttre frågan exekveras därefter, där byråavgiften uppdateras till 35 000 för John Wick.

Du kan passera en Välj * uttalande för att kontrollera de slutliga resultaten; du kommer att märka att förmedlingsavgiften för John Wick uppdateras till 35000, eftersom det bara finns instanser som matchar villkoren som definieras i frågan.

Använda underfrågor med radera uttalande

Precis som uppdateringssatsen, där du uppdaterar raderna med data i en befintlig tabell, radera uttalande tar bort rad(er) med data baserat på ett villkor.

Strukturen för delete-satsen är:

ta bort från tabellnamn där variabel/kolumnnamn = 
(välj kolumnnamn från tabellnamn där = villkor);

Här är ett exempel:

Ta bort från agent_details 
där Förnamn IN
(välj Förnamn från agent_details där agenturavgift = 9000);
välj * från agent_details;

Använda underfrågor inom SQL

Underfrågor är en utmärkt funktion inom SQL, som kan rädda dig från att skriva ändlösa rader med onödig kod. När du kan använda de grundläggande funktionerna i underfrågor för att göra dina bud, skulle du aldrig vilja oroa dig för att gå in på komplexiteten med SQL-kodning.

Det är alltid bäst att förbättra din befintliga SQL-kunskap för att säkerställa att du alltid är på topp i ditt spel. Du kan vara säker på att SQL-fuskblad kan ge dig en bra idé om hur du kan fräscha upp dina grunder med en enda blick.

Fuskbladet för Essential SQL Commands för nybörjare

Vill du lära dig mer om SQL? Att ha koll på de olika SQL-frågekommandona är ett bra sätt att komma framåt.

Läs Nästa

Dela med sigTweetE-post
Relaterade ämnen
  • Programmering
  • Programmering
  • SQL
  • Programmeringsverktyg
Om författaren
Gaurav Siyal (35 artiklar publicerade)

Gaurav Siyal har två års erfarenhet av att skriva, skriva för en rad digitala marknadsföringsföretag och programvarulivscykeldokument.

Mer från Gaurav Siyal

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e-böcker och exklusiva erbjudanden!

Klicka här för att prenumerera