Декодування команди SQL UPDATE

Дізнайтеся, як використовувати команду SQL UPDATE для оновлення записів у таблиці бази даних.

Як розробник, вам має бути зручно працювати з реляційними базами даних. SQL (або мова структурованих запитів) – це інтуїтивно зрозуміла для початківців мова, яка має простий синтаксис. SQL дозволяє створювати об’єкти бази даних і запитувати таблиці реляційної бази даних.

Ви можете виконувати запити SQL для створення, читання, оновлення та видалення записів у таблиці бази даних. Можливо, ви знаєте, що ці операції разом називаються операціями CRUD.

Щоб оновити записи, що зберігаються в таблиці бази даних, можна виконати команду UPDATE у SQL.

У цьому посібнику ви дізнаєтеся:

  • Синтаксис команди UPDATE
  • Як оновити записи на основі певної умови або кількох умов, об’єднаних разом за допомогою логічних операторів
  • Загальне застереження, про яке слід пам’ятати під час виконання команди SQL UPDATE

Синтаксис команди SQL UPDATE

Синтаксис команди SQL UPDATE такий:

UPDATE table_name
SET column = new_value
WHERE condition;

Наведений вище запит оновлює стовпець для всіх записів, де умова виконується.

Щоб оновити кілька стовпців (або полів), використовуйте команду SQL UPDATE так:

UPDATE table_name
SET column_1 = new_value_1, column_2 = new_value_2, ..., column_k = new_value_k
WHERE condition;

Згадайте, що в реляційній базі даних:

  • Таблиця представляє сутність.
  • Рядки таблиці є записами та представляють екземпляр сутності.
  • Стовпці також називаються полями або атрибутами. У цьому підручнику ми будемо взаємозамінно використовувати стовпці та поля.

Приклади використання команди SQL UPDATE

Тепер візьмемо кілька прикладів.

передумови

Перш ніж почати кодування:

  • У цьому посібнику використовується SQLite. Тож вам знадобиться SQLite і Браузер бази даних SQLite (рекомендовано) для кодування. Зверніть увагу, що ви також можете використовувати MySQL або PostgreSQL.
  • Якщо ви хочете відтворити приклад, вам знадобиться Python і Пакет Faker Python так само.

Створення таблиці бази даних із записами

Якщо ви бажаєте використовувати код разом із цим посібником, ви можете запустити наведений нижче фрагмент коду, щоб створити та підключитися до бази даних клієнтів customer_db.db. Зауважте, що ми використовуємо бібліотеку Faker Python для створення синтетичних даних для вставки в таблицю клієнтів:

# main.py

import sqlite3
from faker import Faker
import random

# connect to the db
conn = sqlite3.connect('customer_db.db')
cur = conn.cur()

# create a database table
cur.execute('''CREATE TABLE customers (
                  customerID INTEGER PRIMARY KEY,
                  name TEXT,
                  city TEXT,
                  email TEXT,
                  num_orders INTEGER,
                  discount INTEGER DEFAULT 2)''')


# create a Faker object 
fake = Faker()
Faker.seed(42)

