I denne artikkelen, vi vil lære forskjellige metoder som brukes til å oppdatere data i en tabell med data fra andre tabeller. «OPPDATERE fra VELG» spørring struktur er den viktigste teknikken for å utføre disse oppdateringene.
En oppdateringsspørring brukes til å endre en eksisterende rad-eller rader i databasen. OPPDATERING forespørsler kan endre alle tabeller rader, eller vi kan begrense oppdatering uttalelse rammer for den enkelte rader med hjelp av WHERE-setningsdel., For det meste, vi bruker konstante verdier for å endre data, for eksempel følgende strukturer.
full update-setningen brukes til å endre hele tabellen data med samme verdi.,
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
|
OPPDATER tabell
ANGI col1 = constant_value1 , col2 = constant_value2 , colN = constant_valueN
HVOR col = val
|
Imidlertid for ulike scenarier, denne konstante verdien bruk typen kan være nok for oss, og vi må bruke andre tabeller’ data for å oppdatere våre bord., Denne typen oppdateringer uttalelser er litt mer komplisert enn de vanlige strukturer. I de følgende avsnittene vil vi lære hvordan å skrive denne type oppdateringsspørring med forskjellige metoder, men først må vi forberede våre utvalgte data. Så la oss gjøre dette.
Klargjøre eksempeldata
ved hjelp av følgende spørring, vil vi skape Mennesker og AddressList tabeller og fylle dem med noen syntetiske data. Disse to tabellene har et forhold gjennom PersonId kolonnen, noe som betyr at i disse to tabellene, PersonId kolonnen verdi representerer den samme personen.,
OPPDATERE fra SELECT: Bli med Metode
I denne metoden, tabellen oppdateres vil være sammen med referansen (sekundær) tabell som inneholder ny rad verdier. Slik at vi kan få tilgang til matchet data for referanse tabell basert på den angitte bli med type. Til slutt, kolonner for å være oppdatert kan bli matchet med refereres til kolonner og oppdateringen endrer disse kolonne verdier.
I det følgende eksemplet, vi vil oppdatere PersonCityName og PersonPostCode kolonner med data Byen og Postnummer kolonner data om AdressList bordet.,
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.,
Etter gjennomføring av oppdateringen fra en select-spørring utgangen av Mennesker tabellen vil bli som vist nedenfor;
La oss prøve å forstå koden ovenfor: Vi har skrevet navnet til bordet, som vil bli oppdatert etter OPPDATERINGEN uttalelse., Etter ANGITT søkeord, vi er angitt i kolonnen navn for å være oppdatert, og vi matchet dem med referansetabellen kolonner. Etter FRA-punkt, vi retyped bordet, som vil være oppdatert. Etter INNER JOIN-setningsdel, vi er angitt referansetabellen, og ble med til bordet for å være oppdatert. I tillegg til dette, kan vi angi en WHERE-setningsdel og filter noen kolonner av den refererte eller oppdatert tabell. Vi kan også skrive spørring ved hjelp av aliaser for tabeller.,
Ytelse Tips:Indekser er veldig nyttige database objekter for å forbedre ytelse i SQL Server. Spesielt, hvis vi jobber på resultatene av den oppdateringsspørring, bør vi ta hensyn til denne sannsynligheten. Følgende gjennomføringsplan illustrerer en gjennomføringsplan over tidligere søkeord. Den eneste forskjellen er at denne spørringen oppdatert 3.000.000 rader av Personer bordet. Dette søket ble gjennomført i løpet 68 sekunder.,
Vi har lagt til en ikke-samlet indeks på Personer bordet før for å oppdatere og lagt indeks innebærer PersonCityName og PersonPostCode kolonner som index-tasten.
følgende gjennomføringsplan er å demonstrere en gjennomføringsplan av den samme spørringen, men dette søket ble avsluttet innen 130 sekunder på grunn av den ekstra indeks, i motsetning til den første.
Indeksen Oppdatering og Sortere operatører bruker 74% kostnaden av gjennomføringsplan., Vi har sett dette tydelig ytelse forskjellen mellom den samme spørringen på grunn av indeks-bruk på den oppdaterte kolonner. Som et resultat, hvis oppdatert kolonner blir brukt av indekser, som dette, for eksempel spørringen ytelse kan bli påvirket negativt. I særdeleshet, bør vi vurdere dette problemet hvis vi vil oppdatere et stort antall rader. For å overvinne dette problemet, kan vi deaktivere eller fjerne indeksen før du utfører oppdateringen spørring. På den annen side, et faresignal er sett på Sorter operatør, og det indikerer at noe ikke går bra for denne operatøren., Når vi beveger du musepekeren over dette nettet, kan vi se advarsel detaljer.
Under utførelsen av spørringen, query optimizer beregner en nødvendig minneforbruket for spørring basert på estimert rad tall og rad størrelse. Imidlertid, dette forbruket estimering kan være feil for en rekke årsaker, og hvis spørringen krever mer minne enn det estimering, bruker den tempdb data. Denne mekanismen kalles en tempdb utslipp og fører til ytelse tap., Grunnen til dette: minnet alltid raskere enn tempdb database fordi tempdb databasen bruker disk ressurser. Du kan se denne SQL Server-2017: SQL Sortere, Søl, Minne og Adaptive Memory Gi Tilbakemelding fantastisk artikkel for mer informasjon om tempdb utslipp problemet. OPPDATERE fra SELECT: MERGE-setningenMERGE-setningen brukes til å manipulere (INSERT, UPDATE, DELETE) et mål tabellen ved å referere til en kilde tabell for matchede og umatchede rader. MERGE-setningen kan være svært nyttig for synkronisering av tabellen fra enhver kilde bordet., Nå, hvis vi går tilbake til vår posisjon, MERGE-setningen kan brukes som en alternativ metode for å oppdatere data i en tabell med de som er i en annen tabell. I denne metoden, referanse tabellen kan bli tenkt på som en kilde bord og målet tabellen vil bli tabellen for å bli oppdatert. Følgende spørring kan være et eksempel på dette bruk metoden.,
la oss Nå takle den forrige oppdateringen fra en select-spørring linje for linje.,
Vi har skrevet Personer bordet etter MERGE-setningen fordi det er målet vårt bord, som vi ønsker å oppdatere, og vi ga Per alias til den for å bruke resten av spørringen.,
After the USING statement, we have specified the source table.
ved hjelp av denne syntaks, bli med i tilstand er definert mellom mål og kilde for tabellen.
I denne siste linjen i søket, vi valgte manipulasjon metode for matchende rader. Individuelt for dette søket, vi har valgt OPPDATERING metode for matchende rader av målet bordet. Til slutt, vi har lagt til semikolon (;) tegn fordi MERGE uttalelser må avsluttes med semikolon tegn. OPPDATERE fra SELECT: Subquery MetodeEn subquery er en interiør-spørring som kan brukes inne i DML (SELECT, INSERT, UPDATE og DELETE) uttalelser., Den viktigste karakteristisk for de subquery er, de kan bare utføres med ekstern spørring. subquery metoden er svært grunnleggende og enkel metode for å oppdatere eksisterende data fra andre tabeller data. Den merkbare forskjellen i denne metoden, kan det være en praktisk måte å oppdatere en kolonne for tabeller som har et lite antall rader. Nå vil vi utfører følgende spørring og deretter vil analysere den.,
|