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
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.
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
- Programmering
- Programmering
- SQL
- Programmeringsverktyg
Gaurav Siyal har två års erfarenhet av att skriva, skriva för en rad digitala marknadsföringsföretag och programvarulivscykeldokument.
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