Шпаргалка по SQL
Все конструкции курса «SQL с нуля» , собранные по задачам. Примеры — на учебной базе курса: книги books, покупатели customers и заказы orders. В колонке «Урок» — где конструкция разобрана подробно.
Порядок частей запроса
SQL Перенос
SELECT столбцы
FROM таблица
JOIN другая_таблица ON условие
WHERE условие для строк
GROUP BY столбцы
HAVING условие для групп
ORDER BY столбцы
LIMIT число;
Пишут в таком порядке, а выполняет база иначе: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Поэтому отбирать по агрегату в WHERE нельзя — для этого есть HAVING (урок 5 ).
Выбрать данные
Пример
Что делает
Урок
SELECT * FROM books;
все столбцы таблицы
1
SELECT title, price FROM books;
только нужные столбцы
1
SELECT price * 0.9 AS sale_price
вычисляемый столбец со своим именем
3
SELECT DISTINCT genre FROM books;
убрать повторы
3
Отобрать строки: WHERE
Пример
Что делает
Урок
WHERE price > 600
сравнение: =, <>, >, <, >=, <=
2
WHERE genre = 'роман'
текст и даты — в одинарных кавычках
2
WHERE genre = 'роман' AND price < 500
оба условия верны
2
WHERE (genre = 'роман' OR genre = 'наука') AND price > 800
хотя бы одно из условий; AND выполняется раньше OR — нужны скобки
2
WHERE genre IN ('наука', 'IT')
значение из списка
2
WHERE price BETWEEN 500 AND 700
диапазон вместе с границами
2
WHERE author LIKE 'Д%'
по образцу: % — любые символы, _ — ровно один
2
WHERE city IS NULL
значение не заполнено; = NULL не работает
4
Сортировка и ограничение
Пример
Что делает
Урок
ORDER BY price
по возрастанию
3
ORDER BY price DESC
по убыванию
3
ORDER BY genre, price DESC
по нескольким столбцам
3
ORDER BY price DESC LIMIT 3
топ-3
3
LIMIT 3 OFFSET 3
следующие три после первых трёх
3
Без ORDER BY порядок строк не гарантирован. В Microsoft SQL Server вместо LIMIT пишут TOP, в стандарте SQL — FETCH FIRST.
Итоги и NULL
Пример
Что делает
Урок
COUNT(*)
число строк
4
COUNT(city)
число заполненных значений
4
SUM(amount), AVG(price)
сумма и среднее
4
MIN(price), MAX(price)
наименьшее и наибольшее
4
ROUND(AVG(amount), 2)
округлить до двух знаков
4
COALESCE(city, 'не указан')
подставить значение вместо NULL
4
Группировка
Пример
Что делает
Урок
SELECT status, COUNT(*) FROM orders GROUP BY status;
итог по каждой группе
5
HAVING SUM(amount) > 1000
отобрать готовые группы
5
WHERE отбирает строки до группировки, HAVING — группы после. В SELECT группового запроса — только столбцы из GROUP BY и агрегаты.
Соединение таблиц
Пример
Что делает
Урок
FROM orders AS o JOIN customers AS c ON c.id = o.customer_id
только строки, у которых нашлась пара
6
FROM customers AS c LEFT JOIN orders AS o ON o.customer_id = c.id
все строки слева; где пары нет — NULL
6
LEFT JOIN … WHERE o.id IS NULL
записи без пары: покупатели без заказов
6
COUNT(o.id) после LEFT JOIN
считать связанные записи, а не строки
6
После соединения проверяйте число строк: ошибка в ON размножает данные.
Подзапросы и CASE
Пример
Что делает
Урок
WHERE price > (SELECT AVG(price) FROM books)
сравнить с одним значением из подзапроса
7
WHERE id IN (SELECT book_id FROM orders)
отобрать по списку из подзапроса
7
FROM (SELECT …) AS t
подзапрос вместо таблицы, обязательно с именем
7
CASE WHEN price > 700 THEN 'дорого' ELSE 'доступно' END
значение по условию; срабатывает первое подходящее
7
SUM(CASE WHEN status = 'доставлен' THEN 1 ELSE 0 END)
посчитать строки, подходящие под условие
7
Изменить данные
Пример
Что делает
Урок
INSERT INTO customers (name, city) VALUES ('Жанна', 'Омск');
добавить строку
8
UPDATE books SET price = 500 WHERE id = 2;
изменить значения
8
DELETE FROM orders WHERE status = 'отменён';
удалить строки
8
BEGIN; … COMMIT;
транзакция: сохранить все изменения разом
8
ROLLBACK;
отменить изменения незавершённой транзакции
8
UPDATE и DELETE без WHERE меняют всю таблицу. Перед ними выполните SELECT с тем же WHERE и посмотрите, какие строки попадут под правку.