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 році, згідно з опитуванням розробника стека, другою за популярністю мовою був SQL (безпосередньо за JavaScript), 50% з 64 000 респондентів заявили, що вони все ще використовують SQL у певній формі.
Його популярність, принаймні частково, пов’язана з простотою мови, тим, що вона була побудована з урахуванням реляційних даних, і тому, що вона зарекомендувала себе як надійну для пошуку, об’єднання та фільтрації даних.
Достатньо сказати, що SQL не тільки живий і норовитий, але і процвітає серед сучасного співтовариства розробників.
А тепер подивимось чому!
Веселі частини
SQL Server - найкращий аромат SQL, який я використовую у своїй щоденній роботі, тому приклади нижче відповідають цим стандартам.
Одне, що я багато в чому роблю - це оновлення декількох записів у таблиці. Тепер я міг робити це по одному запису, але SQL надає нам можливість оновлювати декілька (тисячі на тисячі, якщо потрібно) записів одночасно за допомогою UPDATE
оператора.
Оператор UPDATE
може бути використаний для оновлення одного стовпця, більшого набору записів (за допомогою умов) та / або всієї таблиці в базі даних. Умовою (умовами) можуть бути логічні значення, перевірка рядків або математична послідовність, яка перетворюється на логічну (більшу, меншу, ніж тощо).
Хоча він може дещо відрізнятися від смаку до смаку, загальний синтаксис такий:
UPDATEtable-nameSETcolumn-name = value[, column-name=value]
[WHEREcondition]
Дужки ([]) вище позначають необов’язкові доповнення до запиту.
*** Дуже важливо відзначити, що без WHERE
умови ВСІ записи в таблиці будуть оновлені, як тільки ви виконаєте запит. ***
Приклади запитів
Як наш набір даних я буду використовувати цю таблицю з назвою Work_Tickets :
SalesOrderNum | WorkTicketNum | Customer_Code | Customer_Contact | UnitCost | Виставляється рахунок | ParentLineKey | Кількість_замовлена | Кількість_Поставлено |
00061356 | 000931 | 1250 | [email protected] | 0,00 | помилковий | 079777 | 12,0 | 0 |
00061357 | 000932 | 1251 | [email protected] | 0,00 | помилковий | 085695 | 196,5 | 0 |
00061358 | 000933 | 1252 | [email protected] | 0,00 | помилковий | 085569 | 17.5 | 0 |
Простий запит без умов
Ось дуже простий запит оновлення, який змінить усі UnitCost
поля на число 131.6152
:
UPDATE Work_Tickets
SET UnitCost = 131.6152
Зверніть увагу, що WHERE
речення відсутнє , тому кожен рядок у таблиці буде оновлено, і наш набір даних тепер виглядатиме так:
SalesOrderNum | WorkTicketNum | Customer_Code | Customer_Contact | UnitCost | Виставляється рахунок | ParentLineKey | Кількість_замовлена | Кількість_Поставлено |
00061356 | 000931 | 1250 | [email protected] | 131,6152 | помилковий | 079777 | 12,0 | 0 |
00061357 | 000932 | 1251 | [email protected] | 131,6152 | помилковий | 085695 | 196,5 | 0 |
00061358 | 000933 | 1252 | [email protected] | 131,6152 | помилковий | 085569 | 17.5 | 0 |
Прості запити з умовою
Ось простий запит з одним твердженням умови:
UPDATE Work_TicketsSET Billed = true
WHERE UnitCost 0.00
Цей запит оновить Billed
поле, щоб воно було істинним у кожному рядку, який відповідає умові, що UnitCost
не дорівнює 0. Після того, як ми виконаємо наш запит, набір даних буде виглядати так:
SalesOrderNum | WorkTicketNum | Customer_Code | Customer_Contact | UnitCost | Виставляється рахунок | ParentLineKey | Кількість_замовлена | Кількість_Поставлено |
00061356 | 000931 | 1250 | [email protected] | 131,6152 | Правда | 079777 | 12,0 | 0 |
00061357 | 000932 | 1251 | [email protected] | 131,6152 | Правда | 085695 | 196,5 | 0 |
00061358 | 000933 | 1252 | [email protected] | 131,6152 | Правда | 085569 | 17.5 | 0 |
Нижче наведено запит, де ми міняємо на ParentLineKey
рядок, 000134
де SalesOrderNum
і WorkTicketNum
обидва відповідають заданим рядкам.
UPDATE Work_TicketsSET ParentLineKey = 000134
WHERE SalesOrderNum = 00061358 and WorkTicketNumber = 000933
Отже, 085569 у ParentLineKey
полі буде замінено на, 000134
і наш набір даних тепер виглядає так:
SalesOrderNum | WorkTicketNum | Customer_Code | Customer_Contact | UnitCost | Виставляється рахунок | ParentLineKey | Кількість_замовлена | Кількість_Поставлено |
00061356 | 000931 | 1250 | [email protected] | 131,6152 | Правда | 079777 | 12,0 | 0 |
00061357 | 000932 | 1251 | [email protected] | 131,6152 | Правда | 085695 | 196,5 | 0 |
00061358 | 000933 | 1252 | [email protected] | 131,6152 | Правда | 000134 | 17.5 | 0 |
Оновлення кількох полів
Скажімо, у вас є набагато більший набір даних, ніж той, який ми використовуємо зараз, і вам потрібно оновити кілька полів.
Було б нудно і очманіло, оновлювати їх різними заявами про оновлення. На щастя для нас, можна також оновити кілька полів одночасно за допомогою оператора оновлення, якщо ми відокремлюємо імена стовпців комою:
UPDATE Work_TicketsSET UnitCost = 129.8511, Qty_Ordered = 72, Qty_Shipped = 72
WHERE SalesOrderNum = 00061358
І ось результат із оновленими полями після запуску запиту:
SalesOrderNum | WorkTicketNum | Customer_Code | Customer_Contact | UnitCost | Виставляється рахунок | ParentLineKey | Кількість_замовлена | Кількість_Поставлено |
00061356 | 000931 | 1250 | [email protected] | 131,6152 | Правда | 079777 | 12,0 | 0 |
00061357 | 000932 | 1251 | [email protected] | 131,6152 | Правда | 085695 | 196,5 | 0 |
00061358 | 000933 | 1252 | [email protected] | 129,8511 | Правда | 000134 | 72 | 72 |
Використання оновлення в підзапиті
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!