Добавить в корзинуПозвонить
Найти в Дзене
FanDzen

Что такое база данных и SQL

База данных — это место, где хранится информация в структурированном виде. Она похожа на таблицу Excel: есть строки (записи) и столбцы (поля). Но база данных обычно находится на сервере, и к ней можно обращаться из разных программ. SQL (Structured Query Language) — язык, на котором мы пишем запросы к базе данных. С помощью запроса можно: Для работы с SQL нужна СУБД (система управления базами данных). Самые популярные: MySQL, PostgreSQL, SQLite. Везде SQL почти одинаковый. Самый частый запрос — получить данные из таблицы. SELECT * FROM sales; SELECT — говорим, что хотим выбрать данные. Если нужны не все столбцы, а только некоторые, перечисляем их через запятую: SELECT product_name, price FROM sales; Уникальные значения — если нужно убрать дубликаты, используем DISTINCT: SELECT DISTINCT category FROM products; Эта команда покажет только разные категории (например, «Смартфоны», «Ноутбуки») без повторений. Чтобы выбрать не все строки, а только те, которые подходят под условие, добавляем WH
Оглавление

База данных — это место, где хранится информация в структурированном виде. Она похожа на таблицу Excel: есть строки (записи) и столбцы (поля). Но база данных обычно находится на сервере, и к ней можно обращаться из разных программ.

SQL (Structured Query Language) — язык, на котором мы пишем запросы к базе данных. С помощью запроса можно:

  • получить нужные данные (например, все продажи за вчера);
  • добавить, изменить или удалить записи;
  • соединить данные из нескольких таблиц.

Для работы с SQL нужна СУБД (система управления базами данных). Самые популярные: MySQL, PostgreSQL, SQLite. Везде SQL почти одинаковый.

Получение данных: SELECT и FROM

Самый частый запрос — получить данные из таблицы.

SELECT * FROM sales;

SELECT — говорим, что хотим выбрать данные.

  • — означает «все поля» (столбцы).
    FROM — указываем, из какой таблицы берём данные.
    sales — имя таблицы.

Если нужны не все столбцы, а только некоторые, перечисляем их через запятую:

SELECT product_name, price FROM sales;

Уникальные значения — если нужно убрать дубликаты, используем DISTINCT:

SELECT DISTINCT category FROM products;

Эта команда покажет только разные категории (например, «Смартфоны», «Ноутбуки») без повторений.

Условия: WHERE

Чтобы выбрать не все строки, а только те, которые подходят под условие, добавляем WHERE.

Числовые условия: =, <> (не равно), >, <, >=, <=.

SELECT * FROM sales WHERE amount > 100;

Покажет продажи, где количество товара больше 100.

Текстовые условия: LIKE (похоже на) или NOT LIKE.

SELECT * FROM products WHERE category LIKE 'смартфон';

Покажет только товары из категории «смартфон».

Список значений: IN.

SELECT * FROM products WHERE category IN ('смартфон', 'планшет');

Подойдут товары, у которых категория — смартфон или планшет.

Важно помнить про типы данных:

  • числа (integer, decimal) — пишем без кавычек: price > 5000
  • текст (varchar) — в кавычках: name LIKE 'iPhone'
  • даты (date) — обычно в кавычках: order_date = '2025-01-01'

Сортировка: ORDER BY

Чтобы отсортировать результат, используем ORDER BY. По умолчанию сортировка по возрастанию (от меньшего к большему). Для убывания добавляем DESC.

SELECT * FROM products ORDER BY price DESC;

Товары от дорогих к дешёвым.

SELECT * FROM sales ORDER BY sale_date;

Продажи от самой ранней даты к поздней.

Ограничение количества строк: LIMIT

Если нужно посмотреть только первые несколько строк (например, топ-10), пишем LIMIT.

SELECT * FROM products ORDER BY price DESC LIMIT 5;

Пять самых дорогих товаров.

Соединение таблиц: JOIN

Данные аналитика часто лежат в разных таблицах. Например:

  • таблица sales — продажи (код товара, дата, количество)
  • таблица products — описание товара (код товара, название, цена)

Нам нужно вывести продажу вместе с названием товара. Для этого соединяем таблицы по общему ключу (обычно это код товара).

INNER JOIN — берём только те записи, которые есть в обеих таблицах. Если, например, товар ни разу не продавался, он не попадёт в результат.

SELECT s.sale_date, p.product_name, s.quantity
FROM sales AS s
INNER JOIN products AS p ON s.product_code = p.product_code;

