In dit artikel zullen we verschillende methoden leren die worden gebruikt om de gegevens in een tabel bij te werken met de gegevens van andere tabellen. De” UPDATE from SELECT ” query structuur is de belangrijkste techniek voor het uitvoeren van deze updates.
een update query wordt gebruikt om een bestaande rij of rijen in de database te wijzigen. UPDATEQUERY ‘ s kunnen alle tabelrijen wijzigen, of we kunnen het updatestatement voor bepaalde rijen beperken met behulp van de WHERE-clausule., Meestal gebruiken we constante waarden om de gegevens te wijzigen, zoals de volgende structuren.
de volledige update statement wordt gebruikt om de hele tabel gegevens met dezelfde waarde te wijzigen.,
1
2
|
UPDATE table
SET col1 = constant_value1 , col2 = constant_value2 , colN = constant_valueN
|
The conditional update statement is used to change the data that satisfies the WHERE condition.,
1
2
3
|
tabel BIJWERKEN
STEL col1 = constant_value1 , col2 = constant_value2 , colN = constant_valueN
WAAR col = val
|
Echter, voor verschillende scenario ‘ s, deze constante waarde type gebruik niet genoeg voor ons, en we moeten gebruik maken van andere tabellen de gegevens in om te werken op onze tafel., Dit type update statements is een beetje ingewikkeld dan de gebruikelijke structuren. In de volgende secties leren we hoe we dit soort updatequery met verschillende methoden kunnen schrijven, maar eerst moeten we onze voorbeeldgegevens voorbereiden. Dus laten we dit doen.
het voorbereiden van de voorbeeldgegevens
met behulp van de volgende query, zullen we personen en Adreslijsttabellen aanmaken en deze vullen met enkele synthetische gegevens. Deze twee tabellen hebben een relatie door de PersonId kolom, wat betekent dat, in deze twee tabellen, de personid kolom waarde vertegenwoordigt dezelfde persoon.,
UPDATE van SELECT: Join Method
bij deze methode wordt de te updaten tabel samengevoegd met de referentie (secundaire) tabel die nieuwe rijwaarden bevat. Zodat we toegang hebben tot de overeenkomende gegevens van de referentietabel op basis van het opgegeven join type. Tot slot kunnen de kolommen die moeten worden bijgewerkt worden gekoppeld aan kolommen waarnaar wordt verwezen en het updateproces verandert deze kolomwaarden.
in het volgende voorbeeld zullen we de gegevens van de kolommen PersonCityName en PersonPostCode bijwerken met de gegevens van de kolommen stad en PostCode van de AdressList tabel.,
1
2
3
4
5
6
7
8
|
UPDATE Per
SET
Per.PersonCityName=Addr.City,
Per.PersonPostCode=Addr.PostCode
FROM Persons Per
INNER JOIN
AddressList Addr
ON Per.PersonId = Addr.,
Na het uitvoeren van de update van een select-query op de uitgang van de tabel Personen zal worden zoals hieronder weergegeven;
Laten we proberen te begrijpen van de bovenstaande code: Wij getypt de naam van de tabel, die zal worden bijgewerkt nadat de UPDATE-instructie., Na het trefwoord instellen Hebben we de kolomnamen opgegeven die moeten worden bijgewerkt en ook hebben we ze vergeleken met de tabelkolommen waarnaar wordt verwezen. Na de FROM-clausule hebben we de tabelnaam opnieuw getypt, die zal worden bijgewerkt. Na de inner JOIN clausule, hebben we de tabel waarnaar wordt verwezen gespecificeerd en deze toegevoegd aan de tabel die moet worden bijgewerkt. Daarnaast kunnen we een WHERE-clausule opgeven en alle kolommen van de tabel waarnaar wordt verwezen of bijgewerkt filteren. We kunnen de query ook herschrijven door aliassen voor tabellen te gebruiken.,
Performance Tip:indexen zijn zeer nuttige databaseobjecten om de query-prestaties in SQL Server te verbeteren. In het bijzonder, als we werken aan de prestaties van de update query, moeten we rekening houden met deze waarschijnlijkheid. Het volgende uitvoeringsplan illustreert een uitvoeringsplan van de vorige query. Het enige verschil is dat deze query bijgewerkt de 3.000.000 rijen van de personen tabel. Deze zoekopdracht werd binnen 68 seconden voltooid.,
We voegden een niet-geclusterde index op personen tabel voordat te updaten en de toegevoegde index omvat de PersonCityName en PersonPostCode kolommen als de index sleutel.
het volgende uitvoeringsplan toont een uitvoeringsplan van dezelfde query, maar deze query werd binnen 130 seconden voltooid vanwege de toegevoegde index, in tegenstelling tot de eerste.
De index-Update-en Sorteeroperators verbruiken 74% kosten van het uitvoeringsplan., We hebben dit duidelijke prestatieverschil tussen dezelfde query gezien vanwege indexgebruik op de bijgewerkte kolommen. Als gevolg hiervan, als de bijgewerkte kolommen worden gebruikt door de indexen, zoals deze, bijvoorbeeld, de query prestaties negatief kunnen worden beïnvloed. In het bijzonder moeten we dit probleem overwegen als we een groot aantal rijen bijwerken. Om dit probleem op te lossen, kunnen we de index uitschakelen of verwijderen voordat we de updatequery uitvoeren. aan de andere kant wordt een waarschuwingsbord gezien op de sorteeroperator, en het geeft aan dat iets niet goed gaat voor deze operator., Als we de muis over deze operator bewegen, kunnen we de waarschuwingsdetails zien.
tijdens het uitvoeren van de query berekent de query optimizer het benodigde geheugenverbruik voor de query op basis van de geschatte rijnummers en rijgrootte. Deze schatting van het verbruik kan echter om verschillende redenen verkeerd zijn, en als de query meer geheugen vereist dan de schatting, gebruikt het de tempdb-gegevens. Dit mechanisme heet een tempdb lekkage en veroorzaakt prestatieverlies., De reden hiervoor is dat het geheugen altijd sneller is dan de tempdb database omdat de tempdb database de disk resources gebruikt. u kunt dit SQL Server 2017 zien: SQL Sort, Spill, Memory and Adaptive Memory Grant Feedback fantastisch artikel voor meer details over het probleem met de tempdb-spill. UPDATE van SELECT: the MERGE statementhet merge statement wordt gebruikt om een doeltabel te manipuleren (invoegen, bijwerken, verwijderen) door te verwijzen naar een brontabel voor de overeenkomende en niet-overeenkomende rijen. Het MERGE statement kan erg handig zijn voor het synchroniseren van de tabel vanaf elke brontabel., als we nu teruggaan naar onze positie, kan het MERGE statement gebruikt worden als een alternatieve methode voor het bijwerken van gegevens in een tabel met die in een andere tabel. In deze methode kan de referentietabel worden beschouwd als een brontabel en de doeltabel zal de tabel zijn die moet worden bijgewerkt. De volgende query kan een voorbeeld zijn van deze gebruiksmethode.,
laten we nu de vorige update van een SELECT query regel voor regel bekijken.,
We hebben getypt de tabel Personen na de instructie SAMENVOEGEN, want het is onze doelstelling tabel, waar we een update, en we gaven Per alias in om gebruik te maken van de rest van de query.,
After the USING statement, we have specified the source table.
met behulp van deze syntaxis wordt de verbindingsvoorwaarde gedefinieerd tussen de doel-en brontabel.
In deze laatste regel van de query hebben we de manipulatiemethode gekozen voor de overeenkomende rijen. Individueel voor deze query hebben we de updatemethode geselecteerd voor de overeenkomende rijen van de doeltabel. Tot slot hebben we het puntkomma (;) teken toegevoegd omdat de MERGE statements moeten eindigen met de puntkomma tekens. UPDATE van SELECT: Subquery Methodeen subquery is een interieurquery die gebruikt kan worden binnen de DML (SELECT, INSERT, UPDATE and DELETE) statements., Het belangrijkste kenmerk van de subquery is, ze kunnen alleen worden uitgevoerd met de externe query. de subquery methode is de zeer eenvoudige en eenvoudige methode om bestaande gegevens van andere tabellen bij te werken. Het merkbare verschil in deze methode is dat het misschien een handige manier is om een kolom bij te werken voor de tabellen met een klein aantal rijen. Nu zullen we de volgende query uit te voeren en vervolgens zal analyseren.,
|