Изявление за актуализация на SQL - Примерни заявки за актуализиране на стойностите на таблицата

SQL (произнася се Seequel) означава структуриран език за заявки. Това е силно типизиран, статичен (типовете се проверяват преди изпълнение) език за заявки, който се появява за първи път през 1974 г. (woah, на 46 години!), Но първоначално е пуснат едва през 1986 г.  

Може би си мислите, че такъв „стар“ инструмент има най-добрите си дни зад себе си, но далеч не сте прави. През 2019 г. чрез проучването Scale Grid DeveloperWeek SQL се използва от 60,5% от анкетираните, докато NoSQL се използва само от 39,5% от анкетираните.

За да бъде ясно, категорията SQL беше разделена на няколко подкатегории, които включваха MySQL, PostgreSQL, SQL Server и т.н., докато категорията NoSQL беше разделена на подкатегории, които съдържаха MongoDB, Cassandra и т.н.

Дори през 2017 г., според проучването на Stack Overflow Developer's Survey, вторият най-популярен език е SQL (точно зад JavaScript), като 50% от 64 000 респонденти казват, че все още използват SQL под някаква форма.

Популярността му се дължи, поне отчасти, на простотата на езика, на факта, че е построен с релационни данни и защото се е доказал като надежден за търсене, присъединяване и филтриране на данни.

Достатъчно е да се каже, че SQL е не само жив, но и процъфтяващ сред днешната общност за разработки.

Сега да видим защо!

Забавните части

SQL Server е предпочитаният вкус на SQL, който използвам в ежедневните си дейности на работа, така че примерите по-долу ще съответстват на тези стандарти.  

Едно нещо, за което се занимавам много, е да актуализирам множество записи в таблица. Сега бих могъл да направя този запис наведнъж, но SQL ни дава възможност да актуализираме множество (хиляди върху хиляди, ако е необходимо) записи наведнъж чрез UPDATEизявлението.

Операторът UPDATEможе да се използва за актуализиране на една колона, по-голям набор от записи (чрез използване на условия) и / или цялата таблица в база данни. Условието може да бъде булева стойност, проверка на низове или математическа последователност, която се преобразува в булева стойност (по-голяма от, по-малка от и т.н.).

Въпреки че може да варира леко от вкус до вкус, общият синтаксис е следният:

UPDATEtable-name

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

[WHEREcondition]

Скобите ([]) по-горе означават незадължителни допълнения към заявката.  

*** Много е важно да се отбележи, че без WHEREусловие, ВСИЧКИ записи в таблицата ще бъдат актуализирани веднага след като изпълните заявката. ***

Примерни заявки

Като наш набор от данни ще използвам тази таблица с име Work_Tickets :

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]0,00Невярно07977712.00
000613570009321251[email protected]0,00Невярно085695196,50
000613580009331252[email protected]0,00Невярно08556917.50

Проста заявка без условия

Ето една много проста заявка за актуализация, която ще промени всички UnitCostполета на числото 131.6152:

UPDATE Work_Tickets

SET UnitCost = 131.6152

Имайте предвид, че няма WHEREклауза, така че всеки ред в таблицата ще бъде актуализиран и нашият набор от данни ще изглежда така:

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]131,6152Невярно07977712.00
000613570009321251[email protected]131,6152Невярно085695196,50
000613580009331252[email protected]131,6152Невярно08556917.50

Прости заявки с условие (а)

Ето една проста заявка с един израз:

UPDATE Work_Tickets

SET Billed = true

WHERE UnitCost 0.00

Тази заявка ще актуализира Billedполето, за да е вярно на всеки ред, който съответства на условието на UnitCostне равно на 0. След като изпълним нашата заявка, наборът от данни ще изглежда така:

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]131,6152Вярно07977712.00
000613570009321251[email protected]131,6152Вярно085695196,50
000613580009331252[email protected]131,6152Вярно08556917.50

По-долу има заявка, при която променяме ParentLineKeyниза, 000134където SalesOrderNumи WorkTicketNumдвете съответстват на дадените низове.

UPDATE Work_Tickets

SET ParentLineKey = 000134

WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933

И така, 085569 в ParentLineKeyполето ще бъде заменен с 000134и нашият набор от данни сега изглежда така:

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]131,6152Вярно07977712.00
000613570009321251[email protected]131,6152Вярно085695196,50
000613580009331252[email protected]131,6152Вярно00013417.50

Актуализиране на множество полета

Да приемем, че имате много по-голям набор от данни, който използваме в момента, и имате няколко полета за актуализиране.  

Би било досадно и умопомрачително да ги актуализирате с различни изявления за актуализация. За наш късмет също е възможно да актуализираме няколко полета наведнъж с оператор за актуализация, стига да разделяме имената на колоните със запетая:

UPDATE Work_Tickets

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

WHERE SalesOrderNum = 00061358

И ето резултата с актуализираните полета след изпълнение на заявката:

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]131,6152Вярно07977712.00
000613570009321251[email protected]131,6152Вярно085695196,50
000613580009331252[email protected]129,8511Вярно0001347272

Използване на актуализация в подзаявка

Горните примери са идеални, ако работите с един източник на данни. Повечето от вашите данни обаче няма да се съхраняват в една таблица. Ето къде е полезно използването на UPDATE с множество източници на данни.

Синтаксисът за актуализиране на колона / таблица се променя малко, ако искаме да въведем данни от друга таблица:

UPDATEtable-name

SETcolumn-name = (SELECT column name(s)

FROM table2-name

WHERE condition(s))

[WHEREcondition]

И ето двете таблици, които ще използваме за тази заявка - таблицата Work_Tickets:

SalesOrderNumWorkTicketNumКод на клиентаCustomer_ContactЕдинична ценаТаксуванParentLineKeyКоличество_ ПоръчаноКоличество_изпратено
000613560009311250[email protected]131,6152Вярно07977712.00
000613570009321251[email protected]131,6152Вярно085695196,50
000613580009331252[email protected]129,8511Вярно0001347272

и таблицата Customer_Info:

ИмеПромишленостКодАдресГрадОтстъпкаТелефонен номерелектронна поща
Уейн ЕнтърпрайсисDefense,weaponry,aerospace,enginerringNULL1631 Dark Knight WayGotham19.755556614000[email protected]
Stark IndustriesDefense,weaponry,protection12515641 Iron DrUndisclosed19.739993126156[email protected]
Acme CorpComedy,laughter,animation125224569 Smiling StToon Town17.533216549877[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:

NameIndustryCodeAddressCityDiscountPhoneNumberEmail
Wayne EnterprisesDefense,weaponry,aerospace,enginerring12501631 Dark Knight WayGotham19.755556614000[email protected]
Stark IndustriesDefense,weaponry,protection12515641 Iron DrUndisclosed19.739993126156[email protected]
Acme CorpComedy,laughter,animation125224569 Smiling StToon Town17.533216549877[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!