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

Занятие 29. Отработка основных операторов. Часть 1

📁 Блок: SQL / MySQL / Повторение и закрепление ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#order #by #limit #offset #select #distinct #group #having #join #union

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

Повторяем операторы SQL, которые используются чаще всего: сортировка, ограничение, уникальные значения, агрегация, группировка, JOIN и UNION.

  • ORDER BY — сортировка; LIMIT/OFFSET — постраничный вывод.
  • DISTINCT — уникальные строки.
  • GROUP BY группирует, HAVING фильтрует группы.
  • JOIN — горизонтальное объединение таблиц; UNION — вертикальное.

📖 Сортировка результатов с помощью ORDER BY

Оператор ORDER BY используется для сортировки результатов запроса по одному или нескольким столбцам. По умолчанию сортировка производится по возрастанию (ASC); для убывания указывается DESC.

SELECT column1, column2, ...
FROM table_name
ORDER BY column1 [ASC|DESC], column2 [ASC|DESC], ...;

Сортировка выполняется после фильтрации и группировки, но перед LIMIT.

📖 Операторы LIMIT и OFFSET

LIMIT ограничивает количество возвращаемых строк. OFFSET пропускает указанное количество строк от начала результата. Вместе они реализуют постраничный вывод (pagination).

SELECT column1, column2, ...
FROM table_name
ORDER BY column_name
LIMIT number_of_rows OFFSET offset_value;

Например, для вывода второй страницы по 10 строк: LIMIT 10 OFFSET 10.

📖 Выбор уникальных значений с помощью DISTINCT

DISTINCT удаляет полные дубликаты строк из результата запроса. Его можно применять к одному или нескольким столбцам.

SELECT DISTINCT city FROM customers;
SELECT DISTINCT city, country FROM customers;

Важно: COUNT(DISTINCT column) считает уникальные не-NULL значения.

📖 Агрегирующие функции и GROUP BY

Агрегирующие функции выполняют вычисления над набором строк и возвращают одно итоговое значение. Основные функции:

  • COUNT(*) — количество строк.
  • COUNT(column) — количество не-NULL значений.
  • SUM(column) — сумма.
  • AVG(column) — среднее (игнорирует NULL).
  • MIN(column) — минимум.
  • MAX(column) — максимум.

GROUP BY группирует строки с одинаковыми значениями в указанных столбцах. Агрегирующая функция применяется к каждой группе отдельно.

SELECT city, COUNT(*) AS customer_count
FROM customers
GROUP BY city;

📖 Фильтрация групп через HAVING

HAVING применяется после GROUP BY и фильтрует группы по результатам агрегатных функций. WHERE для этого не подходит, потому что выполняется до группировки.

SELECT city, COUNT(*) AS customer_count
FROM customers
GROUP BY city
HAVING COUNT(*) > 5;

Правило: GROUP BY может быть без HAVING, но HAVING без GROUP BY используется редко и фильтрует всю выборку как одну группу.

📖 Операторы JOIN и UNION

JOIN

JOIN соединяет таблицы горизонтально по условию.

  • INNER JOIN — только совпадающие строки.
  • LEFT JOIN — все строки левой таблицы + совпадения из правой.
  • RIGHT JOIN — все строки правой таблицы + совпадения из левой.
  • CROSS JOIN — декартово произведение.
  • FULL OUTER JOIN — все строки обеих таблиц (не поддерживается в MySQL напрямую).

UNION

UNION объединяет результаты двух и более SELECT вертикально. Все запросы должны иметь одинаковое количество столбцов и совместимые типы.

  • UNION — удаляет дубликаты.
  • UNION ALL — сохраняет все строки, быстрее.

📖 Порядок выполнения SQL-запроса

Порядок выполнения операторов отличается от порядка написания:

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