Вы когда-нибудь задумывались, как компании эффективно анализируют большие объёмы данных? Будь то отслеживание покупок клиентов, мониторинг эффективности бизнеса или принятие решений на основе данных — SQL (язык структурированных запросов) играет ключевую роль в получении ценной информации.
Как аналитик данных, я изучаю SQL и исследую его мощные возможности. Я считаю, что делиться знаниями — отличный способ развиваться, поэтому я документирую всё, что узнаю, в надежде, что это поможет таким же учащимся, как вы. В этом гайде я расскажу об основных SQL-запросах, которые должен знать каждый аналитик, приведу практические примеры и задания для закрепления материала.
Как аналитик данных, я изучаю SQL и исследую его мощные возможности. Я считаю, что делиться знаниями — отличный способ развиваться, поэтому я документирую всё, что узнаю, в надежде, что это поможет таким же учащимся, как вы. В этом гайде я расскажу об основных SQL-запросах, которые должен знать каждый аналитик, приведу практические примеры и задания для закрепления материала.
Содержание:
Базовые запросы
Оператор SELECT — выбор конкретных данных
SQL позволяет извлекать только нужную информацию из базы данных.
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.
🔍 Что дальше? Применяйте эти запросы на платформах, таких как Kaggle, LeetCode SQL или в своих проектах. Чем больше практики — тем проще становится SQL.