SQL Update Statement - Példa lekérdezések a táblázatértékek frissítésére

Az SQL (ejtsd: Seequel) a strukturált lekérdezés nyelvét jelenti. Ez egy erősen tipizált, statikus (a típusokat futás előtt ellenőrzik) lekérdező nyelv, amely 1974-ben jelent meg először (woah, 46 éves!), De eredetileg csak 1986-ban jelent meg.  

Lehet, hogy azt gondolja magában, hogy egy ilyen "régi" eszköznek a legjobb napjai vannak mögötte, de korántsem lenne helyes. 2019-ben a Scale Grid DeveloperWeek felmérés révén az SQL-t a válaszadók 60,5% -a, míg a NoSQL-t a válaszadók csak 39,5% -a használta.

Az egyértelműség kedvéért az SQL kategóriát több alkategóriára bontották, köztük a MySQL, a PostgreSQL, az SQL Server és így tovább, míg a NoSQL kategóriát alkategóriákra bontották, amelyek MongoDB, Cassandra stb.

A Stack Overflow Developer felmérése szerint még 2017-ben is a második legnépszerűbb nyelv volt az SQL (közvetlenül a JavaScript mögött), a 64 000 válaszadó 50% -a szerint továbbra is valamilyen formában használja az SQL-t.

Népszerűségét - legalábbis részben - a nyelv egyszerűségének, annak a ténynek köszönheti, hogy a relációs adatokat szem előtt tartva építették fel, és mert megbízhatónak bizonyult adatok keresésében, összekapcsolásában és szűrésében.

Elég csak annyit mondanunk, hogy az SQL nem csak él és lendületes, de virágzik is a mai fejlesztői közösség körében.

Most nézzük meg, miért!

A szórakoztató részek

Az SQL Server az SQL előnyben részesített íze, amelyet napi munkám során használok, így az alábbi példák megfelelnek ezeknek a szabványoknak.  

Egy dolog, amit nagyon sokat csinálok, az az, hogy több rekordot is frissítek egy táblázatban. Most egyszerre megtehetem ezt a rekordot, de az SQL lehetőséget nyújt arra, hogy egyszerre több (szükség esetén ezer-ezer) rekordot frissítsünk az UPDATEutasításon keresztül .

A UPDATEkimutatás felhasználható egyetlen oszlop, egy nagyobb rekordkészlet (feltételek használatával) és / vagy az adatbázis teljes táblájának frissítésére. A feltétel (ek) lehet logikai érték, karakterlánc-ellenőrzés vagy matematikai sorrend, amely logikai értékre változik (nagyobb, kevesebb, mint stb.).

Noha ízenként eltérhet kissé, az általános szintaxis a következő:

UPDATEtable-name

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

[WHEREcondition]

A fenti zárójelek ([]) a lekérdezés opcionális kiegészítéseit jelölik.  

*** Nagyon fontos megjegyezni, hogy WHEREfeltétel nélkül a táblázat MINDEN rekordja frissül, amint végrehajtja a lekérdezést. ***

Példa lekérdezésekre

Adatkészletként ezt a Work_Tickets nevű táblázatot fogom használni :

SalesOrderNum WorkTicketNum Ügyfélkód Ügyfél_Kapcsolat Darabköltség Számlázva ParentLineKey Mennyiség_Rendelve Mennyiség_Szállítva
00061356 000931 1250 [email protected] 0,00 Hamis 079777 12.0 0
00061357 000932 1251 [email protected] 0,00 Hamis 085695 196.5 0
00061358 000933 1252 [email protected] 0,00 Hamis 085569 17.5 0

Egyszerű lekérdezés feltételek nélkül

Itt van egy nagyon egyszerű frissítési lekérdezés, amely az összes UnitCostmezőt a számra változtatja 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Ne feledje, hogy nincs WHEREzáradék, ezért a táblázat minden sora frissül, és az adatkészletünk így fog kinézni:

SalesOrderNum WorkTicketNum Ügyfélkód Ügyfél_Kapcsolat Darabköltség Számlázva ParentLineKey Mennyiség_Rendelve Mennyiség_Szállítva
00061356 000931 1250 [email protected] 131.6152 Hamis 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Hamis 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Hamis 085569 17.5 0

Egyszerű lekérdezések feltétel (ek) el

