Izjava o ažuriranju SQL-a - Primjeri upita za ažuriranje vrijednosti tablice

SQL (izgovara se Seequel) označava jezik strukturiranih upita. Riječ je o snažno otkucanom, statičnom jeziku (tipovi se provjeravaju prije izvođenja) koji se prvi put pojavio 1974. (woah, star 46 godina!), Ali u početku je objavljen tek 1986.  

Možda mislite u sebi da takav "stari" alat ima najbolje dane iza sebe, ali daleko biste bili u pravu. 2019. godine, putem istraživanja Scale Grid DeveloperWeek, SQL je koristilo 60,5% ispitanika, dok je NoSQL koristilo samo 39,5% ispitanika.

Da budemo jasni, kategorija SQL podijeljena je na nekoliko potkategorija koje su uključivale MySQL, PostgreSQL, SQL Server i tako dalje, dok je kategorija NoSQL bila razdvojena na potkategorije koje su sadržavale MongoDB, Cassandra itd.

Čak je i 2017. godine, prema Anketi razvojnog programera stacka, drugi najpopularniji jezik koji se koristio bio SQL (odmah iza JavaScript-a) s 50% od 64 000 ispitanika koji su rekli da i dalje koriste SQL u nekom obliku.

Popularnost je, barem dijelom, posljedica jednostavnosti jezika, činjenice da je izgrađen s obzirom na relacijske podatke i zato što se dokazao kao pouzdan za pretraživanje, pridruživanje i filtriranje podataka.

Dovoljno je reći, SQL ne samo da je živ, već i napredan u današnjoj razvojnoj zajednici.

Sad da vidimo zašto!

Zabavni dijelovi

SQL Server je preferirani okus SQL-a koji koristim u svakodnevnim aktivnostima na poslu, tako da će primjeri u nastavku odgovarati tim standardima.  

Jedna od stvari za koju radim je ažuriranje više zapisa u tablici. Sad bih mogao raditi jedan po jedan zapis, ali SQL nam daje mogućnost ažuriranja više zapisa (tisuće na tisuće ako je potrebno) odjednom putem UPDATEizjave.

UPDATEIzjava može se koristiti za ažuriranje jednog stupca, veći skup zapisa (kroz korištenje uvjetima), i / ili cijelu tablicu u bazi podataka. Uvjet (i) mogu biti logička vrijednost, provjera niza ili matematički slijed koji se pretvara u logičku vrijednost (veću od, manju od itd.).

Iako se može malo razlikovati od okusa do okusa, opća je sintaksa sljedeća:

UPDATEtable-name

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

[WHEREcondition]

Gornje zagrade ([]) označavaju neobavezne dodatke upitu.  

*** Vrlo je važno napomenuti da će se bez WHEREuslova SVI zapisi u tablici ažurirati čim izvršite upit. ***

Primjeri upita

Kao naš skup podataka koristit ću ovu tablicu nazvanu Work_Tickets :

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 0,00 Lažno 079777 12,0 0
00061357 000932 1251 [email protected] 0,00 Lažno 085695 196,5 0
00061358 000933 1252 [email protected] 0,00 Lažno 085569 17.5 0

Jednostavan upit bez uvjeta

Evo vrlo jednostavnog upita za ažuriranje koji će promijeniti sva UnitCostpolja u broj 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Imajte na umu da ne postoji WHEREklauzula, pa će se svaki redak u tablici ažurirati i naš skup podataka sada će izgledati ovako:

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 131,6152 Lažno 079777 12,0 0
00061357 000932 1251 [email protected] 131,6152 Lažno 085695 196,5 0
00061358 000933 1252 [email protected] 131,6152 Lažno 085569 17.5 0

Jednostavni upiti sa uvjetom

Evo jednostavnog upita s jednom izjavom stanja:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Ovaj upit će ažurirati Billedpolje da bude istinito na svakom retku koji se podudara s uvjetom da UnitCostnije jednako 0. Nakon što pokrenemo naš upit, skup podataka izgledat će ovako:

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 131,6152 Pravi 079777 12,0 0
00061357 000932 1251 [email protected] 131,6152 Pravi 085695 196,5 0
00061358 000933 1252 [email protected] 131,6152 Pravi 085569 17.5 0

