SQL с помощью ИИ
Перейти к разделу
SQL без заучивания синтаксиса
SQL — это язык для работы с базами данных, основа аналитической работы. Проблема в том, что освоение синтаксиса SQL занимает месяцы, и даже опытные аналитики ищут правильный способ написать сложный запрос. ИИ меняет это: опишите, что хотите узнать, — и ИИ напишет SQL за вас.
Вам не нужно знать SQL, чтобы попросить ИИ написать SQL-запрос. Достаточно знать, какие данные у вас есть (какие таблицы, какие столбцы) и что вы хотите узнать. Синтаксис, JOIN-ы, агрегации и всё остальное — забота ИИ.
Как описать запрос к данным
Чтобы ИИ сгенерировал правильный SQL, ему нужны три вещи: структура вашей базы данных (какие таблицы и столбцы у вас есть), что вы хотите узнать (бизнес-требование) и какие фильтры или условия применить.
Промпт для SQL: «У меня есть таблица orders со столбцами: id, customer_id, product_id, amount, created_at. И таблица customers со столбцами: id, name, email, country. Напиши SQL-запрос, который показывает топ-10 клиентов по суммарным тратам за последние 12 месяцев, включая имя и количество заказов.»
-- AI generates something like:
SELECT
c.name,
c.email,
COUNT(o.id) AS order_count,
SUM(o.amount) AS total_spent
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE o.created_at >= CURRENT_DATE - INTERVAL '12 months'
GROUP BY c.id, c.name, c.email
ORDER BY total_spent DESC
LIMIT 10;Основные паттерны SQL
Существует несколько паттернов SQL, которые покрывают 90% случаев использования. Их не нужно заучивать — достаточно знать, что они существуют, чтобы лучше формулировать запросы к ИИ. Но понимание помогает проверять результаты.
Фильтрация и сортировка
-- 'Show orders over $100 from the last month,
-- sorted by newest first'
SELECT *
FROM orders
WHERE amount > 100
AND created_at >= CURRENT_DATE - INTERVAL '1 month'
ORDER BY created_at DESC;Агрегации (суммы, средние, подсчёты)
-- 'How many orders and how much revenue did we have
-- each month in 2025?'
SELECT
DATE_TRUNC('month', created_at) AS month,
COUNT(*) AS order_count,
SUM(amount) AS total_revenue,
AVG(amount) AS avg_order_value
FROM orders
WHERE created_at >= '2025-01-01'
GROUP BY DATE_TRUNC('month', created_at)
ORDER BY month;JOIN-ы (объединение таблиц)
-- 'For each product show the name, category,
-- total sales and number of customers'
SELECT
p.name AS product_name,
p.category,
SUM(o.amount) AS total_sales,
COUNT(DISTINCT o.customer_id) AS unique_customers
FROM orders o
JOIN products p ON o.product_id = p.id
GROUP BY p.id, p.name, p.category
ORDER BY total_sales DESC;Оконные функции
Оконные функции — продвинутая концепция SQL, с которой ИИ справляется отлично. Они используются для вычислений «внутри группы» — например, для сравнения каждого клиента со средним значением по его региону.
-- 'For each customer show their monthly spending
-- and the average for their region in the same month'
SELECT
c.name,
c.country,
DATE_TRUNC('month', o.created_at) AS month,
SUM(o.amount) AS customer_spending,
AVG(SUM(o.amount)) OVER (
PARTITION BY c.country,
DATE_TRUNC('month', o.created_at)
) AS region_avg
FROM orders o
JOIN customers c ON o.customer_id = c.id
GROUP BY c.id, c.name, c.country,
DATE_TRUNC('month', o.created_at)
ORDER BY month, c.country;Валидация SQL, сгенерированного ИИ
ИИ генерирует SQL, который в большинстве случаев правильный, но не всегда. Перед запуском в продакшне нужно проверять каждый запрос. Есть простые правила, которые помогают.
- Проверяйте имена таблиц и столбцов — ИИ иногда их выдумывает, если не знает точную схему
- Проверяйте условия JOIN — плохой JOIN может умножить строки и исказить результаты
- Тестируйте на небольшом датасете — добавьте LIMIT 10 перед запуском на всей базе
- Просите ИИ объяснить — «Объясни шаг за шагом, что делает этот запрос»
- Сравнивайте с ожидаемыми результатами — если знаете примерный ответ, проверьте его
Золотое правило: никогда не запускайте сгенерированные ИИ запросы с DELETE, UPDATE или DROP на продакшн-базе без проверки. Для аналитических SELECT-запросов риск низкий, но запросы на изменение данных могут нанести необратимый ущерб.
Продвинутые техники
Освоив основные паттерны, вы можете просить ИИ о более сложных анализах. Просто опишите бизнес-вопрос, и ИИ объединит JOIN-ы, подзапросы, оконные функции и CTE в один запрос.
Промпт для сложного запроса: «У меня есть таблицы orders, customers и products. Хочу видеть: для каждой категории продуктов — ежемесячную выручку, процент роста месяц к месяцу и накопленную выручку с начала года. Включай только клиентов с более чем 3 заказами.»
-- AI generates CTEs + window functions:
WITH active_customers AS (
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 3
),
monthly_sales AS (
SELECT
p.category,
DATE_TRUNC('month', o.created_at) AS month,
SUM(o.amount) AS revenue
FROM orders o
JOIN products p ON o.product_id = p.id
WHERE o.customer_id IN (
SELECT customer_id FROM active_customers
)
AND o.created_at >= DATE_TRUNC('year', CURRENT_DATE)
GROUP BY p.category, DATE_TRUNC('month', o.created_at)
)
SELECT
category,
month,
revenue,
ROUND(
(revenue - LAG(revenue) OVER (
PARTITION BY category ORDER BY month
)) * 100.0 / NULLIF(LAG(revenue) OVER (
PARTITION BY category ORDER BY month
), 0), 1
) AS growth_pct,
SUM(revenue) OVER (
PARTITION BY category
ORDER BY month
) AS ytd_revenue
FROM monthly_sales
ORDER BY category, month;Опишите ИИ одну из этих ситуаций (или свою собственную) и попросите его сгенерировать SQL: 1. «У меня интернет-магазин с таблицами orders, customers и products. Хочу видеть топ-5 клиентов, потративших больше всего за последний квартал, включая их любимую категорию продуктов.» 2. «У меня есть таблица events со столбцами user_id, event_type, created_at. Хочу видеть дневное количество уникальных пользователей, совершивших хотя бы одно действие типа purchase.» 3. «У меня есть таблица employees со столбцами name, department, salary, hire_date. Хочу сравнение средней зарплаты по отделам и сколько людей в каждом отделе получают ниже и выше среднего.» Для каждого запроса попросите ИИ объяснить, что делает каждая часть.
Подсказка
Если у вас есть доступ к базе данных, попробуйте запустить запрос. Если нет — попросите ИИ создать тестовые данные (CREATE TABLE + INSERT INTO) и запустите запрос в онлайн-редакторе SQL, например db-fiddle.com.
- ИИ генерирует SQL из описаний на естественном языке — вам не нужно знать синтаксис
- Опишите ИИ структуру базы данных (таблицы, столбцы) и бизнес-требование
- Основные паттерны: фильтрация, агрегации, JOIN-ы, оконные функции покрывают 90% потребностей
- Всегда валидируйте SQL перед запуском — проверяйте имена, условия JOIN, тестируйте на небольших датасетах
- Никогда не запускайте DELETE/UPDATE/DROP из ИИ без тщательной проверки
В следующем уроке мы погружаемся в ИИ для таблиц — техника, которая даёт вам явное преимущество. Откройте полный курс и продолжайте прямо сейчас.
2/7 завершено — продолжайте!