Основи SQL: SELECT, INSERT, UPDATE, DELETE

Вітаю знову.
У попередній лекції ти вивчав бази даних і таблиці.
Ти дізнався, що база даних містить таблиці.
Таблиці містять рядки й колонки.
Рядки — це записи.
Колонки описують дані.
Дуже організовано.
Дуже PostgreSQL.
Сьогодні ми вивчимо чотири базові дії, які ти будеш використовувати постійно:
SELECT;INSERT;UPDATE;DELETE.
Це основні команди для роботи з даними.
Вони дозволяють:
- читати дані;
- додавати дані;
- змінювати дані;
- видаляти дані.
Це часто називають CRUD.
CRUD означає:
Create
Read
Update
Delete
Не найкрасивіше слово.
Звучить як щось, що живе під старою клавіатурою.
Але це дуже важливо.
Майже кожен застосунок робить CRUD.
Блог.
Магазин.
Task manager.
Система бронювання.
Dashboard.
Навіть модний сучасний застосунок з анімаціями й емоційними градієнтами, найімовірніше, десь на фоні робить CRUD.
Бази даних скромні.
Але потужні.
Що Ти Вивчиш
У цій лекції ти вивчиш:
- як читати рядки через
SELECT; - як вибирати конкретні колонки;
- як додавати рядки через
INSERT; - як вставляти кілька рядків;
- як змінювати рядки через
UPDATE; - чому
WHEREнадзвичайно важливий; - як видаляти рядки через
DELETE; - як уникати небезпечних помилок початківців;
- як практикувати CRUD на реальній таблиці.
Наприкінці цієї лекції ти зможеш працювати з даними в таблиці PostgreSQL.
Не лише створювати таблиці.
А реально ними користуватися.
Саме тут база даних починає здаватися живою.
Трохи страшно.
Але живою.
Підготуй Базу Даних
Відкрий PostgreSQL:
sudo -iu postgres psql
Підключись до бази даних з попередніх лекцій:
\c learning_postgresql
Якщо цієї бази немає, створи її:
CREATE DATABASE learning_postgresql;
Потім підключись:
\c learning_postgresql
Тепер нам потрібна таблиця для практики.
Ми використаємо таблицю з назвою products.
Якщо вона вже існує, можеш спочатку видалити її:
DROP TABLE IF EXISTS products;
Потім створи її:
CREATE TABLE products (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
category VARCHAR(100),
price INTEGER,
available BOOLEAN
);
Ця таблиця зберігає товари.
Кожен товар має:
id;name;category;price;available.
Просто.
Зрозуміло.
Готово до дії.
Таблиця стоїть і ніби каже:
Будь ласка, дай мені дані.
Дуже ввічливо.
Поки що.
INSERT: Додавання Даних
INSERT додає нові рядки в таблицю.
Приклад:
INSERT INTO products (name, category, price, available)
VALUES ('Laptop', 'Electronics', 900, true);
PostgreSQL має сказати:
INSERT 0 1
Це означає, що один рядок було додано.
Тепер додай більше товарів:
INSERT INTO products (name, category, price, available)
VALUES ('Mouse', 'Electronics', 25, true);
INSERT INTO products (name, category, price, available)
VALUES ('Keyboard', 'Electronics', 70, false);
INSERT INTO products (name, category, price, available)
VALUES ('Desk Chair', 'Furniture', 150, true);
Тепер у нас є дані.
Справжні рядки.
Таблиця більше не порожня.
Таблиця без даних — це як магазин з полицями, але без товарів.
Технічно готовий.
Емоційно сумний.
Синтаксис INSERT
Базова структура виглядає так:
INSERT INTO table_name (column1, column2, column3)
VALUES (value1, value2, value3);
Для нашої таблиці:
INSERT INTO products (name, category, price, available)
VALUES ('Monitor', 'Electronics', 250, true);
Важливо:
Текстові значення використовують одинарні лапки:
'Monitor'
'Electronics'
Числа не використовують лапки:
250
Boolean використовує:
true
false
PostgreSQL суворий.
Якщо ти напишеш текст без лапок, він не буде вгадувати.
PostgreSQL не займається емоційною інтерпретацією.
Він займається структурою.
Саме тому ми його любимо.
Переважно.
Вставлення Кількох Рядків
Можна вставити кілька рядків одразу.
Приклад:
INSERT INTO products (name, category, price, available)
VALUES
('Notebook', 'Office', 5, true),
('Pen', 'Office', 2, true),
('Desk Lamp', 'Furniture', 45, true);
Це корисно, коли треба додати кілька рядків разом.
Тепер прочитай таблицю:
SELECT * FROM products;
Ти маєш побачити всі товари.
Якщо не бачиш, перевір:
- чи ти підключився до правильної бази даних?
- чи створив таблицю?
- чи не забув крапку з комою?
- чи PostgreSQL показав помилку?
PostgreSQL зазвичай каже правду.
Іноді жорстко.
SELECT: Читання Даних
SELECT читає дані з таблиці.
Найпростіший запит:
SELECT * FROM products;
Це означає:
Дай мені всі колонки з усіх товарів.
* означає всі колонки.
Це корисно для навчання.
Але в реальних застосунках часто краще вибирати тільки ті колонки, які потрібні.
Приклад:
SELECT name, price FROM products;
Це показує тільки:
name;price.
Набагато чистіше.
PostgreSQL любить точні запити.
Люди теж.
Зазвичай.
SELECT з Конкретними Колонками
Спробуй:
SELECT name FROM products;
Це повертає тільки назви товарів.
Спробуй:
SELECT name, category FROM products;
Це повертає назви й категорії товарів.
Спробуй:
SELECT name, price, available FROM products;
Це повертає назви, ціни й доступність.
Не завжди потрібно все.
Якщо тобі потрібні лише назви товарів, попроси лише назви товарів.
Не проси всю шафу бази даних.
База даних — це не твоя емоційна валіза.
SELECT з ORDER BY
Можна сортувати результати через ORDER BY.
Приклад:
SELECT name, price FROM products
ORDER BY price;
Це сортує товари за ціною від найнижчої до найвищої.
Щоб сортувати від найвищої до найнижчої:
SELECT name, price FROM products
ORDER BY price DESC;
DESC означає descending.
Також є ASC для ascending:
SELECT name, price FROM products
ORDER BY price ASC;
Ascending використовується за замовчуванням.
Тому це:
ORDER BY price
те саме, що:
ORDER BY price ASC
Сортування корисне.
Особливо коли твої дані перестають бути маленькими й милими.
SELECT з WHERE
WHERE фільтрує рядки.
Приклад:
SELECT * FROM products
WHERE category = 'Electronics';
Це означає:
Дай мені товари, де категорія — Electronics.
Інший приклад:
SELECT * FROM products
WHERE available = true;
Це показує тільки доступні товари.
Ще один:
SELECT * FROM products
WHERE price > 100;
Це показує товари з ціною більшою ніж 100.
Важлива примітка для MDX і документації:
Коли пишеш оператори типу >, <, >=, <= у звичайному тексті, клади їх у backticks.
У SQL-блоках вони нормальні.
MDX чутливий.
Як PostgreSQL, але з більшим frontend-драматизмом.
WHERE Дуже Важливий
WHERE надзвичайно важливий.
Він каже PostgreSQL, які саме рядки ти хочеш.
Без WHERE команди часто впливають на всі рядки.
Це нормально для:
SELECT * FROM products;
Але небезпечно для:
UPDATE products
SET price = 1;
Це оновлює кожен товар.
Усі ціни стають 1.
Вітаю.
Ти знищив магазин.
Дуже щедро.
Дуже погано.
Завжди думай перед запуском UPDATE або DELETE.
Особливо без WHERE.
UPDATE: Зміна Даних
UPDATE змінює існуючі рядки.
Приклад:
UPDATE products
SET price = 950
WHERE name = 'Laptop';
Це змінює ціну Laptop.
Тепер перевір:
SELECT * FROM products
WHERE name = 'Laptop';
Ти маєш побачити оновлену ціну.
Базова структура:
UPDATE table_name
SET column_name = new_value
WHERE condition;
Приклад:
UPDATE products
SET available = true
WHERE name = 'Keyboard';
Це робить Keyboard доступним.
Добре.
Клавіатура повернулась у суспільство.
Оновлення Кількох Колонок
Можна оновити кілька колонок одразу.
Приклад:
UPDATE products
SET price = 80,
available = true
WHERE name = 'Keyboard';
Це оновлює:
price;available.
Завжди використовуй WHERE, якщо ти справді не хочеш оновити кожен рядок.
А якщо ти справді хочеш оновити кожен рядок, зупинись і подумай ще раз.
Потім, можливо, зроби це.
Але обережно.
З кавою.
І backup-ами.
Небезпечна Помилка з UPDATE
Небезпечно:
UPDATE products
SET price = 10;
Це оновлює всі товари.
Кожен товар тепер коштує 10.
Laptop?
10.
Mouse?
10.
Desk Chair?
10.
Вітаю, ти винайшов банкрутство.
Правильно:
UPDATE products
SET price = 10
WHERE name = 'Pen';
Клаузула WHERE тебе рятує.
WHERE — це не декорація.
Це ремінь безпеки.
Використовуй його.
DELETE: Видалення Даних
DELETE видаляє рядки з таблиці.
Приклад:
DELETE FROM products
WHERE name = 'Pen';
Це видаляє товар з назвою Pen.
Тепер перевір:
SELECT * FROM products;
Pen має зникнути.
Без прощання.
Без церемонії.
Просто SQL.
Базова структура:
DELETE FROM table_name
WHERE condition;
Ще раз:
Використовуй WHERE.
Будь ласка.
Небезпечна Помилка з DELETE
Небезпечно:
DELETE FROM products;
Це видаляє всі рядки з таблиці.
Таблиця все ще існує.
Але всі дані зникли.
Порожньо.
Тихо.
Як холодильник після візиту підлітків.
Правильно:
DELETE FROM products
WHERE name = 'Notebook';
Це видаляє тільки Notebook.
Перед видаленням розумно перевірити умову через SELECT.
Приклад:
SELECT * FROM products
WHERE name = 'Notebook';
Якщо результат правильний, тоді виконай:
DELETE FROM products
WHERE name = 'Notebook';
Ця звичка може врятувати тебе від болю.
Серйозного болю.
Базоданного болю.
SELECT Перед UPDATE або DELETE
Хороша звичка:
Перед цим:
UPDATE products
SET price = 100
WHERE category = 'Office';
Виконай це:
SELECT * FROM products
WHERE category = 'Office';
Перед цим:
DELETE FROM products
WHERE available = false;
Виконай це:
SELECT * FROM products
WHERE available = false;
Спочатку перевір рядки.
Потім оновлюй або видаляй.
Це не параноя.
Це професіоналізм.
Database-професіонали — це просто люди, які навчилися страху структуровано.
RETURNING
PostgreSQL має корисну можливість під назвою RETURNING.
Вона може показати рядки, яких торкнувся INSERT, UPDATE або DELETE.
Приклад:
INSERT INTO products (name, category, price, available)
VALUES ('Webcam', 'Electronics', 60, true)
RETURNING *;
Це вставляє рядок і одразу показує його.
Приклад з update:
UPDATE products
SET price = 65
WHERE name = 'Webcam'
RETURNING *;
Приклад з delete:
DELETE FROM products
WHERE name = 'Webcam'
RETURNING *;
RETURNING дуже корисний.
Він дозволяє побачити, що сталося.
PostgreSQL каже:
Ось що я змінив.
Дуже ввічливо.
Трохи драматично.
NULL в INSERT
Якщо колонка дозволяє NULL, її можна пропустити під час вставлення.
Приклад:
INSERT INTO products (name, price, available)
VALUES ('Mystery Box', 99, false);
Тут ми не вказали category.
Якщо category дозволяє NULL, PostgreSQL це прийме.
Перевір:
SELECT * FROM products
WHERE name = 'Mystery Box';
Ти маєш побачити порожнє значення в категорії.
Це NULL.
NULL означає відсутнє значення.
Не нуль.
Не порожній рядок.
Відсутнє.
SQL ставиться до відсутності серйозно.
Як детектив.
Перевір Таблицю
На цьому етапі виконай:
SELECT * FROM products;
У тебе має бути кілька рядків.
Спробуй:
SELECT name, price FROM products
ORDER BY price DESC;
Спробуй:
SELECT * FROM products
WHERE available = true;
Спробуй:
SELECT * FROM products
WHERE category = 'Electronics';
Це практика.
А практика — це місце, де SQL стає нормальним.
Спочатку SQL здається дивним.
Потім одного дня ти пишеш:
SELECT * FROM products WHERE available = true;
і це звучить природно.
Це означає, що база даних тебе прийняла.
Можливо.
Типові Помилки
Забути Крапку з Комою
Неправильно:
SELECT * FROM products
Правильно:
SELECT * FROM products;
Якщо psql продовжує чекати, ти, ймовірно, забув ;.
PostgreSQL не завис.
Він чекає, поки ти закінчиш речення.
Дуже формально.
Забути Лапки для Тексту
Неправильно:
WHERE name = Laptop;
Правильно:
WHERE name = 'Laptop';
Текст потребує одинарних лапок.
Назви колонок — ні.
Ця різниця має значення.
PostgreSQL не вгадує.
Це база даних, а не твоя бабуся.
UPDATE Без WHERE
Небезпечно:
UPDATE products
SET available = false;
Це робить усі товари недоступними.
Правильно:
UPDATE products
SET available = false
WHERE name = 'Keyboard';
WHERE рятує дані.
Поважай WHERE.
DELETE Без WHERE
Небезпечно:
DELETE FROM products;
Це видаляє всі рядки.
Правильно:
DELETE FROM products
WHERE name = 'Keyboard';
Перед видаленням виконай SELECT з тією самою умовою.
Це сильна звичка.
Збережи її.
Практика
Створи таблицю з назвою tasks.
CREATE TABLE tasks (
id SERIAL PRIMARY KEY,
title VARCHAR(150) NOT NULL,
status VARCHAR(50),
priority INTEGER
);
Встав завдання:
INSERT INTO tasks (title, status, priority)
VALUES ('Learn SELECT', 'open', 1);
INSERT INTO tasks (title, status, priority)
VALUES ('Practice INSERT', 'open', 2);
INSERT INTO tasks (title, status, priority)
VALUES ('Be careful with DELETE', 'open', 3);
Прочитай усі завдання:
SELECT * FROM tasks;
Онови одне завдання:
UPDATE tasks
SET status = 'done'
WHERE title = 'Learn SELECT';
Видали одне завдання:
DELETE FROM tasks
WHERE title = 'Practice INSERT';
Прочитай знову:
SELECT * FROM tasks;
Це дає тобі повну CRUD-практику.
Маленька таблиця.
Велика лекція.
Мінічелендж
Створи таблицю з назвою customers.
Вона має мати:
id;name;email;city;active.
Встав щонайменше пʼятьох customers.
Потім напиши запити, які:
- показують усіх customers;
- показують тільки імена й email;
- показують тільки активних customers;
- оновлюють місто одного customer;
- деактивують одного customer;
- видаляють одного customer.
Перед кожним UPDATE або DELETE спочатку виконуй SELECT з тим самим WHERE.
Це звичка.
Не опція.
Ну добре, технічно опція.
Але шолом теж опція.
Ти розумієш.
Підсумок
Сьогодні ти вивчив:
INSERTдодає рядки;SELECTчитає рядки;UPDATEзмінює рядки;DELETEвидаляє рядки;WHEREфільтрує рядки;ORDER BYсортує результати;RETURNINGпоказує рядки, яких торкнулась команда;- текстові значення потребують одинарних лапок;
- booleans використовують
trueабоfalse; UPDATEбезWHEREзмінює всі рядки;DELETEбезWHEREвидаляє всі рядки;- перевірка через
SELECTпередUPDATEабоDELETE— професійна звичка.
Це одна з найважливіших лекцій у курсі.
З цими чотирма командами ти можеш виконувати базову роботу майже будь-якого застосунку з базою даних.
Створювати дані.
Читати дані.
Змінювати дані.
Видаляти дані.
Прості слова.
Велика відповідальність.
PostgreSQL дає тобі силу.
Використовуй її обережно.
Особливо біля DELETE.
Наступна Лекція
У наступній лекції ми вивчимо типи даних і обмеження.
Ми розглянемо:
INTEGER;VARCHAR;TEXT;BOOLEAN;DATE;NOT NULL;UNIQUE;- базові правила для безпечніших таблиць.
Бо бази даних — це не тільки storage.
Вони також охоронці структури.
Суворі охоронці.
З крапками з комою.