SQL-opdateringserklæring - Eksempel på forespørgsler til opdatering af tabelværdier

SQL (udtales Seequel) står for Structured Query Language. Det er et stærkt skrevet, statisk (typer kontrolleres før runtime) forespørgselssprog, der først dukkede op i 1974 (woah, 46 år gammel!), Men blev først udgivet først i 1986.  

Du tænker måske over for dig selv, at et sådant "gammelt" værktøj har sine bedste dage bag sig, men du ville være langt fra korrekt. I 2019 blev Scale Grid DeveloperWeek-undersøgelsen brugt af 60,5% af respondenterne, mens NoSQL kun blev brugt af 39,5% af respondenterne.

For at være klar blev SQL-kategorien opdelt i flere underkategorier, der omfattede MySQL, PostgreSQL, SQL Server osv., Mens NoSQL-kategorien blev opdelt i underkategorier, der indeholdt MongoDB, Cassandra osv.

Selv i 2017 var SQL (lige bag JavaScript) ifølge Stack Overflow Developer's Survey det næstmest populære sprog, hvor 50% af de 64.000 respondenter sagde, at de stadig bruger SQL i en eller anden form.

Populariteten skyldes i det mindste delvis sprogets enkelhed, det faktum, at det blev bygget med relationelle data i tankerne, og fordi det har vist sig at være pålideligt til søgning, sammenføjning og filtrering af data.

Det er tilstrækkeligt at sige, at SQL ikke kun lever og sparker, men trives blandt nutidens udviklingssamfund.

Lad os nu se hvorfor!

De sjove dele

SQL Server er den foretrukne smag af SQL, som jeg bruger i mine daglige aktiviteter på arbejdspladsen, så eksemplerne nedenfor overholder disse standarder.  

En ting, jeg finder ud af, at jeg gør meget, er at opdatere flere poster inden for en tabel. Nu kunne jeg gøre denne ene post ad gangen, men SQL giver os muligheden for at opdatere flere (tusinder på tusinder, hvis det er nødvendigt) poster på én gang gennem UPDATEerklæringen.

Det UPDATEudsagn kan bruges til at opdatere en enkelt kolonne, et større sæt af poster (gennem anvendelse af betingelser), og / eller hele tabellen i en database. Betingelsen / betingelserne kan være en boolsk, en strengkontrol eller en matematisk sekvens, der løser sig til en boolsk (større end, mindre end osv.).

Selvom det kan variere lidt fra smag til smag, er den generelle syntaks som følger:

UPDATEtable-name

SETcolumn-name = value[, column-name=value]

[WHEREcondition]

Beslagene ([]) ovenfor angiver valgfri tilføjelser til forespørgslen.  

*** Det er meget vigtigt at bemærke, at WHEREALLE poster i tabellen uden en betingelse opdateres, så snart du udfører forespørgslen. ***

Eksempel på forespørgsler

Som vores datasæt bruger jeg denne tabel med navnet Work_Tickets :

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 0,00 Falsk 079777 12.0 0
00061357 000932 1251 [email protected] 0,00 Falsk 085695 196,5 0
00061358 000933 1252 [email protected] 0,00 Falsk 085569 17.5 0

Enkel forespørgsel uden betingelser

Her er en meget enkel opdateringsforespørgsel, der ændrer alle UnitCostfelterne til nummeret 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Bemærk, at der ikke er nogen WHEREklausul, så hver linje i tabellen opdateres, og vores datasæt vil nu se sådan ud:

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 131.6152 Falsk 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Falsk 085695 196,5 0
00061358 000933 1252 [email protected] 131.6152 Falsk 085569 17.5 0

Enkle forespørgsler med betingelse (r)

Her er en simpel forespørgsel med en betingelseserklæring:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Denne forespørgsel opdaterer Billedfeltet til at være sandt på hver linje, der matcher betingelsen for UnitCostikke at være lig med 0. Når vi har kørt vores forespørgsel, vil datasættet se sådan ud:

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 131.6152 Rigtigt 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Rigtigt 085695 196,5 0
00061358 000933 1252 [email protected] 131.6152 Rigtigt 085569 17.5 0

Nedenfor er en forespørgsel, hvor vi ændrer ParentLineKeystrengen, 000134hvor både SalesOrderNumog WorkTicketNumbegge matcher de givne strenge.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Så 085569 i ParentLineKeymarken erstattes med, 000134og vores datasæt ser nu sådan ud:

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 131.6152 Rigtigt 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Rigtigt 085695 196,5 0
00061358 000933 1252 [email protected] 131.6152 Rigtigt 000134 17.5 0

