SQL: гайд для начинающих
SQL (Structured Query Language) — это язык структурированных запросов, предназначенный для управления и работы с данными в реляционных базах данных. SQL является одним из основных инструментов для извлечения, обработки и анализа информации. В этой статье мы рассмотрим все основные аспекты SQL, начиная с самых базовых понятий и заканчивая продвинутыми функциями, которые необходимы для работы аналитикам данных.
Что такое SQL?
SQL — это специализированный язык для взаимодействия с реляционными базами данных. Реляционные базы данных хранят данные в таблицах, которые имеют ряды и столбцы, а SQL позволяет выполнять запросы для извлечения, вставки, обновления и удаления данных, а также для управления структурой данных.
SELECT имя, должность FROM сотрудники WHERE возраст > 30;
Этот запрос выбирает сотрудников, чей возраст больше 30, предоставляя информацию об имени и должности подходящих персон.
Зачем аналитикам данных знать SQL?
SQL является основным инструментом для работы с большими объемами данных, хранящихся в базах данных. Аналитики данных часто сталкиваются с задачами:
Пример: вам необходимо проанализировать продажи за последний год и предоставить отчет по наиболее продаваемым товарам. Без SQL вы не сможете эффективно взаимодействовать с базой данных, где хранятся все эти продажи.
Основные концепции реляционных баз данных
До того, как начать углубляться в SQL, важно понять, как организованы данные в реляционных базах данных.
- Таблица — основной объект в базе данных, представляющий набор данных (аналог электронных таблиц). Например, таблица «сотрудники» может иметь столбцы «имя», «возраст», «должность».
- Запись (строка) — одна строка данных в таблице. Это может быть информация об одном сотруднике.
- Поле (столбец) — отдельная характеристика записи, например, «имя» или «возраст».
- Первичный ключ (Primary Key) — уникальный идентификатор записи в таблице.
- Внешний ключ (Foreign Key) — ссылка на первичный ключ другой таблицы, обеспечивающая связь между таблицами.
Таблица: сотрудники | ID | Имя | Возраст | Должность | |----|----------|---------|--------------| | 1 | Иван | 35 | Менеджер | | 2 | Мария | 28 | Аналитик | | 3 | Алексей | 40 | Разработчик |
Как начать изучать SQL с нуля
Понять основные принципы работы баз данных
Для начала необходимо понять, как работают реляционные базы данных: как организованы таблицы, что такое ключи, как строятся связи между таблицами.
Установить среду для работы с SQL
Для обучения вам понадобится доступ к базе данных. Несколько бесплатных вариантов:
- SQLite — простая база данных, которую можно использовать локально.
- MySQL — одна из самых популярных систем управления базами данных (СУБД).
- PostgreSQL — мощная и свободная СУБД с множеством возможностей.
- Онлайн-редакторы SQL — например, SQLFiddle, позволяющий тренироваться, не покидая браузер и не выполняя дополнительных установок.
Изучить основные команды SQL
Практиковаться
Практика — один из основных шагов в изучении SQL. Создавайте собственные запросы, манипулируйте данными, разбирайтесь в нюансах и особенностях языка.
Платформами для практики мы делились ранее в канале Центра непрерывного образования ФКН:
Основные команды SQL
Извлечение данных с помощью SELECT
Команда SELECT
используется для получения данных из таблицы. Рассмотрим базовый пример:
SELECT имя, возраст FROM сотрудники;
Здесь мы выбираем столбцы «имя» и «возраст» из таблицы «сотрудники».
Фильтрация данных с помощью WHERE
Чтобы извлекать только определенные записи, используйте условие WHERE
. Пример:
SELECT имя, возраст FROM сотрудники WHERE возраст > 30;
Этот запрос возвращает информацию о сотрудниках, чей возраст больше 30.
INSERT
Команда INSERT INTO
используется для добавления новых строк в таблицу:
INSERT INTO сотрудники (имя, возраст, должность) VALUES ('Ольга', 32, 'Аналитик');
UPDATE
Оператор UPDATE
используется для изменения данных в таблице:
UPDATE сотрудники SET возраст = 33 WHERE имя = 'Ольга';
DELETE
Команда DELETE
удаляет данные из таблицы:
DELETE FROM сотрудники WHERE имя = 'Ольга';
Условные операторы и фильтрация данных
SQL позволяет использовать несколько условных операторов для фильтрации данных:
SELECT имя FROM сотрудники WHERE имя LIKE 'А%';
Этот запрос выберет всех сотрудников, чье имя начинается на «А».
Сортировка данных с помощью ORDER BY
Команда ORDER BY
используется для сортировки данных по одному или нескольким столбцам. Вы можете указать порядок сортировки — по возрастанию (по умолчанию) или по убыванию (DESC
).
Пример: отсортируем сотрудников по возрасту (в порядке возрастания):
SELECT имя, возраст, должность FROM сотрудники ORDER BY возраст;
Если вы хотите отсортировать по убыванию:
SELECT имя, возраст, должность FROM сотрудники ORDER BY возраст DESC;
Можно сортировать сразу по нескольким столбцам. Например, сначала — по должности, затем — по возрасту:
SELECT имя, возраст, должность FROM сотрудники ORDER BY должность, возраст DESC;
Ограничение выборки с помощью LIMIT
Команда LIMIT
используется для ограничения количества строк, возвращаемых запросом. Это особенно полезно, если у вас большая база данных, а вы хотите получить только некоторые верхние результаты.
Пример: вернуть 5 самых молодых сотрудников:
SELECT имя, возраст, должность FROM сотрудники ORDER BY возраст LIMIT 5;
Этот запрос вернет только 5 строк, несмотря на то, что в таблице может быть больше записей.
Агрегатные функции
SQL поддерживает различные агрегатные функции, которые позволяют производить расчеты над данными:
SELECT COUNT(*), AVG(возраст) FROM сотрудники;
Этот запрос вернет количество сотрудников и их средний возраст.
Группировка данных
Оператор GROUP BY
используется для группировки данных на основе определенного критерия. Например:
SELECT должность, COUNT(*) FROM сотрудники GROUP BY должность;
Запрос вернет количество сотрудников на каждой должности.
Фильтрация с помощью HAVING
Оператор HAVING
используется для фильтрации данных после группировки (GROUP BY
). В отличие от оператора WHERE
, который фильтрует строки до группировки, HAVING
применяется к агрегированным данным.
Пример: получим должности, на которых работает больше 2 человек:
SELECT должность, COUNT(*) AS количество_сотрудников FROM сотрудники GROUP BY должность HAVING COUNT(*) > 2;
Объединение таблиц
Объединение таблиц (JOIN) — один из самых важных аспектов SQL для аналитиков данных. Они позволяют объединять данные из нескольких таблиц на основе общих полей.
- INNER JOIN — возвращает только те строки, где есть соответствие в обеих таблицах.
- LEFT JOIN — возвращает все строки из левой таблицы и соответствующие строки из правой.
- RIGHT JOIN — возвращает все строки из правой таблицы и соответствующие строки из левой.
- FULL JOIN — возвращает строки, которые есть в одной из таблиц или обеих.
INNER JOIN
INNER JOIN
возвращает только те строки, где есть совпадения в обеих таблицах.
Предположим, у нас есть вторая таблица «проекты», которая хранит информацию о проектах, над которыми работают сотрудники:
Таблица: проекты | проект_id | название | сотрудник_id | |-----------|----------------|--------------| | 1 | Аналитика 2024 | 2 | | 2 | Разработка ИИ | 1 | | 3 | Big Data | 3 |
Теперь соединим таблицы «сотрудники» и «проекты», чтобы узнать, кто над каким проектом работает:
SELECT сотрудники.имя, сотрудники.должность, проекты.название AS проект FROM сотрудники INNER JOIN проекты ON сотрудники.id = проекты.сотрудник_id;
Этот запрос вернет таблицу, содержащую информацию только о тех сотрудниках, которые работают над проектами.
LEFT JOIN
LEFT JOIN
возвращает все строки из левой таблицы (сотрудники) и совпадающие строки из правой (проекты). Если совпадений нет, будут возвращены значения NULL
для столбцов правой таблицы.
SELECT сотрудники.имя, сотрудники.должность, проекты.название AS проект FROM сотрудники LEFT JOIN проекты ON сотрудники.id = проекты.сотрудник_id;
Этот запрос вернет всех сотрудников, даже тех, кто не назначен ни на один проект. Для таких сотрудников в колонке «проект» будет NULL
.
RIGHT JOIN
RIGHT JOIN
работает аналогично LEFT JOIN
, но возвращает все строки из правой таблицы (проекты) и совпадающие строки из левой (сотрудники). Если сотрудник не работает над проектом, его имя и должность будут NULL
.
SELECT сотрудники.имя, сотрудники.должность, проекты.название AS проект FROM сотрудники RIGHT JOIN проекты ON сотрудники.id = проекты.сотрудник_id;
FULL JOIN
FULL JOIN
возвращает все строки из обеих таблиц, независимо от того, есть ли совпадения.
SELECT сотрудники.имя, сотрудники.должность, проекты.название AS проект FROM сотрудники FULL JOIN проекты ON сотрудники.id = проекты.сотрудник_id;
Подзапросы
Подзапросы — это запросы внутри других запросов, которые позволяют извлекать данные на основе результатов другого запроса.
SELECT имя FROM сотрудники WHERE возраст > (SELECT AVG(возраст) FROM сотрудники);
Этот запрос вернет имена сотрудников, чей возраст больше среднего.
Коррелированные подзапросы — это подзапросы, которые выполняются для каждой строки основной таблицы. Они зависят от внешнего запроса.
Пример: получим сотрудников, чей возраст выше среднего возраста всех сотрудников:
SELECT имя, возраст FROM сотрудники s WHERE возраст > (SELECT AVG(возраст) FROM сотрудники);
Этот запрос выполнит подзапрос один раз и вернет средний возраст, чтобы сравнить его с возрастом каждого сотрудника.
Теперь рассмотрим пример с коррелированным подзапросом, который зависит от строки основной таблицы. Пусть мы хотим узнать всех сотрудников, чей возраст больше среднего возраста сотрудников в их должности:
SELECT имя, возраст, должность FROM сотрудники s1 WHERE возраст > (SELECT AVG(возраст) FROM сотрудники s2 WHERE s1.должность = s2.должность);
Здесь подзапрос выполняется для каждой строки, возвращая средний возраст для каждой должности.
Работа с временными таблицами
Иногда полезно создавать временные таблицы для промежуточных расчетов. Это делается с помощью команды CREATE TEMPORARY TABLE
.
CREATE TEMPORARY TABLE временная_таблица AS SELECT имя, возраст FROM сотрудники WHERE возраст > 30;
Оптимизация запросов
Индексы
Индексы используются для ускорения поиска данных. Они создаются на определенных столбцах таблицы и позволяют быстрее находить записи.
Пример создания индекса на столбце "имя":
CREATE INDEX idx_имя ON сотрудники (имя);
Индексы особенно полезны на полях, которые часто используются в условиях фильтрации (WHERE
), сортировки (ORDER BY
) или соединений (JOIN
).
План выполнения запроса
Перед выполнением сложного запроса полезно посмотреть его план выполнения, чтобы понять, как именно база данных будет обрабатывать запрос. Команда EXPLAIN
помогает увидеть план выполнения запроса:
EXPLAIN SELECT имя, должность FROM сотрудники WHERE возраст > 30;
Вы увидите, как запрос будет обработан, и сможете определить, нужны ли индексы или другие оптимизации.
Работа с датами и временем
SQL поддерживает работу с датами и временем. Например, вы можете хранить дату приема на работу и анализировать стаж сотрудников.
Пример: добавим поле «дата приема» в таблицу сотрудников:
ALTER TABLE сотрудники ADD дата_приема DATE;
Теперь вставим данные о дате приема:
UPDATE сотрудники SET дата_приема = '2024-01-15' WHERE имя = 'Иван';
Для работы с датами используются различные функции:
Пример: получим всех сотрудников, которые работают более 3 лет:
SELECT имя, дата_приема FROM сотрудники WHERE DATEDIFF(NOW(), дата_приема) > 3 * 365;
Обработка текстовых данных
SQL предоставляет множество функций для работы с текстовыми данными. Некоторые из них:
Пример: получим имена сотрудников в верхнем регистре:
SELECT UPPER(имя) FROM сотрудники;
Объединим имя и должность в одной строке:
SELECT CONCAT(имя, ' — ', должность) AS информация FROM сотрудники;
Пример: извлечем первые три символа имени:
SELECT SUBSTRING(имя, 1, 3) FROM сотрудники;
Дополнение
Читаемость
Эффективность
Неделя бесплатного изучения SQL
Центр непрерывного образования ФКН дарит пробную неделю онлайн-курса «SQL для начинающих».
- Новичок без опыта: Изучите базу языка SQL и сможете структурировано подготовиться к собеседованию.
- Бизнес-аналитик: Научитесь работать с базами данных и писать оконные функции.
- Специалист смежной с аналитикой данных профессии (маркетолог, финансист, продакт-менеджер): Освоите новый мощный инструмент анализа данных.
Бесплатный модуль посвящен основам управлениями данными. За 1 неделю вы:
- Узнаете, что такое СУБД
- Разберетесь, для чего необходимо управление данными
- Изучите простой оператор SELECT и основы реляционных баз данных
Начать изучать SQL бесплатно уже сейчас: по ссылке.
Вебинар по SQL для начинающих
Делимся видеозаписью вебинара «Как заменить Excel на SQL для эффективной работы с данными»: знакомство с базовыми функциями и разбор практического кейса.
С помощью практических заданий вы изучите:
Освоение базового функционала SQL значительно сократит вам время на выполнение рутинных задач, а практические примеры помогут определить, где вы можете упростить работу уже сегодня.
Спикер: Олеся Максакова — преподаватель онлайн-курса «SQL для начинающих» в Центре непрерывного образования ФКН и старший контентный дата-аналитик в Иви.