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 UPDATE
utasításon keresztül .
A UPDATE
kimutatá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-nameSETcolumn-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 WHERE
felté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 UnitCost
mezőt a számra változtatja 131.6152
:
UPDATE Work_Tickets
SET UnitCost = 131.6152
Ne feledje, hogy nincs WHERE
zá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_TicketsSET Billed = true
WHERE UnitCost 0.00
Ez a lekérdezés frissíti a Billed
mezőt igazra minden olyan soron, amely megfelel a UnitCost
nem 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 ParentLineKey
hogy a húr 000134
, ahol a SalesOrderNum
és a WorkTicketNum
két mérkőzés az adott húrok.
UPDATE Work_TicketsSET ParentLineKey = 000134
WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933
Tehát a ParentLineKey
mező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_TicketsSET 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-nameSETcolumn-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 | |
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_InfoSET 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 | |
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!