Opdatering af flere felter

Lad os sige, at du har et meget større datasæt end det, vi bruger i øjeblikket, og at du har flere felter at opdatere.  

Det ville være kedeligt og bedøvende at opdatere dem med forskellige opdateringserklæringer. Heldigvis for os er det også muligt at opdatere flere felter på én gang med en opdateringserklæring, så længe vi adskiller kolonnenavnene med et komma:

UPDATE Work_Tickets

SET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72

WHERE SalesOrderNum = 00061358

Og her er resultatet med de opdaterede felter efter kørsel af forespørgslen:

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 131.6152 Rigtigt 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Rigtigt 085695 196,5 0
00061358 000933 1252 [email protected] 129,8511 Rigtigt 000134 72 72

Brug af opdatering i en underforespørgsel

Ovenstående eksempler er perfekte, hvis du arbejder med en datakilde. De fleste af dine data gemmes dog ikke i en enkelt tabel. Det er her brug af UPDATE med flere datakilder er praktisk.

Syntaksen for opdatering af en kolonne / tabel ændrer sig lidt, hvis vi vil hente data fra en anden tabel:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

Og her er de to tabeller, vi bruger til denne forespørgsel - tabellen Work_Tickets:

SalgOrderNum WorkTicketNum Kunde_kode Kunde_Kontakt Enhedspris Faktureret ParentLineKey Antal_Bestilt Antal
00061356 000931 1250 [email protected] 131.6152 Rigtigt 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Rigtigt 085695 196,5 0
00061358 000933 1252 [email protected] 129,8511 Rigtigt 000134 72 72

og Customer_Info-tabellen:

Navn Industri Kode Adresse By Rabat Telefonnummer E-mail
Wayne Enterprises Forsvar, våben, rumfart, motorvej NUL 1631 Dark Knight Way Gotham 19.75 5556614000 [email protected]
Stark Industries Forsvar, våben, beskyttelse 1251 5641 Jern Dr Ikke offentliggjort 19.73 9993126156 [email protected]
Acme Corp. Komedie, latter, animation 1252 24569 Smilende St Toon by 17.53 3216549877 [email protected]

Den UPDATEsætning med en underforespørgsel ser sådan ud:

UPDATE Customer_Info

SET Code = (SELECT Customer_Code

FROM Work_Tickets

WHERE Work_Tickets.Customer_Contact = Customer_Info.Email)

FROM Work_Tickets

WHERE Code IS NULL

Dette eksempel opdaterer feltet Kode i Customer_Info- tabellen, hvor e-mail-adressen matcher fra begge tabeller. Og sådan ser vores Customer_Info- tabel ud nu:

Navn Industri Kode Adresse By Rabat Telefonnummer E-mail
Wayne Enterprises Forsvar, våben, rumfart, motorvej 1250 1631 Dark Knight Way Gotham 19.75 5556614000 [email protected]
Stark Industries Forsvar, våben, beskyttelse 1251 5641 Jern Dr Ikke offentliggjort 19.73 9993126156 [email protected]
Acme Corp. Komedie, latter, animation 1252 24569 Smilende St Toon by 17.53 3216549877 [email protected]

Afslutter

Jeg håber, at denne artikel har været nyttigt for dig med at forstå, hvordan UPDATE- sætningen fungerer i SQL.

Du er nu klar til at skrive dine egne SQL UPDATE- udsagn som en mester! Når du har gjort det, vil jeg meget gerne have, at du deler dem med mig på sociale medier!

Glem ikke at tjekke min blog, hvor jeg ofte skriver artikler om webudvikling.

Mens du er der, hvorfor ikke tilmelde dig mit nyhedsbrev? Du kan gøre det øverst til højre på hovedblogsiden. Jeg kan godt lide at sende interessante artikler (mine og andre), ressourcer og værktøjer til udviklere i ny og næ.

Hvis du har spørgsmål om denne artikel eller bare generelt, er mine DM'er åbne - kom og sig hej på Twitter eller en af ​​mine andre sociale mediekonti, som du kan finde under nyhedsbrevet, tilmeld dig på hovedsiden på min blog eller på min profil her hos fCC :)

Hav en fantastisk dag og god kodning, ven!