Статьи
Управление данными

Основные SQL-запросы для аналитиков данных: примеры и объяснения

SQL-запросы
Вы когда-нибудь задумывались, как компании эффективно анализируют большие объёмы данных? Будь то отслеживание покупок клиентов, мониторинг эффективности бизнеса или принятие решений на основе данных — SQL (язык структурированных запросов) играет ключевую роль в получении ценной информации.

Как аналитик данных, я изучаю SQL и исследую его мощные возможности. Я считаю, что делиться знаниями — отличный способ развиваться, поэтому я документирую всё, что узнаю, в надежде, что это поможет таким же учащимся, как вы. В этом гайде я расскажу об основных SQL-запросах, которые должен знать каждый аналитик, приведу практические примеры и задания для закрепления материала.


Базовые запросы

Оператор SELECT — выбор конкретных данных

SQL позволяет извлекать только нужную информацию из базы данных.
SELECT first_name, last_name, salary FROM employees;
Оператор WHERE — фильтрация данных

Извлекает только те записи, которые соответствуют заданному условию.
SELECT * FROM employees WHERE department = 'Sales';
Оператор ORDER BY — сортировка результатов

Сортирует записи по возрастанию или убыванию.
SELECT * FROM employees ORDER BY salary DESC;
💡 Совет для практики: Напишите запрос, который покажет всех сотрудников из отдела маркетинга, отсортированных по дате приёма на работу.

Агрегация и группировка

GROUP BY и HAVING — обобщение данных

Группирует записи по общему признаку и фильтрует агрегированные результаты.
SELECT department, AVG(salary) 
FROM employees 
GROUP BY department 
HAVING AVG(salary) > 50000;
COUNT, SUM, AVG, MAX, MIN — распространённые агрегатные функции

Помогают анализировать числовые данные.
SELECT COUNT(*) FROM employees;
SELECT SUM(salary) FROM employees;
SELECT AVG(salary) FROM employees;
💡 Практический пример: Компании часто используют агрегирующие запросы для расчёта общей выручки или среднего объёма продаж по регионам.

Объединение таблиц и связи

INNER JOIN — объединение связанных таблиц

Извлекает записи с совпадающими значениями в обеих таблицах.
SELECT employees.first_name, departments.department_name
FROM employees
INNER JOIN departments 
ON employees.department_id = departments.department_id;
LEFT JOIN и RIGHT JOIN — сохранение несовпадающих данных

Используются для включения всех записей из одной таблицы и только совпадающих записей из другой.
SELECT employees.first_name, departments.department_name
FROM employees
LEFT JOIN departments 
ON employees.department_id = departments.department_id;
💡 Типичная ошибка: Забытие условия ON при объединении может привести к некорректным результатам или дублированию записей.

Подзапросы и выражения CTE

Подзапрос — запрос внутри запроса

Полезен для динамического извлечения данных.
SELECT first_name, last_name 
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
CTE (Common Table Expressions) — временные именованные результаты

Улучшает читаемость и повторное использование запроса.
WITH HighSalary AS (
  SELECT first_name, salary 
  FROM employees 
  WHERE salary > 60000
)
SELECT * FROM HighSalary;
💡 Задание: Напишите запрос, чтобы найти сотрудников, зарабатывающих больше среднего по своему отделу.

Оконные функции

Функции ранжирования — присвоение номеров строкам

Позволяют ранжировать записи без агрегации.
SELECT first_name, salary,
RANK() OVER (ORDER BY salary DESC) AS ranking
FROM employees;
💡 Пример из жизни: Компании используют ранжирование, чтобы определить лучших сотрудников или самые продаваемые товары.

Запросы на изменение данных

INSERT, UPDATE, DELETE — изменение данных

Позволяют динамически управлять записями.
INSERT INTO employees (first_name, last_name, salary) 
VALUES ('John', 'Doe', 55000);

UPDATE employees 
SET salary = 60000 
WHERE first_name = 'John';

DELETE FROM employees 
WHERE salary < 30000;
💡 Практика: Добавьте нового сотрудника в базу и позже обновите его должность.

Оптимизация производительности

Индексация для ускорения запросов

Индексы повышают эффективность извлечения данных.
CREATE INDEX idx_salary ON employees(salary);
Оператор EXPLAIN — анализ производительности запроса

Помогает выявить неэффективные запросы.
EXPLAIN SELECT * FROM employees WHERE department = 'IT';
💡 Совет: Индексация колонок с малым числом уникальных значений (например, пол) может не дать заметного прироста производительности.

Заключение

SQL — мощный инструмент, который должен освоить каждый аналитик данных. Будь то извлечение данных, анализ тенденций или оптимизация запросов — SQL служит основой эффективной аналитики. Практикуясь на реальных наборах данных, вы обретёте уверенность и улучшите свои навыки решения задач.

🔍 Что дальше? Применяйте эти запросы на платформах, таких как Kaggle, LeetCode SQL или в своих проектах. Чем больше практики — тем проще становится SQL.