DDL управляет структурой базы:
CREATE создает таблицу,
ALTER изменяет,
DROP удаляет,
TRUNCATE очищает данные, сохраняя структуру.
DML работает с данными:
SELECT выбирает,
INSERT добавляет,
UPDATE изменяет,
DELETE удаляет.
DCL управляет правами:
GRANT выдает доступ,
REVOKE отзывает.
TCL управляет транзакциями:
COMMIT фиксирует изменения,
ROLLBACK откатывает,
SAVEPOINT создает точку сохранения внутри транзакции. Транзакции нужны там, где несколько операций должны выполниться вместе — например, перевод денег между счетами.
Структура SQL-запросаУ SQL-запроса есть четкий шаблон. Как только вы его увидите — большинство запросов перестанут выглядеть пугающе.
Вот канонический
SELECT-запрос со всеми возможными частями:
- SELECT -- что выбираем
- FROM -- откуда берем данные
- JOIN -- присоединяем другие таблицы (если нужно)
- WHERE -- фильтруем строки
- GROUP BY -- группируем
- HAVING -- фильтруем группы
- ORDER BY -- сортируем результат
- LIMIT -- ограничиваем количество строк
Разберем каждую часть.
SELECT — обязательный элемент. Здесь перечисляете столбцы, которые хотите получить.
SELECT * вернет все столбцы,
SELECT name, email — только два указанных.
FROM — тоже обязательный. Указывает таблицу, из которой берутся данные. Без него запрос не знает, куда смотреть.
JOIN — необязательный, но очень частый. Позволяет соединить несколько таблиц по общему полю. Например, таблицу заказов с таблицей клиентов — чтобы в одной выборке видеть и заказ, и имя покупателя.
WHERE — фильтрует строки до группировки. Например, WHERE city = 'Москва' оставит только московских клиентов.
GROUP BY — группирует строки по значению одного или нескольких столбцов. Нужен, когда хотите считать агрегаты: сумму, среднее, количество.
HAVING — фильтрует уже после группировки. Например, оставить только те группы, где количество заказов больше десяти.
ORDER BY — сортирует результат по столбцу. ASC — по возрастанию, DESC — по убыванию.
LIMIT — ограничивает количество строк в выдаче. Удобно при отладке — не тянуть миллион строк, а посмотреть на первые десять.
Минимально рабочий запрос — это только
SELECT и
FROM:
SELECT name FROM clients.
Все остальное добавляется по мере необходимости. Не нужна сортировка — не пишете
`ORDER BY`. Нет группировки — нет `
GROUP BY`. Начинайте с минимума и достраивайте запрос под задачу.