З’ясуйте, як використовувати SQL команду `UPDATE` для внесення змін у записи таблиці бази даних.
Розробники часто працюють з реляційними базами даних. SQL, або мова структурованих запитів, є досить простою у вивченні та має зрозумілий синтаксис. За допомогою SQL можна створювати об’єкти бази даних та робити запити до таблиць.
SQL запити дозволяють виконувати операції створення, читання, редагування та видалення даних. Ці операції разом відомі як CRUD операції.
Команда `UPDATE` в SQL використовується для оновлення існуючих записів у таблицях бази даних.
У цьому посібнику ви дізнаєтесь:
- Про синтаксис команди `UPDATE`.
- Як оновлювати записи, використовуючи певні умови, поєднані логічними операторами.
- Про важливе застереження, яке слід пам’ятати під час використання команди `UPDATE` в SQL.
Синтаксис команди SQL `UPDATE`
Синтаксис SQL команди `UPDATE` виглядає так:
UPDATE table_name SET column = new_value WHERE condition;
Наведений вище запит змінює значення вказаного стовпця для всіх записів, які відповідають заданій умові.
Для оновлення кількох стовпців (або полів) використовуйте таку структуру команди `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 DB Browser (рекомендовано) для роботи з кодом. Зауважте, що ви також можете використовувати MySQL або PostgreSQL.
- Для відтворення прикладу вам також знадобиться Python та пакет Faker Python.
Створення таблиці бази даних з записами
Якщо ви бажаєте використовувати код з цього посібника, запустіть наведений нижче фрагмент коду, щоб створити та підключитися до бази даних `customer_db.db`. Ми використовуємо бібліотеку Faker для генерації синтетичних даних для таблиці клієнтів:
# main.py import sqlite3 from faker import Faker import random # Підключення до бази даних conn = sqlite3.connect('customer_db.db') cur = conn.cursor() # Створення таблиці cur.execute('''CREATE TABLE customers ( customerID INTEGER PRIMARY KEY, name TEXT, city TEXT, email TEXT, num_orders INTEGER, discount INTEGER DEFAULT 2)''') # Створення об'єкта Faker 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)) cur.execute('INSERT INTO customers (name, city, email, num_orders) VALUES (?,?,?,?)', (name,city,email,num_orders)) # Збереження змін conn.commit() cur.close() conn.close()
Для коректної роботи цього коду, переконайтеся, що у вас є Python 3.7 (або новіша версія) та встановлений пакет Faker. Встановити його можна за допомогою pip:
pip install faker
Якщо у вас вже є готова база даних, до якої можна підключитися, ви можете використовувати її.
Виконання першого SQL запиту
Таблиця клієнтів має наступні поля:
- `customerID`: Первинний ключ, який унікально ідентифікує запис.
- `name`: Ім’я клієнта.
- `city`: Місто, де проживає клієнт.
- `email`: Електронна адреса клієнта.
- `num_orders`: Кількість здійснених замовлень.
- `discount`: Відсоток знижки, ціле число зі значенням за замовчуванням 2.
Ви можете виконувати запити та переглядати результати через клієнт командного рядка SQLite або через SQLite DB Browser.
Я буду використовувати браузер SQLite DB Browser, оскільки його результати легше інтерпретувати.
Виконайте цей запит, щоб отримати всі записи з таблиці клієнтів:
SELECT * FROM customers;
В реальних умовах краще уникати використання `SELECT *`, якщо це не потрібно. Але в цьому прикладі ми використаємо його, тому що в нас лише 15 записів.
Оновлення записів за однією умовою
Тепер, коли ми розуміємо структуру таблиці, виконаємо кілька запитів `UPDATE` для оновлення записів за певною умовою.
Після кожного `UPDATE` запиту, ми будемо використовувати `SELECT * FROM customers` для перегляду оновлених даних.
Оновлення одного поля
Спочатку оновимо поле `city` для запису з `customerID=7`:
UPDATE customers SET city='Codeshire' WHERE customerID=7;
Виведемо всі стовпці та рядки з таблиці клієнтів:
SELECT * FROM customers;
Як бачимо, поле `city` для запису з `customerID=7` (Даніель Форд) оновлено.
Оновлення кількох полів
У попередньому прикладі ми змінили лише одне поле, `city`. Але ми можемо оновити декілька полів одночасно, використовуючи відповідний синтаксис.
Тут ми оновлюємо і поле `city`, і поле `email` для клієнта з `customerID=1`:
UPDATE customers SET city='East Carlisle',email="[email protected]" WHERE customerID=1;
Знову виводимо:
SELECT * FROM customers;
І ось результат:
Оновлення кількох записів
Оскільки ми використовували `customerID` (первинний ключ), попередні запити оновлювали лише один запис. Однак, якщо умова `WHERE` виконується для декількох записів, команда `UPDATE` оновить всі відповідні записи.
Наприклад, запит:
UPDATE customers SET discount=10 WHERE num_orders > 170;
Тепер виконаємо запит `SELECT`:
SELECT * FROM customers;
Ось результат:
Цей запит змінив три записи, усі з яких мають `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` тепер є дві умови, об’єднані логічним оператором `AND`. Оновлюються лише ті записи, які відповідають обом умовам.
Виконаємо запит та подивимось на результат:
SELECT * FROM customers;
Як видно на виході, знижка оновлюється тільки для тих записів, які задовольняють обидві умови:
Важливе застереження при використанні команди SQL `UPDATE`
У всіх прикладах `UPDATE` вище ми використовували речення `WHERE`.
Наприклад, якщо ви хочете оновити знижку до 25% для конкретного клієнта, але в запиті забули про `WHERE` і вказати `customerID` для фільтрації:
UPDATE customers SET DISCOUNT=25;
Тепер виконаємо `SELECT`:
SELECT * FROM customers;
Ви побачите, що всі записи в таблиці оновлено, що може бути не тим результатом, якого ви очікували.
Тому не забувайте про `WHERE`, коли потрібно оновити лише підмножину записів. Якщо ж ви хочете змінити певне поле для всіх записів, тоді можна опустити `WHERE`.
Наприклад, у вас розпродаж на Чорну п’ятницю, і ви хочете запропонувати всім своїм клієнтам знижку 25%. Тоді виконання наведеного вище запиту матиме сенс.
Висновок
Коротко підсумуємо вивчене:
- Команда `UPDATE` використовується для зміни записів в таблиці бази даних.
- Зазвичай оператор `UPDATE` містить `WHERE` з умовою, яка визначає записи, що підлягають зміні.
- Пропуск `WHERE` призводить до оновлення всіх записів, тому будьте уважні, щоб не допустити помилку.
Далі ви можете ознайомитись з цією шпаргалкою SQL для швидкої довідки.