SQL Server-underfråga

Sammanfattning: i denna handledning lär du dig om SQL Server-underfrågan och hur du använder underfrågan för att fråga data.

Introduktion till SQL Server-underfråga

En underfråga är en fråga kapslad i ett annat uttalande som SELECT, INSERT, UPDATE, eller DELETE.

Låt oss se följande exempel.

Tänk på orders och customers tabeller från exempeldatabasen.

Följande uttalande visar hur man använder en underfråga i WHERE -satsen i en SELECT uttalande för att hitta kundorder som hittar i New York:

Här är resultatet:

I detta exempel är följande uttalande en underfråga:

Code language: SQL (Structured Query Language) (sql)

Observera att du alltid måste bifoga SELECT fråga om en underfråga inom parentes ().

En underfråga kallas också en inre fråga eller inre markering medan uttalandet som innehåller underfrågan kallas en yttre markering eller yttre fråga:

SQL Servern kör hela frågeexemplet ovan enligt följande:

Först körs underfrågan för att få en lista över kundidentifieringsnummer för de kunder som hittar i New York.

Code language: SQL (Structured Query Language) (sql)

För det andra ersätter SQL Server kundidentifieringsnummer som returneras av underfrågan i operatören IN och kör den yttre frågan för att få den slutliga resultatuppsättningen.

Som du kan s ee, genom att använda underfrågan kan du kombinera två steg tillsammans. Underfrågan tar bort behovet av att välja kundidentifieringsnummer och ansluta dem till den yttre frågan. Dessutom justerar själva frågan automatiskt när kunddata ändras.

Nestande underfråga

En underfråga kan kapslas i en annan underfråga. SQL Server stöder upp till 32 nivåer av kapsling. Tänk på följande exempel:

Först, SQL Server kör följande underfråga för att få en lista över varumärkesidentifieringsnummer för varumärkena Strider och Trek:

För det andra beräknar SQL Server den genomsnittliga prislistan för alla produkter som tillhör till dessa märken.

Code language: SQL (Structured Query Language) (sql)

För det tredje hittar SQL Server de produkter vars listpris är högre än det genomsnittliga listpriset för alla produkter med Strider eller Trek varumärke.

SQL Server-underfrågetyper

Du kan använda en underfråga på många ställen:

  • I stället för ett uttryck
  • Med IN eller NOT IN
  • Med ANY eller ALL
  • Med EXISTS eller NOT EXISTS
  • I UPDATE, DELETE, eller INSERT uttalande
  • I FROM -satsen

SQL Server-underfrågan används istället för ett uttryck

Om en underfråga returnerar ett enda värde kan den användas var som helst ett uttryck används.

I följande exempel används en underfråga som kolumnuttryck med namnet max_list_price i ett SELECT uttalande.

SQL Server-underfråga används med IN-operatör

En underfråga som används med IN returnerar en uppsättning med noll eller fler värden. Efter att underfrågan har returnerat värden använder den yttre frågan dem.

Följande fråga hittar namnen på alla mountainbikes och roadcykelprodukter som cykelbutikerna säljer.

Denna fråga utvärderas i två steg:

  1. Först returnerar den inre frågan en lista över kategoriidentifieringsnummer som matchar namnen Mountain Bikes och code Vägcyklar.
  2. För det andra ersätts dessa värden i den yttre frågan som hittar produktnamnen som har kategoriidentifieringsnumret som matchar ett av värdena i listan.

SQL Server-underfrågan används med ALLA operatörer

Underfrågan introduceras med ANY operatören har följande syntax:

Code language: SQL (Structured Query Language) (sql)

Förutsatt att underfrågan returnerar en lista med värdet v1, v2,… vn. ANY -operatören returnerar TRUE om en av ett jämförelsepar (scalar_expression, vi) utvärderar till TRUE; annars returnerar den FALSE.

Till exempel hittar följande fråga de produkter vars listpriser är högre än eller lika med det genomsnittliga listpriset för något produktmärke .

För varje märke, underfrågan hittar det högsta listpriset. Den yttre frågan använder dessa maxpriser och bestämmer vilken enskild produkts listpris som är större än eller lika med varumärkets maximala listpris.

SQL Server-underfrågan används med ALL-operatören

ALL operatör har samma syntax som ANY operatör:

Code language: SQL (Structured Query Language) (sql)

ALL -operatören returnerar TRUE om alla jämförelsepar (scalar_expression, vi) utvärderas till TRUE; annars returnerar den FALSE.

Följande fråga hittar de produkter vars listpris är större än eller lika med det genomsnittliga listpris som returneras av underfrågan:

SQL Server-underfrågan används med EXISTS eller NOT EXISTER

Följande illustrerar syntaxen för en underfråga introducerad med EXISTS operatör:

Code language: SQL (Structured Query Language) (sql)

EXISTS -operatören returnerar TRUE om underfrågan returnerar; annars returnerar den FALSE.

Å andra sidan är NOT EXISTS motsatt EXISTS operatör.

Följande fråga hittar de kunder som köpte produkter 2017:

Om du använder NOT EXISTS istället för EXISTS, du hittar de kunder som inte köpte några produkter 2017.

SQL Server-underfråga i FROM-klausulen

Antag att du vill hitta genomsnittet av summan av order för alla säljare. För att göra detta kan du först hitta antalet beställningar av personal:

Sedan kan du använda funktionen AVG() på den här resultatuppsättningen. Eftersom en fråga returnerar en resultatuppsättning som ser ut som en virtuell tabell kan du placera hela frågan i FROM -satsen i en annan fråga så här:

Frågan som du placerar i FROM paragraf måste ha ett tabellalias. I det här exemplet använde vi t som tabellalias för underfrågan. För att komma med slutresultatet utför SQL Server följande steg:

  • Kör underfrågan i FROM -satsen.
  • Använd resultatet av underfrågan och kör den yttre frågan.

I denna handledning har du lärt dig om SQL Server-underfrågekonceptet och hur du använder olika underfrågetyper för att fråga data.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *