Занятие 29. Отработка основных операторов. Часть 1
⚡ Кратко: типичные ошибки
- Фильтрация агрегата через
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.