Антон Ларичев

Введение
SQL (Structured Query Language) — язык запросов для работы с реляционными базами данных. Он используется в MySQL, PostgreSQL, SQLite и других СУБД. Если вы только начинаете путь разработчика, понимание базовых SQL-запросов откроет вам доступ к работе с данными в большинстве проектов.
В этой статье мы разберём основные типы SQL-запросов с примерами: SELECT, INSERT, UPDATE, DELETE и JOIN. Для каждого запроса объясним синтаксис и покажем реальные сценарии применения.
Предположим, что у нас есть таблица users:
-- Создаём таблицу пользователей
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE,
age INT,
city VARCHAR(100)
);
SELECT: выборка данных
SELECT — самый частый запрос в SQL. Он извлекает данные из таблицы.
Выбрать все колонки:
-- Получаем всех пользователей
SELECT * FROM users;
Выбрать конкретные колонки:
-- Нас интересуют только имя и город
SELECT name, city FROM users;
Ограничить количество записей:
-- Берём первые 10 пользователей
SELECT name, email FROM users LIMIT 10;
Сортировка результатов:
-- Сортируем по возрасту от меньшего к большему
SELECT name, age FROM users ORDER BY age ASC;
-- Сортируем по имени в обратном порядке
SELECT name, age FROM users ORDER BY name DESC;
WHERE: фильтрация записей
Оператор WHERE фильтрует строки по условию.
-- Находим пользователей из Москвы
SELECT name, email FROM users WHERE city = 'Москва';
-- Пользователи старше 25 лет
SELECT name, age FROM users WHERE age > 25;
-- Несколько условий: И
SELECT name FROM users WHERE city = 'Москва' AND age >= 18;
-- Несколько условий: ИЛИ
SELECT name FROM users WHERE city = 'Москва' OR city = 'Санкт-Петербург';
Поиск по шаблону с LIKE:
-- Имена, начинающиеся на 'А'
SELECT name FROM users WHERE name LIKE 'А%';
-- Email на домене gmail
SELECT name, email FROM users WHERE email LIKE '%@gmail.com';
Проверка на NULL:
-- Пользователи без указанного города
SELECT name FROM users WHERE city IS NULL;
INSERT: добавление данных
INSERT INTO добавляет новые строки в таблицу.
-- Добавляем одного пользователя
INSERT INTO users (name, email, age, city)
VALUES ('Алексей Смирнов', 'alex@example.com', 28, 'Москва');
-- Добавляем сразу нескольких пользователей
INSERT INTO users (name, email, age, city)
VALUES
('Мария Иванова', 'maria@example.com', 24, 'Казань'),
('Дмитрий Козлов', 'dmitry@example.com', 31, 'Новосибирск'),
('Анна Петрова', 'anna@example.com', 22, 'Санкт-Петербург');
Порядок значений в VALUES должен совпадать с порядком колонок, указанных после имени таблицы.
UPDATE: обновление данных
UPDATE изменяет существующие записи в таблице.
-- Меняем город для конкретного пользователя
UPDATE users SET city = 'Екатеринбург' WHERE id = 1;
-- Обновляем несколько полей сразу
UPDATE users
SET city = 'Москва', age = 29
WHERE email = 'alex@example.com';
Всегда используйте WHERE в UPDATE. Без него изменятся все строки в таблице — это одна из самых частых ошибок начинающих.
DELETE: удаление данных
DELETE удаляет строки из таблицы.
-- Удаляем пользователя по id
DELETE FROM users WHERE id = 5;
-- Удаляем всех пользователей из определённого города
DELETE FROM users WHERE city = 'Казань';
Как и с UPDATE, оператор WHERE здесь обязателен. DELETE FROM users без условия удалит все данные из таблицы.
JOIN: объединение таблиц
JOIN позволяет объединять данные из нескольких таблиц. Предположим, у нас есть таблица orders:
-- Таблица заказов
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
product VARCHAR(200),
amount DECIMAL(10, 2)
);
INNER JOIN возвращает строки, для которых есть совпадение в обеих таблицах:
-- Получаем имя пользователя и его заказы
SELECT users.name, orders.product, orders.amount
FROM users
INNER JOIN orders ON users.id = orders.user_id;
LEFT JOIN возвращает все строки из левой таблицы, даже если совпадений нет:
-- Все пользователи и их заказы (если заказов нет — NULL)
SELECT users.name, orders.product
FROM users
LEFT JOIN orders ON users.id = orders.user_id;
Частые ошибки
1. UPDATE и DELETE без WHERE
-- Опасно: обновит всех пользователей без исключения
UPDATE users SET city = 'Москва';
-- Правильно: только нужная запись
UPDATE users SET city = 'Москва' WHERE id = 42;
2. Использование SELECT * в продакшене
SELECT * удобен при отладке, но в реальных запросах лучше явно указывать нужные колонки. Это снижает объём передаваемых данных и делает код понятнее.
3. Отсутствие индексов на колонках в WHERE
Если вы часто фильтруете по email или city, добавьте индекс — иначе база просматривает каждую строку:
-- Ускоряем поиск по email
CREATE INDEX idx_users_email ON users(email);
4. Вставка пользовательского ввода напрямую в запрос
Никогда не подставляйте пользовательские данные прямо в SQL-строку — это открывает уязвимость SQL-инъекции. Используйте параметризованные запросы в своём языке программирования.
Заключение
Мы разобрали основные SQL-запросы: SELECT, WHERE, INSERT, UPDATE, DELETE и JOIN. Эти инструменты покрывают большую часть повседневных задач при работе с базами данных.
Следующий шаг — изучить агрегатные функции (COUNT, SUM, AVG) и оператор GROUP BY. Они позволяют делать аналитические выборки: считать количество заказов на пользователя, находить средний возраст по городу и так далее. Практикуйтесь на реальных данных: создайте локальную базу в PostgreSQL или MySQL и реализуйте сценарии из этой статьи.






Комментарии
0