Itt egy egyszerű lekérdezés egy feltételfeltétellel:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Ez a lekérdezés frissíti a Billedmezőt igazra minden olyan soron, amely megfelel a UnitCostnem egyenlő 0 feltételének . Miután lefuttattuk a lekérdezésünket, az adatkészlet így fog kinézni:

SalesOrderNum WorkTicketNum Ügyfélkód Ügyfél_Kapcsolat Darabköltség Számlázva ParentLineKey Mennyiség_Rendelve Mennyiség_Szállítva
00061356 000931 1250 [email protected] 131.6152 Igaz 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Igaz 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Igaz 085569 17.5 0

Az alábbiakban egy lekérdezést, ahol módosíthatja a ParentLineKeyhogy a húr 000134, ahol a SalesOrderNumés a WorkTicketNumkét mérkőzés az adott húrok.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

Tehát a ParentLineKeymezőben lévő 085569 helyébe a következő lép, 000134és az adatkészletünk így néz ki:

SalesOrderNum WorkTicketNum Ügyfélkód Ügyfél_Kapcsolat Darabköltség Számlázva ParentLineKey Mennyiség_Rendelve Mennyiség_Szállítva
00061356 000931 1250 [email protected] 131.6152 Igaz 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Igaz 085695 196.5 0
00061358 000933 1252 [email protected] 131.6152 Igaz 000134 17.5 0

Több mező frissítése

Tegyük fel, hogy sokkal nagyobb adatkészlettel rendelkezik, mint amit jelenleg használunk, és több mezőt kell frissítenie.  

Unalmas és elgondolkodtató lenne frissíteni őket különböző frissítési utasításokkal. Szerencsénkre az is lehetséges, hogy egyszerre több mezőt is frissítsünk egy frissítési utasítással, amennyiben vesszük az oszlopok nevét vesszővel:

UPDATE Work_Tickets

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

WHERE SalesOrderNum = 00061358

És itt van az eredmény a frissített mezőkkel a lekérdezés futtatása után:

SalesOrderNum WorkTicketNum Ügyfélkód Ügyfél_Kapcsolat Darabköltség Számlázva ParentLineKey Mennyiség_Rendelve Mennyiség_Szállítva
00061356 000931 1250 [email protected] 131.6152 Igaz 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 Igaz 085695 196.5 0
00061358 000933 1252 [email protected] 129.8511 Igaz 000134 72 72

A Frissítés használata allekérdezésben

The above examples are perfect if you are working with one data source. However, most of your data will not be stored in a single table. That's where using UPDATE with multiple data sources comes in handy.

The syntax for updating a column/table changes a little if we want to bring in data from another table:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

And here are the two tables we'll be using for this query - the Work_Tickets table:

SalesOrderNum WorkTicketNum Customer_Code Customer_Contact UnitCost Billed ParentLineKey Qty_Ordered Qty_Shipped
00061356 000931 1250 [email protected] 131.6152 True 079777 12.0 0
00061357 000932 1251 [email protected] 131.6152 True 085695 196.5 0
00061358 000933 1252 [email protected] 129.8511 True 000134 72 72

and the Customer_Info table :

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring NULL 1631 Dark Knight Way Gotham 19.75 5556614000 [email protected]
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 [email protected]
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 [email protected]

The UPDATE statement with a subquery looks like this:

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

This example will update the Code field on the Customer_Info table where the email address match from both tables. And this is what our Customer_Info table looks like now:

Name Industry Code Address City Discount PhoneNumber Email
Wayne Enterprises Defense,weaponry,aerospace,enginerring 1250 1631 Dark Knight Way Gotham 19.75 5556614000 [email protected]
Stark Industries Defense,weaponry,protection 1251 5641 Iron Dr Undisclosed 19.73 9993126156 [email protected]
Acme Corp Comedy,laughter,animation 1252 24569 Smiling St Toon Town 17.53 3216549877 [email protected]

Wrapping up

I hope this article has been helpful to you in understanding how the UPDATE statement works in SQL.

You're now ready to write your own SQL UPDATE statements like a champ! After you do, I'd love for you to share them with me on social media!

Don't forget to check out my blog where I frequently post articles about web development.

While you're there why not sign up for my newsletter? You can do that at the top right of the main blog page. I like to send out interesting articles (mine and others), resources, and tools for  developers every now and then.

If you have questions about this article or just in general my DMs are open – come say hi on Twitter or any of my other social media accounts which you can find below the newsletter sign up on the main page of my blog or on my profile here at fCC :)

Have an awesome day and happy coding, friend!