AS s и AS p — короткие имена (алиасы) для таблиц, чтобы не писать длинные названия.
ON — указываем, по каким полям соединяем.

LEFT JOIN — берём все записи из левой таблицы (которая указана после FROM), а из правой — только те, которые соединились. Если данных в правой таблице нет, вместо них будет NULL. Это полезно, чтобы не терять строки из основной таблицы.

SELECT p.product_name, s.sale_date
FROM products AS p
LEFT JOIN sales AS s ON p.product_code = s.product_code;

Здесь мы увидим все товары, даже те, которые никогда не продавались (у них в колонке sale_date будет пусто).

RIGHT JOIN используется редко (его можно заменить на LEFT, поменяв таблицы местами).

Агрегатные функции

Агрегатные функции вычисляют одно значение по группе строк:

  • SUM() — сумма
  • COUNT() — количество строк
  • AVG() — среднее арифметическое
  • MIN() — минимум
  • MAX() — максимум

SELECT SUM(amount) FROM sales;
-- общая сумма проданных товаров (в штуках)

SELECT COUNT(*) FROM sales;
-- сколько всего продаж (строк в таблице sales)

SELECT AVG(price) FROM products;
-- средняя цена товара

SELECT MIN(price), MAX(price) FROM products;
-- минимальная и максимальная цена

Группировка: GROUP BY

Агрегатные функции сами по себе дают одну итоговую строку. Но часто нужно посчитать суммы или количество по категориям, дням, товарам. Тогда используем GROUP BY.

SELECT category, COUNT(*) AS cnt
FROM products
GROUP BY category;

Покажет, сколько товаров в каждой категории. AS cnt даёт понятное имя столбцу.

SELECT product_code, SUM(quantity) AS total_sold
FROM sales
GROUP BY product_code;

Сколько всего штук каждого товара продано.

SELECT sale_date, COUNT(*) AS orders_count
FROM sales
GROUP BY sale_date
ORDER BY sale_date;

Количество продаж по дням.

Важно: в SELECT при использовании GROUP BY можно перечислять только те столбцы, которые входят в GROUP BY, или агрегатные функции. Например, нельзя просто взять product_name, если группируем по product_code (если несколько товаров с одинаковым кодом — но код обычно уникален).

Объединение результатов нескольких запросов: UNION

UNION позволяет склеить результаты двух или более запросов один под другим. Важно, чтобы в каждом запросе было одинаковое количество столбцов и совместимые типы данных.

SELECT product_name FROM products
UNION
SELECT customer_name FROM customers;

Выведет в одном столбце все названия товаров и все имена клиентов (уникальные, дубликаты убираются). Если нужны все строки с повторами, используйте UNION ALL.

Пример для аналитика: нужно получить список всех уникальных email-ов и из таблицы клиентов, и из таблицы сотрудников.

SELECT email FROM clients
UNION
SELECT email FROM employees;

Правильный порядок операторов в запросе

Когда вы пишете сложный запрос, соблюдайте эту последовательность (именно так SQL понимает команды):

  1. SELECT — какие поля выводим
  2. DISTINCT — если нужны уникальные значения
  3. FROM — откуда берём данные (основная таблица)
  4. JOIN — соединения с другими таблицами
  5. ON — условия соединения (после каждого JOIN)
  6. WHERE — фильтрация строк
  7. GROUP BY — группировка
  8. HAVING — фильтрация после группировки (редко, не рассматривали)
  9. ORDER BY — сортировка
  10. LIMIT — ограничение количества строк

Пример комплексного запроса

SELECT
p.category,
SUM(s.quantity) AS total_quantity
FROM sales AS s
INNER JOIN products AS p ON s.product_code = p.product_code
WHERE s.sale_date >= '2025-01-01'
GROUP BY p.category
ORDER BY total_quantity DESC
LIMIT 3;

Что делает: берёт продажи с начала января, соединяет с товарами, группирует по категориям, считает общее количество проданных единиц в каждой категории, сортирует от большего к меньшему и показывает только топ‑3 категории.

Коротко о подзапросах и HAVING (для расширения)

Подзапрос — запрос внутри запроса. Например, найти товары, цена которых выше средней:

SELECT product_name, price
FROM products
WHERE price > (SELECT AVG(price) FROM products);

HAVING — как WHERE, но для групп. Используется после GROUP BY:

SELECT category, SUM(quantity) AS total
FROM sales
JOIN products ON sales.product_code = products.product_code
GROUP BY category
HAVING total > 1000;

Покажет только те категории, где сумма продаж превышает 1000 штук.

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