1. Введение в базы данных и SQL
Введение в базы данных и SQL
Представьте, что вы работаете аналитиком в быстрорастущей сети кофеен. В первый месяц работы у компании была всего одна точка, и все продажи записывались в обычную таблицу Excel. В ней были колонки: дата, название напитка, цена, имя бариста.
Пока продаж было сто в день, таблица работала отлично. Вы могли легко посчитать выручку за смену или найти самый популярный кофе. Но через год сеть выросла до пятидесяти кофеен. Ежедневно совершаются десятки тысяч транзакций. Файл Excel стал весить сотни мегабайт, он открывается по пять минут, зависает при попытке построить сводную таблицу, а если два менеджера попытаются отредактировать его одновременно — данные могут быть безвозвратно испорчены.
Именно в этот момент бизнес переходит от электронных таблиц к профессиональным инструментам хранения данных.
Что такое база данных и СУБД
Чтобы решить проблему медленной работы и путаницы, информацию переносят в базу данных (БД) — организованную структуру для хранения, изменения и извлечения информации.
Базу данных можно сравнить с огромным, идеально структурированным складом. На этом складе товары не валяются в куче, а лежат на строго отведенных полках, каждая из которых имеет свой номер и категорию.
Однако сам по себе склад не может выдавать товары или вести их учет. Ему нужен заведующий. В мире IT таким заведующим выступает система управления базами данных (СУБД) — специальное программное обеспечение, которое позволяет пользователям и приложениям взаимодействовать с базой данных.
> СУБД берет на себя всю черновую работу: она следит за тем, чтобы данные не потерялись при сбое питания, чтобы два пользователя не изменили одну и ту же запись одновременно, и чтобы поиск нужной информации среди миллионов строк занимал доли секунды.
Самые популярные СУБД в аналитике данных — это PostgreSQL, MySQL, Microsoft SQL Server и Oracle. Несмотря на разные названия и компании-разработчики, все они работают по схожим принципам и понимают один и тот же язык запросов.
Реляционная модель данных
Существуют разные способы организации данных, но в бизнесе (особенно в финансах, ритейле и e-commerce) абсолютным стандартом являются реляционные базы данных. Термин происходит от английского слова relation (отношение), но на практике это означает, что данные хранятся в виде связанных таблиц.
В реляционной базе данных вся информация строго структурирована в виде двумерных массивов. Каждая таблица посвящена только одной сущности. Например, у нас будет отдельная таблица для клиентов, отдельная — для товаров, и отдельная — для заказов.
Анатомия таблицы
Любая таблица в реляционной БД состоит из двух фундаментальных элементов:
Имя, Email, Дата регистрации.Главное отличие таблицы в базе данных от листа в Excel заключается в жесткости структуры. В Excel вы можете в любой момент написать текст в ячейку, где до этого были только числа, или закрасить ячейку желтым цветом. Реляционная база данных такого не позволит. Она требует строгой дисциплины, и эта дисциплина обеспечивается типами данных.
Типы данных
При создании таблицы для каждого столбца необходимо указать тип данных — правило, которое определяет, какая именно информация может храниться в этой колонке. Это защищает базу от ошибок (например, от попытки записать слово «бесплатно» в колонку с ценой товара).
Рассмотрим основные типы данных, с которыми аналитик сталкивается каждый день:
Целые числа (Integer)
Используются для данных, которые можно посчитать поштучно. Примеры: количество проданных товаров, возраст клиента, количество бонусных баллов. В SQL этот тип обычно обозначается какINT или INTEGER.Числа с плавающей точкой (Decimal / Numeric)
Используются для точных финансовых расчетов или дробных метрик. Примеры: цена товара, сумма заказа, вес посылки в килограммах. Часто задается с указанием точности, напримерDECIMAL(10,2). Это означает, что число может состоять максимум из 10 цифр, при этом 2 из них будут находиться после запятой. Если цена товара составляет 1500.50 долл., она идеально впишется в этот тип.Строки и текст (String / Varchar)
Предназначены для хранения текстовой информации любой длины. Примеры: имя клиента, название товара, промокод, почтовый адрес. Обычно используется типVARCHAR(n), где n — максимальное количество символов. Например, VARCHAR(50) подойдет для email-адреса, а для длинного отзыва клиента лучше использовать тип TEXT, который вмещает огромные объемы символов.Дата и время (Date / Timestamp)
Критически важный тип для аналитики, так как большинство бизнес-отчетов привязаны к временным периодам (выручка за месяц, когортный анализ по неделям). *DATE хранит только дату (год, месяц, день). Пример: 2023-10-25.
* TIMESTAMP или DATETIME хранит дату и точное время вплоть до миллисекунд. Пример: 2023-10-25 14:30:00.Логический тип (Boolean)
Хранит только два значения: истина (TRUE) или ложь (FALSE).
Примеры: подписан ли клиент на рассылку, оплачен ли заказ, активен ли промокод.Первичные и внешние ключи: как связываются данные
Мы выяснили, что в реляционной базе данные разбиты на множество таблиц. Но как аналитику собрать из них единый отчет? Как узнать, какой именно клиент купил конкретный товар? Для этого существуют ключи.
Первичный ключ (Primary Key)
Первичный ключ — это столбец (или набор столбцов), который уникально идентифицирует каждую строку в таблице.
Представьте, что в вашей базе есть два клиента с именем Иван Иванов. Если они оба сделают заказ, как система поймет, кому именно начислять бонусные баллы? Имя не подходит для идентификации, так как оно может повторяться. Номер телефона может измениться.
Поэтому каждой записи присваивается уникальный идентификатор (ID). В таблице клиентов это будет customer_id.
Правила первичного ключа:
Внешний ключ (Foreign Key)
Внешний ключ — это столбец в одной таблице, который ссылается на первичный ключ в другой таблице. Именно внешние ключи создают те самые «реляции» (связи) между данными.
Рассмотрим пример. У нас есть таблица Orders (Заказы). В ней есть свой первичный ключ order_id (номер заказа). Чтобы указать, кто именно сделал этот заказ, мы добавляем в таблицу Orders колонку customer_id. Эта колонка и будет внешним ключом. Она не содержит имени клиента или его адреса — она содержит только число, которое отсылает нас к таблице Customers (Клиенты).
!Схема связи таблиц: первичный и внешний ключи
Такой подход называется нормализацией данных. Мы не дублируем информацию. Если Иван Иванов изменит свой номер телефона, нам нужно будет обновить его только в одном месте — в таблице Customers. Все его 50 прошлых заказов в таблице Orders автоматически будут ссылаться на актуальные данные, потому что они связаны через неизменный customer_id.
!Интерактивная демонстрация работы внешнего ключа
Типы связей между таблицами
В бизнес-аналитике вы будете встречать три основных типа связей:
Order_Items), которая содержит внешние ключи обеих таблиц.Что такое SQL и зачем он нужен аналитику
Теперь, когда мы понимаем, как данные хранятся и связываются, возникает вопрос: как их оттуда достать?
Для общения с реляционными базами данных был создан SQL (Structured Query Language — язык структурированных запросов). Это специализированный язык программирования, который позволяет создавать таблицы, добавлять в них данные, изменять их и, самое главное для аналитика, извлекать нужную информацию.
Главная особенность SQL заключается в том, что это декларативный язык. Когда вы пишете код на Python или C++, вы должны пошагово объяснить компьютеру, как получить результат (создай цикл, открой файл, прочитай строку, сравни значение). В SQL вы просто описываете, что вы хотите получить, а СУБД сама решает, как это сделать наиболее эффективным способом.
Пример бизнес-задачи: руководство просит вас узнать общую сумму продаж кофе «Капучино» за сентябрь 2023 года.
Если бы вы делали это в Excel, вам пришлось бы:
В SQL вы пишете один запрос, который читается почти как обычный английский текст:
Этот запрос отправится к СУБД. Она сама найдет нужную таблицу (sales), отфильтрует строки по условиям (WHERE) и сложит значения в колонке цены (SUM). В ответ вы получите не миллион строк, а одну единственную цифру — готовую выручку.
Почему аналитику недостаточно Excel или Python?
Жизненный цикл аналитической задачи
Чтобы лучше понять место SQL в вашей будущей работе, давайте посмотрим, как выглядит типичный процесс решения аналитической задачи.
Шаг 1: Понимание бизнес-требования. Менеджер по маркетингу спрашивает: «Какая рекламная кампания привела нам самых лояльных клиентов в прошлом году?»
Шаг 2: Перевод бизнеса на язык данных. Вы, как аналитик, понимаете, что «лояльный клиент» — это тот, кто сделал больше 5 заказов. Значит, вам нужно найти клиентов с количеством заказов > 5, посмотреть дату их регистрации (прошлый год) и узнать источник их перехода.
Шаг 3: Поиск таблиц.
Вы изучаете структуру базы данных (схему) и понимаете, что вам понадобятся три таблицы: Users (пользователи), Orders (заказы) и Marketing_Campaigns (кампании).
Шаг 4: Написание SQL-запроса. Вы пишете код, который объединяет эти три таблицы с помощью внешних ключей (оператор JOIN, который мы подробно изучим в следующих статьях), фильтрует данные по дате и группирует их по названию кампании.
Шаг 5: Анализ и визуализация. СУБД возвращает вам небольшую, агрегированную таблицу (например, 10 строк с названиями кампаний и количеством лояльных клиентов). Вы загружаете этот небольшой результат в Excel, Python или BI-систему, строите красивую диаграмму и отправляете менеджеру.
Как видите, SQL — это мост между сырыми, непонятными терабайтами данных и готовыми бизнес-решениями. Без умения строить этот мост работа аналитика данных просто невозможна. В следующих статьях мы начнем писать наши первые запросы и шаг за шагом разберем все ключевые команды этого мощного языка.