SELECT и фильтрация
Запрос должен выбирать только нужные столбцы и строки. Явный список полей обычно лучше SELECT *, потому что делает результат понятнее и уменьшает лишнюю передачу данных. Условия WHERE формулируют до группировки и помогают базе сократить объём обработки.
JOIN
JOIN объединяет таблицы по связанным ключам. INNER JOIN оставляет совпавшие строки, LEFT JOIN сохраняет все строки слева. Ошибка в условии соединения может многократно увеличить количество строк, поэтому после JOIN полезно проверять ожидаемое число записей.
GROUP BY и агрегаты
COUNT, SUM, AVG и другие агрегаты позволяют сворачивать данные. GROUP BY задаёт уровень детализации результата. Если требуется отфильтровать уже рассчитанные группы, используют HAVING, а не WHERE.
Оконные функции
Оконные функции позволяют рассчитывать ранги, накопительные суммы и значения относительно соседних строк, не сворачивая результат до одной строки на группу. Они часто заменяют сложные подзапросы и делают аналитический код понятнее.
Попробуйте на практике
Составить отчёт по продажам на T-SQL.
- Выберите продажи за один период через WHERE.
- Соедините таблицу продаж с клиентами.
- Сгруппируйте результат по клиенту.
- Посчитайте сумму и количество заказов.
- Добавьте ранг клиентов по сумме через оконную функцию.
Как проверить результат. Запрос правильный, если каждая строка результата соответствует одному клиенту, суммы не дублируются после JOIN и ранг рассчитывается поверх агрегата.
Частые вопросы
T-SQL сильно отличается от SQL?
Основные запросы похожи, но T-SQL добавляет специфические функции и процедурные возможности SQL Server.
Почему JOIN создаёт дубли?
Чаще всего связь между таблицами не один-к-одному или условие соединения неполное.
Нужно ли сразу создавать индексы?
Сначала стоит понять запрос и план выполнения, а индексы добавлять под реальные сценарии.
Самостоятельный разбор темы. Содержание конкретной обучающей программы здесь не представлено.