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

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

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

⚡ Кратко: типичные ошибки

  • Фильтрация агрегата через WHERE вместо HAVING.
  • Использование LIMIT без ORDER BY.
  • Разное количество столбцов в UNION.

🐛 Типичные ошибки и исправления

Ошибка 1. WHERE вместо HAVING

Неправильно:

SELECT city, COUNT(*) AS cnt
FROM customers
WHERE COUNT(*) > 2
GROUP BY city;

Почему плохо: WHERE выполняется до группировки, поэтому агрегатные функции в нём недоступны.

Правильно:

SELECT city, COUNT(*) AS cnt
FROM customers
GROUP BY city
HAVING COUNT(*) > 2;

Ошибка 2. LIMIT без ORDER BY

Неправильно:

SELECT * FROM products LIMIT 10;

Почему плохо: без ORDER BY порядок строк не определён, и каждый запуск может возвращать разные 10 строк.

Правильно:

SELECT * FROM products
ORDER BY product_name
LIMIT 10;

Ошибка 3. Разное количество столбцов в UNION

Неправильно:

SELECT company FROM customers
UNION
SELECT company, city FROM suppliers;

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

Правильно:

SELECT company, NULL AS city FROM customers
UNION
SELECT company, city FROM suppliers;

Ошибка 4. Путаница JOIN

INNER JOIN возвращает только совпадающие строки. Если нужно сохранить все строки одной из таблиц, используйте LEFT JOIN или RIGHT JOIN.