for _ in range(15):
    name = fake.name()
    city = fake.city()
    d = fake.domain_name()
    email = f"{name[:2]}.{city[:2]}@{d}"
    num_orders = random.choice(range(200))
    db_cursor.execute('INSERT INTO customers (name, city, email, num_orders) 
    VALUES (?,?,?,?)', (name,city,email,num_orders))

# commit the transaction 
conn.commit()
cur.close()
conn.close()

📑 Щоб цей код працював без помилок, переконайтеся, що у вас є Python 3.7 (або новіша версія) і Факер встановлено у вашому середовищі розробки. Ви можете встановити пакет Faker Python за допомогою pip:

pip install faker

Якщо у вас уже є база даних, до якої можна підключитися, і таблиця бази даних, до якої можна надсилати запити, ви також можете використовувати їх як бажане.

Виконуємо наш перший запит SQL

Таблиця клієнтів має такі поля:

  • customerID: customerID — це первинний ключ, який допомагає нам унікально ідентифікувати запис у таблиці бази даних.
  • ім’я: Ім’я замовника
  • місто: Місто, якому вони належать.
  • email: адреса електронної пошти.
  • num_orders: кількість розміщених замовлень.
  • discount: відсоток знижки, ціле число зі значенням за замовчуванням 2. Оскільки поле знижки має значення за замовчуванням, нам не потрібно вставляти значення для нього під час заповнення таблиці бази даних.

📝 Ви можете виконувати запити та переглядати результати за допомогою клієнта командного рядка SQLite. Або ви можете використовувати браузер бази даних SQLite.

Я наведу результати браузера SQLite DB Browser, оскільки їх легко інтерпретувати.

Виконайте такий запит, щоб отримати всі записи в таблиці клієнтів:

SELECT * FROM customers;

На практиці вам слід уникати використання SELECT *, якщо це не необхідно. Але для цього прикладу ми використаємо його, оскільки у нас лише 15 записів і небагато полів.

Оновлення записів на основі однієї умови

Тепер, коли ми знаємо, як виглядає наша таблиця, давайте запустимо кілька запитів UPDATE, щоб оновити записи відповідно до необхідної умови.

📋 Примітка. Після виконання операторів UPDATE ми запустимо SELECT * FROM клієнтів, щоб побачити оновлені записи.

Оновлення одного поля

Спочатку оновимо поле міста запису з customerID=7:

UPDATE customers
SET city='Codeshire'
WHERE customerID=7;

Виділимо всі стовпці та записи з таблиці клієнтів:

SELECT * FROM customers;

Ми бачимо, що поле міста Даніель Форд (customerID=7) оновлено.

Оновлення кількох полів

У попередньому прикладі ми оновили лише одне поле, а саме місто запису, що відповідає customerID 7. Але ми також можемо оновити кілька полів, використовуючи вивчений синтаксис.

Тут ми оновлюємо як місто, так і поле електронної пошти, що відповідає ідентифікатору клієнта 1:

UPDATE customers
SET city='East Carlisle',email="[email protected]"
WHERE customerID=1;

Далі запускаємо:

SELECT * FROM customers;

І ось результат:

Оновлення кількох записів

Оскільки ми використовували ідентифікатор клієнта, який є первинним ключем, який унікально ідентифікує запис клієнта, запити, які ми виконували досі, оновлювали лише один із записів.

Однак, якщо умова виконується для кількох записів у таблиці, виконання команди оновлення SQL оновлює всі відповідні записи.

Візьмемо, наприклад, цей запит:

UPDATE customers 
SET discount=10
WHERE num_orders > 170;

Тепер запустіть цей запит:

SELECT * FROM customers;

Ось результат:

Запуск наведеної вище команди оновлення SQL змінює три записи. Усі вони мають num_orders понад 170 і тепер мають значення знижки 10.

Оновлення записів на основі кількох умов

Поки що речення WHERE мало просту умову, але для критерію фільтрації зазвичай є кілька умов, об’єднаних логічними операторами.

Щоб зрозуміти це, давайте встановимо знижку 5 на основі двох умов:

  • city ​​LIKE ‘New%’: ця умова перевіряє та включає ті записи, де поле міста починається з New, і
  • num_orders > 100 фільтрує на основі кількості замовлень, щоб включати лише ті записи, для яких кількість замовлень перевищує 100.

Оператор UPDATE виглядає так:

UPDATE customers
SET DISCOUNT=5
WHERE city LIKE 'New%' AND num_orders>100;

Зауважте, що тепер ми маємо дві умови в пропозиції WHERE, об’єднані логічним оператором І. І лише ті записи, для яких виконуються обидві умови, оновлюються.

Далі запустіть цей запит і спостерігайте за результатом:

SELECT * FROM customers;

Як видно у вихідних даних, поле знижки для тих записів, для яких виконуються обидві наведені вище умови, оновлюється:

Загальне застереження під час використання команди SQL UPDATE

У всіх операторах UPDATE, виконаних досі, ми включили речення WHERE.

Наприклад, ви хочете оновити знижку до 25 для певного клієнта. А в запиті на оновлення ypur ви забули включити речення WHERE з ідентифікатором клієнта для фільтрації:

UPDATE customers
SET DISCOUNT=25;

Тепер запустіть:

SELECT * FROM customers;

Ви побачите, що всі записи в таблиці оновлено. Це може бути не та поведінка, яку ви б хотіли.

⚠ Тому не забувайте включити пропозицію WHERE, коли ви хочете оновити підмножину записів на основі умови. Якщо ви хочете оновити певне поле для всіх записів, ви можете опустити пропозицію WHERE.

У цьому прикладі, скажімо, у вас незабаром розпродаж у Чорну п’ятницю, і ви хочете запропонувати всім своїм клієнтам знижку 25%. Тоді запуск наведеного вище запиту матиме сенс.

Висновок

Ось підсумок того, що ви дізналися:

  • Якщо потрібно оновити записи в таблиці бази даних, можна скористатися командою SQL UPDATE.
  • Інструкція SQL UPDATE зазвичай містить речення WHERE з умовою, яка визначає підмножину записів (рядків таблиці), які потрібно оновити.
  • Пропуск пропозиції WHERE в операторі UPDATE оновлює всі записи. Тож ви повинні бути обережними, щоб не пропустити речення WHERE, якщо оновлення всіх рядків таблиці не є бажаною поведінкою.

Далі перегляньте цю шпаргалку SQL для швидкої довідки.