SQL основы: SELECT, INSERT, UPDATE, DELETE – полное руководство для разработчиков

Изучите четыре основные команды SQL для работы с базами данных. Подробные примеры SELECT, INSERT, UPDATE и DELETE с практическими советами, транзакциями и защитой от SQL-инъекций. Идеально для начинающих разработчиков.

РазработкаSQL

6 мин

Подготовка: создание тестовой таблицы

Перед тем как начать работу с данными, создадим простую таблицу для примеров:

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, где разработчики общаются, делятся опытом и помогают друг другу решать задачи.

Присоединяйтесь к нам и начните свой путь в программировании!

Комментарии