Selecteer in een Update-instructie gebruiken

De ontwerpers van Structured Query Language (SQL) gemaakt een krachtig hulpmiddel voor het beheren van gegevens met slechts een paar eenvoudige commando's. Een van de meest krachtige schemaconstructies treedt op wanneer de opdrachten zijn genest. Een Select, Update of Delete-opdracht maakt gebruik van een of meer extra Selecteer opdrachten te beperken van de werking ervan. Als voorbeeld, een Update over de tabel Klant gebeurt alleen wanneer de totale verkoop samengevoegd van verschillende verkoop records totaal meer dan $250. Ga als volgt te werk om meerdere geneste Update opdrachten maken.

Instructies

1

Open SQL query editor en maak een nieuwe database genaamd SampleDB. Kies deze database voor de query-sessie.

Maken van de Database SampleDB;

Gebruik de SampleDB;

Deze voorbeelden zijn gemaakt met behulp van de query editor in Microsoft SQL Server 2008 Management Studio Express.

2

Twee tabellen, klanten en verkoopmogelijkheden, maken en vervolgens een paar records aan beide tabellen met behulp van het volgende script toevoegen.

Tabel Klanten maken

(KlantId int primaire sleutel,

Naam van varchar(50),

Status van de varchar(10));

Insert into klanten Values (1, 'John Smith', 'Nieuw');

invoegen van klanten waarden (2, 'Mary Jones', 'Nieuw');

Insert into klanten Values (3, 'Fred Adams', 'Nieuw');

Maken van de tabel Sales

(SalesID int primaire sleutel,

Klantnummer int verwijzingen klanten,

Bedrag int);

invoegen van verkoop Values (1, 1, 500);

invoegen van verkoop Values (2, 1, 250);

invoegen van verkoop Values (3, 3, 50);

3

Maak een geneste query, het combineren van een Update met een Select-instructie waarin Klantstatus op actief voor klanten die activiteit in de tabel verkoop hebben.

Update klanten

Stel Status = 'Actief'

waar KlantId In

(Selecteer klantnummer in verkoop);

Dit is een standaard SQL Update-instructie waarin het veld Status op actief voor een geselecteerde records in de tabel Klant. In een geneste query, de Where-component bevat een of meer Select-instructies omgeven door tussen haakjes (). Elke Select-instructie geeft als resultaat een lijst met waarden die kunnen worden vergeleken met een veld in de tabel. In dit geval, zal alleen die klantrecords weergegeven die klantnummers gevonden in de tabel van de verkoop hebben worden bijgewerkt.

4

Maak een tweede geneste query met behulp van een Select-instructie die verkooptotalen aggregaten.

Update klanten

Stel Status = 'Premium'

waar KlantId In

(Selecteer klantnummer in verkoop

groeperen op klantnummer

Having sum(Amount) > 250);

Bij het analyseren van geneste query's, beginnen met de Select-instructies gevonden in waar clausule. In dit geval is de tabel van de verkoop samengevoegd door de klant-ID (fractie door klantnummer) optellen van de verkoopbedragen (Sum(Amount)). Alleen degenen met een totale omzet van meer dan $250 worden gekozen. Deze lijst wordt vervolgens gebruikt voor het filteren van welke klant-records zijn bijgewerkt (klant 1).

5

Maak één meer geneste query selecteert klantrecords die niet zijn gevonden in de tabel verkoop.

Update klanten

Stel Status = 'Inactief'

waar niet In CustomerID

(Selecteer klantnummer in verkoop);

Deze query selecteert eerst een overzicht van de klantnummers in de tabel van de verkoop (1 en 3) gevonden en vervolgens bijgewerkt die niet gevonden in de lijst (klant 2).

Tips & waarschuwingen

  • Omdat geneste query's uitvoert in twee afzonderlijke zoekopdrachten, wordt uitvoeringstijd soms een probleem.