Занятие 32. Summary session 8
⚡ Кратко: суть темы
Повторяем операторы SQL, которые уже проходили: сортировка, ограничение выборки, агрегаты, группировка, соединение таблиц и объединение результатов.
ORDER BY column [ASC|DESC]— сортировка.LIMIT n OFFSET m— постраничный вывод.COUNT,SUM,AVG,MIN,MAX— агрегаты.GROUP BY+HAVING— группировка и фильтр групп.INNER,LEFT,RIGHT,FULL,CROSS JOIN— соединения.UNION/UNION ALL— вертикальное объединение.
📖 Конспект повторения
Этот раздел — шпаргалка по операторам, которые мы повторяем на Summary session 8. Каждый блок содержит краткое определение, синтаксис и главные правила.
1. ORDER BY, LIMIT, OFFSET
ORDER BY сортирует результирующий набор по одному или нескольким столбцам.
SELECT column1, column2
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC];
ASC— по возрастанию (по умолчанию).DESC— по убыванию.- NULL в разных СУБД сортируется по-разному; уточняйте через
NULLS FIRST/NULLS LASTв PostgreSQL.
LIMIT ограничивает количество возвращаемых строк.
SELECT columns
FROM table_name
LIMIT number_of_rows;
OFFSET пропускает указанное число строк. Используется вместе с LIMIT для пагинации.
SELECT column1, column2
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;
2. Агрегирующие функции
Агрегаты вычисляют одно значение по набору строк.
| Функция | Назначение | Особенности |
|---|---|---|
COUNT(*) | Количество строк | Считает все строки, включая NULL. |
COUNT(column) | Количество не-NULL значений | Пропускает NULL. |
SUM(column) | Сумма | Только числовые типы. |
AVG(column) | Среднее значение | Игнорирует NULL. |
MIN(column) | Минимум | Работает с числами, строками, датами. |
MAX(column) | Максимум | Работает с числами, строками, датами. |
3. GROUP BY и HAVING
GROUP BY объединяет строки с одинаковыми значениями в группы. Агрегирующие функции применяются к каждой группе отдельно.
SELECT column_name, AGGREGATE_FUNCTION(column_name)
FROM table_name
GROUP BY column_name;
HAVING фильтрует группы по условию после агрегации.
SELECT column1, AGGREGATE_FUNCTION(column2)
FROM table_name
WHERE row_conditions
GROUP BY column1
HAVING group_condition;
WHEREотбирает строки до группировки.HAVINGотбирает группы после группировки.HAVINGбезGROUP BYиспользуется редко; в простых случаях фильтрует единственную группу.
4. JOIN
JOIN соединяет таблицы по условию.
SELECT columns
FROM table1
[INNER | LEFT | RIGHT | FULL | CROSS] JOIN table2
ON table1.column = table2.column;
| Тип JOIN | Что возвращает |
|---|---|
INNER JOIN | Строки с совпадениями в обеих таблицах. |
LEFT JOIN | Все строки из левой таблицы + совпавшие из правой. |
RIGHT JOIN | Все строки из правой таблицы + совпавшие из левой. |
FULL JOIN | Все строки из обеих таблиц при наличии совпадения в одной из них. |
CROSS JOIN | Декартово произведение строк. |
5. UNION и UNION ALL
UNION объединяет результаты нескольких SELECT-запросов в один результирующий набор.
SELECT * FROM table1
UNION
SELECT * FROM table2;
UNIONудаляет дубликаты и требует больше памяти.UNION ALLсохраняет все строки, включая дубликаты, и работает быстрее.- Все объединяемые запросы должны иметь одинаковое количество столбцов и совместимые типы данных.
6. Порядок выполнения запроса
FROM+JOIN— формирование таблиц.WHERE— фильтрация строк.GROUP BY— группировка.HAVING— фильтрация групп.SELECT— выбор столбцов.ORDER BY— сортировка.LIMIT/OFFSET— ограничение результата.