Основы
SQL — язык для работы с реляционными базами данных. Данные хранятся в таблицах (как Excel). Каждая таблица — строки и столбцы.
Представим таблицу users:
| id | name | city | age |
|---|---|---|---|
| 1 | Анна | Москва | 28 |
| 2 | Иван | СПб | 34 |
| 3 | Мария | Москва | 22 |
SELECT — читать данные
SELECT * FROM users; -- все столбцы
SELECT name, city FROM users; -- только нужные Символ * означает «все столбцы». Всегда заканчивай запрос точкой с запятой ;
ORDER BY — сортировка
SELECT name, age FROM users
ORDER BY age DESC; -- DESC = по убыванию, ASC = по возрастанию LIMIT — ограничение строк
SELECT * FROM users LIMIT 10; -- первые 10 строк Фильтрация
WHERE — фильтрация
SELECT * FROM users WHERE city = 'Москва';
SELECT * FROM users WHERE age > 25; Операторы сравнения
| Оператор | Смысл | Пример |
|---|---|---|
= | равно | age = 25 |
!= / <> | не равно | city != 'СПб' |
> < >= <= | больше/меньше | age >= 18 |
BETWEEN | диапазон | age BETWEEN 20 AND 30 |
IN | из списка | city IN ('Москва','СПб') |
LIKE | поиск по шаблону | name LIKE 'Ан%' |
IS NULL | пустое значение | city IS NULL |
AND / OR / NOT
SELECT * FROM users WHERE city = 'Москва' AND age > 25;
SELECT * FROM users WHERE city = 'Москва' OR city = 'СПб'; LIKE 'Ан%' — имена начинающиеся на «Ан». % = любые символы.
Агрегация
Агрегатные функции
| Функция | Что делает |
|---|---|
COUNT(*) | количество строк |
SUM(col) | сумма значений |
AVG(col) | среднее значение |
MAX(col) | максимум |
MIN(col) | минимум |
GROUP BY — группировка
SELECT city, COUNT(*) AS кол_во
FROM users
GROUP BY city;
-- Результат:
-- Москва | 2
-- СПб | 1 AS задаёт псевдоним (alias) — новое имя столбца в результате.
HAVING — фильтр после группировки
SELECT city, COUNT(*) AS n
FROM users
GROUP BY city
HAVING COUNT(*) > 1; WHERE фильтрует строки до группировки, HAVING — после.
Соединения
JOIN объединяет строки из двух таблиц по общему столбцу.
| id | name |
|---|---|
| 1 | Анна |
| 2 | Иван |
| id | user_id | сумма |
|---|---|---|
| 1 | 1 | 500 |
| 2 | 1 | 200 |
| 3 | 2 | 800 |
INNER JOIN — только совпадения
SELECT users.name, orders.сумма
FROM users
INNER JOIN orders ON users.id = orders.user_id; Вернёт только тех пользователей, у которых есть заказы.
LEFT JOIN — все строки из левой таблицы
SELECT users.name, orders.сумма
FROM users
LEFT JOIN orders ON users.id = orders.user_id; Вернёт всех пользователей — даже тех, у кого нет заказов (там будет NULL).
Типы JOIN
| Тип | Что возвращает |
|---|---|
| INNER JOIN | только совпадающие строки |
| LEFT JOIN | все из левой + совпадения из правой |
| RIGHT JOIN | все из правой + совпадения из левой |
| FULL JOIN | все строки из обеих таблиц |
Изменение данных
INSERT — добавить строку
INSERT INTO users (name, city, age)
VALUES ('Сергей', 'Казань', 30); UPDATE — изменить данные
UPDATE users
SET city = 'Новосибирск'
WHERE id = 2; Всегда указывай WHERE при UPDATE — иначе изменятся все строки!
DELETE — удалить строку
DELETE FROM users
WHERE id = 3; Всегда указывай WHERE при DELETE — иначе удалишь все данные!
CREATE TABLE — создать таблицу
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10,2)
); ШПАРГАЛКА
Порядок ключевых слов
SELECT столбцы
FROM таблица
JOIN другая_таблица ON условие
WHERE условие_фильтра
GROUP BY столбец
HAVING условие_для_групп
ORDER BY столбец ASC/DESC LIMIT n; Порядок важен — SQL принимает только такую последовательность.
Пример: всё вместе
SELECT u.name, COUNT(o.id) AS заказов, SUM(o.сумма) AS итого
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
WHERE u.city = 'Москва'
GROUP BY u.name
HAVING SUM(o.сумма) > 100
ORDER BY итого DESC
LIMIT 5; Типы данных
| Тип | Пример |
|---|---|
INT | целые числа: 1, 42, -5 |
VARCHAR(n) | строка до n символов |
TEXT | длинный текст |
DECIMAL(p,s) | число с запятой: 19.99 |
DATE | дата: 2024-01-15 |
BOOLEAN | true / false |