Ispod je upit u kojem mijenjamo ParentLineKeyniz 000134u koji SalesOrderNumse WorkTicketNumi podudaraju s datim nizovima.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Dakle, 085569 na ParentLineKeyterenu će biti zamijenjen s 000134i naš skup podataka sada izgleda ovako:

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 131,6152 Pravi 079777 12,0 0
00061357 000932 1251 [email protected] 131,6152 Pravi 085695 196,5 0
00061358 000933 1252 [email protected] 131,6152 Pravi 000134 17.5 0

Ažuriranje više polja

Recimo da imate mnogo veći skup podataka od onoga koji trenutno koristimo i da morate ažurirati nekoliko polja.  

Bilo bi zamorno i zapanjujuće ih ažurirati različitim izjavama o ažuriranju. Srećom po nas također je moguće ažurirati nekoliko polja odjednom naredbom ažuriranja, sve dok imena stupaca odvajamo zarezom:

UPDATE Work_Tickets

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

WHERE SalesOrderNum = 00061358

I evo rezultata s ažuriranim poljima nakon pokretanja upita:

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 131,6152 Pravi 079777 12,0 0
00061357 000932 1251 [email protected] 131,6152 Pravi 085695 196,5 0
00061358 000933 1252 [email protected] 129,8511 Pravi 000134 72 72

Korištenje ažuriranja u podupitu

Gornji primjeri savršeni su ako radite s jednim izvorom podataka. Međutim, većina vaših podataka neće biti pohranjena u jednoj tablici. Tu dobro dolazi UPDATE s više izvora podataka.

Sintaksa za ažuriranje stupca / tablice malo se mijenja ako želimo unijeti podatke iz druge tablice:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

I evo dvije tablice koje ćemo koristiti za ovaj upit - tablica Work_Tickets:

SalesOrderNum WorkTicketNum Kod kupca Customer_Contact Jedinični trošak Naplaćeno ParentLineKey Količina_Naručeno Količina_Shipped
00061356 000931 1250 [email protected] 131,6152 Pravi 079777 12,0 0
00061357 000932 1251 [email protected] 131,6152 Pravi 085695 196,5 0
00061358 000933 1252 [email protected] 129,8511 Pravi 000134 72 72

i tablica Customer_Info:

Ime Industrija Kodirati Adresa Grad Popust Broj telefona E-mail
Wayne Enterprises Obrana, oružje, zrakoplovstvo, inženjering NULL 1631. Tamni viteški put Gotham 19,75 5556614000 [email protected]
Stark Industries Obrana, naoružanje, zaštita 1251 5641 Željezo Dr. Neotkriveno 19,73 9993126156 [email protected]
Acme Corp Komedija, smijeh, animacija 1252 24569 Nasmiješena sv Toon Town 17.53 3216549877 [email protected]

UPDATEIzjava s poduprta izgleda ovako:

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

Ovaj će primjer ažurirati polje Kod na tablici Customer_Info gdje se adresa e-pošte podudara iz obje tablice. A ovako izgleda naša tablica Customer_Info :

Ime Industrija Kodirati Adresa Grad Popust Broj telefona E-mail
Wayne Enterprises Obrana, oružje, zrakoplovstvo, inženjering 1250 1631. Tamni viteški put Gotham 19,75 5556614000 [email protected]
Stark Industries Obrana, naoružanje, zaštita 1251 5641 Željezo Dr. Neotkriveno 19,73 9993126156 [email protected]
Acme Corp Komedija, smijeh, animacija 1252 24569 Nasmiješena sv Toon Town 17.53 3216549877 [email protected]

Završavati

Nadam se da vam je ovaj članak bio koristan u razumijevanju načina na koji UPDATE izraz radi u SQL-u.

Sada ste spremni napisati vlastite SQL UPDATE izjave poput šampiona! Nakon što to učinite, volio bih da ih podijelite sa mnom na društvenim mrežama!

Ne zaboravite provjeriti moj blog na kojem često objavljujem članke o web razvoju.

Dok ste tamo, zašto se ne biste prijavili za moj bilten? To možete učiniti u gornjem desnom dijelu glavne stranice bloga. Volim svako malo slati zanimljive članke (svoje i druge), resurse i alate za programere.

Ako imate pitanja o ovom članku ili su općenito moji DM-ovi otvoreni - dođite i pozdravite se na Twitteru ili bilo kojem od mojih drugih računa na društvenim mrežama koje možete pronaći ispod biltena, prijavite se na glavnoj stranici mog bloga ili na mom profilu ovdje na fCC :)

Ugodan dan i sretno kodiranje, prijatelju!