Hvordan bruke Velg i en oppdatering Statement

Designerne av Structured Query Language (SQL) opprettet et kraftig verktøy for å administrere data med bare noen få enkle kommandoer. En av de mest kraftfulle konstruksjoner oppstår når kommandoer er nestet. A Velg, Oppdater eller Slett kommandoen bruker en eller flere tilleggs Velg kommandoer for å begrense sin drift. Som et eksempel, oppstår en oppdatering på kundens tabellen bare når det totale salget aggregerte fra flere salgsrekorder totalt mer enn $ 250. Følg disse trinnene for å opprette flere nestede Oppdater kommandoer.

Bruksanvisning

1 Åpne SQL-spørringen redaktør og opprette en ny database kalt SampleDB. Velg denne databasen for søket økten.

Opprett database SampleDB;

Bruk SampleDB;

Disse eksemplene ble opprettet ved hjelp av spørre redaktøren innen Microsoft SQL Server 2008 Management Studio Express.

2 Lag to tabeller, kunder og salg, og deretter legge til et par poster til både tabeller ved hjelp av følgende skript.

Lag Tabell Kunder

(CustomerID int primærnøkkel,

Navn varchar (50),

Status varchar (10));

Sett inn Kunder verdier (1, 'John Smith', 'Ny');

Sett inn Kunder verdier (2, 'Mary Jones', 'Ny');

Sett inn Kunder verdier (3, «Fred Adams ',' Ny ');

Lag Tabell Sales

(SalesID int Primary Key,

CustomerID int Referanser Kunder,

Beløp int);

Sett inn Salgs verdier (1, 1, 500);

Sett inn Salgs verdier (2, 1, 250);

Sett inn Salgs verdier (3, 3, 50);

3 Lag en nestet spørring, som kombinerer en oppdatering med en SELECT-setning som setter kunden status til Aktiv for de kundene som har aktivitet i salgsbord.

oppdatere Kunder

Sett Status = 'Aktiv'

hvor CustomerID I

(Velg CustomerID fra salg);

Dette er en standard SQL Update uttalelse som setter status-feltet til Active for et utvalgt sett med poster i kundetabellen. I en nestet spørring, omfatter Hvor klausul ett eller flere Velg uttalelser omgitt av parenteser (). Hver Velg uttalelse returnerer en liste over verdier som kan sammenlignes med et felt i tabellen. I dette tilfellet vil bare de kundeposter som har kunde-ID-funnet i salgstabellen oppdateres.

4 Lag en andre nestet spørring ved hjelp av en SELECT-setning som samler salgs summer.

oppdatere Kunder

Sett Status = 'Premium'

hvor CustomerID I

(Velg CustomerID Fra Sales

gruppe av CustomerID

Å ha sum (beløp)> 250);

Når du analyserer nøstede spørringer, starte med Select-forskrifter i WHERE-leddet. I dette tilfellet er det salgsbord aggregert etter kunde-ID (Grupper etter CustomerID) til total salgsbeløp (Sum (beløp)). Bare de med totalt salg større enn $ 250 er valgt. Denne listen blir så brukt til å filtrere hvilke Kunde poster skal oppdateres (kunde 1).

5 Lag en mer nestet spørring som velger Kunde poster som ikke finnes i salgsbord.

oppdatere Kunder

Sett Status = "Inaktiv"

hvor CustomerID ikke i

(Velg CustomerID fra salg);

Denne spørringen velger først en liste over kunde-ID-funnet i salgstabellen (1 og 3) og deretter oppdaterer dem som ikke finnes i listen (kunde 2).

Hint

  • Fordi nøstede spørringer kjøre to separate søk, blir kjøretiden noen ganger et problem.