← К оглавлению занятия

Занятие 32. Summary session 8

📁 Блок: SQL / MySQL / Повторение ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя

⚡ Кратко: суть темы

Повторяем операторы 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. Порядок выполнения запроса

  1. FROM + JOIN — формирование таблиц.
  2. WHERE — фильтрация строк.
  3. GROUP BY — группировка.
  4. HAVING — фильтрация групп.
  5. SELECT — выбор столбцов.
  6. ORDER BY — сортировка.
  7. LIMIT / OFFSET — ограничение результата.