SQL основы: SELECT, INSERT, UPDATE, DELETE – полное руководство для разработчиков
Изучите четыре основные команды SQL для работы с базами данных. Подробные примеры SELECT, INSERT, UPDATE и DELETE с практическими советами, транзакциями и защитой от SQL-инъекций. Идеально для начинающих разработчиков.
Подготовка: создание тестовой таблицы
Перед тем как начать работу с данными, создадим простую таблицу для примеров:
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
SELECT: чтение данных
Команда SELECT используется для извлечения данных из таблицы. Это самая частая операция при работе с базами данных.
Базовый синтаксис
SELECT column1, column2 FROM table_name;Примеры использования
Выбор всех столбцов:
SELECT * FROM users;Выбор конкретных столбцов:
SELECT name, email FROM users;Использование WHERE для фильтрации:
SELECT * FROM users WHERE age > 25;Сортировка результатов с ORDER BY:
SELECT * FROM users ORDER BY name ASC;
SELECT * FROM users ORDER BY created_at DESC;Ограничение количества результатов:
SELECT * FROM users LIMIT 10;
SELECT * FROM users LIMIT 10 OFFSET 20; -- пагинацияИспользование LIKE для поиска по шаблону:
SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM users WHERE name LIKE 'А%'; -- имена на букву ААгрегатные функции:
SELECT COUNT(*) FROM users;
SELECT AVG(age) FROM users;
SELECT MAX(age), MIN(age) FROM users;Группировка с GROUP BY:
SELECT age, COUNT(*) as count
FROM users
GROUP BY age
HAVING COUNT(*) > 1;
INSERT: добавление данных
Команда INSERT позволяет добавлять новые записи в таблицу.
Базовый синтаксис
INSERT INTO table_name (column1, column2) VALUES (value1, value2);Примеры использования
Вставка одной записи:
INSERT INTO users (name, email, age)
VALUES ('Алексей', 'alexey@example.com', 28);Вставка нескольких записей:
INSERT INTO users (name, email, age) VALUES
('Мария', 'maria@example.com', 25),
('Дмитрий', 'dmitry@example.com', 32),
('Елена', 'elena@example.com', 29);Вставка без указания всех столбцов:
INSERT INTO users (name, email)
VALUES ('Иван', 'ivan@example.com');
-- age будет NULL, created_at заполнится автоматическиВставка с возвратом ID:
-- MySQL
INSERT INTO users (name, email, age)
VALUES ('Ольга', 'olga@example.com', 27);
SELECT LAST_INSERT_ID();
-- PostgreSQL
INSERT INTO users (name, email, age)
VALUES ('Ольга', 'olga@example.com', 27)
RETURNING id;UPDATE: обновление данных
Команда UPDATE изменяет существующие записи в таблице.
Базовый синтаксис
UPDATE table_name
SET column1 = value1, column2 = value2
WHERE condition;Примеры использования
Обновление одной записи:
UPDATE users
SET age = 29
WHERE id = 1;Обновление нескольких полей:
UPDATE users
SET name = 'Алексей Петров', age = 30
WHERE id = 1;Обновление нескольких записей:
UPDATE users
SET age = age + 1
WHERE age < 30;Использование вычислений:
UPDATE users
SET email = LOWER(email);Условное обновление с несколькими условиями:
UPDATE users
SET age = 25
WHERE name = 'Мария' AND email LIKE '%@example.com';Важное предупреждение
Всегда используйте WHERE при UPDATE! Без этого условия обновятся все записи в таблице:
-- ОПАСНО! Обновит все записи
UPDATE users SET age = 25;
-- ПРАВИЛЬНО! Обновит только нужные записи
UPDATE users SET age = 25 WHERE id = 1;DELETE: удаление данных
Команда DELETE удаляет записи из таблицы.
Базовый синтаксис
DELETE FROM table_name WHERE condition;Примеры использования
Удаление одной записи:
DELETE FROM users WHERE id = 1;Удаление по условию:
DELETE FROM users WHERE age < 18;Удаление с несколькими условиями:
DELETE FROM users
WHERE created_at < '2024-01-01' AND age IS NULL;Удаление всех записей (осторожно!):
DELETE FROM users; -- удалит все записи
TRUNCATE TABLE users; -- быстрее, но нельзя откатить в транзакцииВажное предупреждение
Как и с UPDATE, всегда проверяйте наличие WHERE при DELETE:
-- ОПАСНО! Удалит все записи
DELETE FROM users;
-- ПРАВИЛЬНО! Удалит только нужные записи
DELETE FROM users WHERE id = 1;Транзакции: безопасная работа с данными
При выполнении операций INSERT, UPDATE и DELETE рекомендуется использовать транзакции для обеспечения целостности данных:
START TRANSACTION;
UPDATE users SET age = 30 WHERE id = 1;
UPDATE users SET age = 28 WHERE id = 2;
-- Если всё хорошо:
COMMIT;
-- Если нужно отменить изменения:
ROLLBACK;Практические советы
Используйте SELECT перед UPDATE/DELETE
Перед изменением или удалением данных выполните SELECT с тем же условием, чтобы убедиться, что вы работаете с правильными записями:
-- Сначала проверяем
SELECT * FROM users WHERE age < 18;
-- Если всё верно, удаляем
DELETE FROM users WHERE age < 18;Индексы для производительности
Создавайте индексы для столбцов, которые часто используются в WHERE:
CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_age ON users(age);Избегайте SELECT *
В production-коде указывайте конкретные столбцы вместо звёздочки:
-- Плохо
SELECT * FROM users;
-- Хорошо
SELECT id, name, email FROM users;Используйте LIMIT
При работе с большими таблицами ограничивайте количество возвращаемых записей:
SELECT * FROM users LIMIT 100;Параметризованные запросы
При работе с SQL из кода всегда используйте параметризованные запросы для защиты от SQL-инъекций:
JavaScript (Node.js)
const userId = 1;
const query = 'SELECT * FROM users WHERE id = ?';
db.query(query, [userId]);Python
user_id = 1
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))PHP (PDO)
$userId = 1;
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$userId]);Объединение команд: практический пример
Давайте создадим небольшое приложение для управления пользователями:
-- Создание пользователя
INSERT INTO users (name, email, age)
VALUES ('Анна', 'anna@example.com', 26);
-- Получение ID нового пользователя
SET @user_id = LAST_INSERT_ID();
-- Чтение данных пользователя
SELECT * FROM users WHERE id = @user_id;
-- Обновление возраста
UPDATE users SET age = 27 WHERE id = @user_id;
-- Проверка обновления
SELECT name, age FROM users WHERE id = @user_id;
-- Удаление пользователя
DELETE FROM users WHERE id = @user_id;
-- Проверка удаления
SELECT COUNT(*) FROM users WHERE id = @user_id; -- должно вернуть 0Заключение
Команды SELECT, INSERT, UPDATE и DELETE — это основа работы с SQL. Освоив эти операции, вы сможете эффективно управлять данными в любой реляционной базе данных. Помните о безопасности при работе с UPDATE и DELETE, всегда используйте параметризованные запросы в коде и не забывайте про транзакции для критичных операций.
Присоединяйтесь к образовательной платформе Кодик — здесь вы найдете интерактивные курсы по Python, JavaScript, HTML, CSS, SQL и другим языкам программирования. Все материалы созданы специально для начинающих разработчиков с практическими примерами и пошаговыми объяснениями.
У Кодика также есть активное сообщество в Telegram, где разработчики общаются, делятся опытом и помогают друг другу решать задачи.
Присоединяйтесь к нам и начните свой путь в программировании!