25 готовых промтов для SQL: от сложных запросов в PostgreSQL до проектирования схем и оптимизации БД

Если вы работаете с базами данных, то знаете, как много времени занимает написание сложных запросов, отладка производительности и проектирование схем. Но что, если я скажу, что 70% этой рутины можно автоматизировать с помощью промтов для ChatGPT? В этой статье я собрал 25 проверенных промтов, которые реально экономят часы работы. Вы узнаете, как генерировать сложные JOIN-запросы, находить узкие места в производительности, проектировать нормализованные схемы и даже автоматизировать миграции. Каждый промт сопровождается реальным примером использования — берите и применяйте.

1. Базовые промты: написание запросов

Промт 1: Сгенерировать SELECT-запрос с JOIN

Задача: Быстро получить объединённые данные из нескольких таблиц.

Промт: «Напиши SQL-запрос для PostgreSQL, который выводит имена клиентов и их заказы. Таблицы: customers (id, name), orders (id, customer_id, amount, order_date). Нужны только заказы за последний месяц, отсортированные по дате».

Пример результата:

SELECT c.name, o.amount, o.order_date
FROM customers c
JOIN orders o ON c.id = o.customer_id
WHERE o.order_date >= CURRENT_DATE - INTERVAL '1 month'
ORDER BY o.order_date DESC;

Промт 2: Объяснить сложный запрос

Задача: Понять, что делает чужой SQL.

Промт: «Объясни по шагам, что выполняет этот запрос: SELECT department_id, AVG(salary) FROM employees WHERE hire_date > '2020-01-01' GROUP BY department_id HAVING AVG(salary) > 50000;»

Пример результата: ChatGPT разберёт каждую часть: фильтрация по дате, группировка, агрегация, условие HAVING — и объяснит, почему HAVING нельзя заменить на WHERE.

Промт 3: Переписать запрос для MySQL

Задача: Адаптировать PostgreSQL-запрос для MySQL (синтаксис отличается).

Промт: «Перепиши этот PostgreSQL-запрос для MySQL, учитывая отличия в LIMIT и кавычках: SELECT * FROM products WHERE price > 100 ORDER BY created_at DESC LIMIT 5 OFFSET 10;»

Пример результата: MySQL поддерживает LIMIT 5 OFFSET 10, но кавычки для строк должны быть одинарными. ChatGPT учтёт это и даст рабочий вариант.

2. Продвинутые промты: оптимизация производительности

Промт 4: Найти медленные запросы

Задача: Выявить запросы, которые тормозят систему.

Промт: «Составь запрос к таблице pg_stat_statements (PostgreSQL), который покажет топ-10 самых медленных запросов по среднему времени выполнения, с учётом частоты вызовов».

Пример результата:

SELECT query, calls, mean_exec_time, max_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time DESC
LIMIT 10;

Промт 5: Проанализировать план выполнения

Задача: Понять, как БД выполняет запрос.

Промт: «Объясни, что означает "Seq Scan" и "Index Scan" в EXPLAIN ANALYZE. Приведи пример, когда один выгоднее другого».

Пример результата: ChatGPT объяснит, что Seq Scan — полное сканирование таблицы, а Index Scan — по индексу. Для таблицы на 10 млн строк выборка 1% записей быстрее через индекс, а 50% — через Seq Scan.

Промт 6: Создать недостающие индексы

Задача: Сгенерировать CREATE INDEX для ускорения запросов.

Промт: «Для таблицы orders (customer_id, order_date, status) предложи индексы, которые ускорят запрос: SELECT * FROM orders WHERE customer_id = 123 AND order_date > '2025-01-01'».

Пример результата: ChatGPT предложит составной индекс: CREATE INDEX idx_orders_customer_date ON orders (customer_id, order_date);

3. Экспертные промты: проектирование схем

Промт 7: Нормализация до 3НФ

Задача: Привести схему к третьей нормальной форме.

Промт: «У меня есть таблица: orders (id, customer_name, customer_email, product_name, product_price, order_date). Приведи её к 3НФ, объясни шаги».

Пример результата: ChatGPT выделит сущности: customers, products, orders, order_items — и покажет связи.

Промт 8: Денормализация для аналитики

Задача: Спроектировать схему для OLAP.

Промт: «Спроектируй схему типа "звезда" для анализа продаж: измерения — время, продукт, магазин; факты — сумма продаж. Покажи DDL для PostgreSQL».

Пример результата: ChatGPT создаст таблицы dim_time, dim_product, dim_store, fact_sales с внешними ключами.

Промт 9: Миграция схемы

Задача: Написать миграцию для добавления поля.

Промт: «Напиши SQL для миграции в PostgreSQL: добавить колонку phone VARCHAR(20) в таблицу customers, с проверкой на существование».

Пример результата:

ALTER TABLE customers ADD COLUMN IF NOT EXISTS phone VARCHAR(20);

4. Промты для анализа данных

Промт 10: Агрегация и группировка

Задача: Получить итоги по категориям.

Промт: «Напиши запрос: средний чек по каждому магазину за 2025 год. Таблицы: sales (store_id, amount, sale_date), stores (id, name)».

Пример результата:

SELECT s.name, AVG(sl.amount) AS avg_check
FROM sales sl
JOIN stores s ON sl.store_id = s.id
WHERE EXTRACT(YEAR FROM sl.sale_date) = 2025
GROUP BY s.name;

Промт 11: Оконные функции

Задача: Ранжирование и скользящие средние.

Промт: «Покажи, как с помощью ROW_NUMBER() выбрать последний заказ каждого клиента в PostgreSQL».

Пример результата:

SELECT * FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY order_date DESC) AS rn
  FROM orders
) t WHERE rn = 1;

Промт 12: Аномалии в данных

Задача: Найти выбросы.

Промт: «Напиши запрос для поиска заказов с суммой, превышающей среднюю на 3 стандартных отклонения (в PostgreSQL)».

Пример результата: Использование STDDEV() и AVG() в подзапросе.

5. Промты для администрирования

Промт 13: Бэкап и восстановление

Задача: Сгенерировать команды для pg_dump.

Промт: «Как сделать резервную копию базы данных PostgreSQL и восстановить её? Дай команды для pg_dump и psql».

Пример результата:

pg_dump -U username -h localhost dbname > backup.sql
psql -U username -h localhost dbname < backup.sql

Промт 14: Мониторинг соединений

Задача: Проверить активные подключения.

Промт: «Напиши SQL-запрос для PostgreSQL, который показывает активные сессии и их состояние».

Пример результата:

SELECT pid, usename, application_name, state, query
FROM pg_stat_activity
WHERE state = 'active';

Промт 15: Управление пользователями

Задача: Создать пользователя с правами.

Промт: «Создай пользователя для аналитика, который может только SELECT из таблиц схемы public в PostgreSQL».

Пример результата:

CREATE USER analyst WITH PASSWORD 'securepass';
GRANT USAGE ON SCHEMA public TO analyst;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO analyst;

6. Промты для отладки и решения проблем

Промт 16: Исправить ошибку синтаксиса

Задача: Найти и исправить ошибку.

Промт: «Вот запрос, он выдаёт ошибку: SELECT * FORM users WHERE id=1;. Исправь и объясни».

Пример результата: ChatGPT исправит FORM на FROM и объяснит, что это типичная опечатка.

Промт 17: Оптимизировать медленный запрос

Задача: Ускорить запрос.

Промт: «Этот запрос работает 10 секунд. Как его оптимизировать? SELECT * FROM logs WHERE created_at > '2025-01-01' ORDER BY created_at DESC;»

Пример результата: ChatGPT предложит добавить индекс на created_at, использовать LIMIT, и избегать SELECT *.

7. Промты для генерации тестовых данных

Промт 18: Сгенерировать INSERT-запросы

Задача: Наполнить таблицу тестовыми данными.

Промт: «Сгенерируй 100 INSERT-запросов для таблицы users (name, email, created_at) с реалистичными данными».

Пример результата: ChatGPT выдаст INSERT с разными именами и email.

Промт 19: Создать процедуру генерации

Задача: Написать хранимую процедуру для генерации данных.

Промт: «Напиши процедуру на PL/pgSQL, которая заполняет таблицу products (name, price) случайными данными».

Пример результата: Использование цикла и random().

8. Промты для документации и командной работы

Промт 20: Сгенерировать документацию по схеме

Задача: Описать таблицы и связи.

Промт: «Опиши схему БД для проекта интернет-магазина: таблицы customers, orders, products, order_items. Для каждой таблицы укажи назначение и основные поля».

Пример результата: ChatGPT создаст структурированное описание, готовое для README.

Промт 21: Написать комментарии к запросу

Задача: Добавить пояснения.

Промт: «Добавь комментарии к этому SQL-запросу: SELECT ... FROM ... WHERE ...».

Пример результата: Каждая строка будет прокомментирована.

9. Промты для обучения и проверки знаний

Промт 22: Создать тест по SQL

Задача: Сгенерировать вопросы.

Промт: «Составь 10 вопросов с вариантами ответов по теме JOIN в SQL, уровень — средний».

Пример результата: ChatGPT выдаст вопросы с ответами и пояснениями.

Промт 23: Объяснить разницу между SQL и NoSQL

Задача: Получить сравнительный анализ.

Промт: «Сравни реляционные БД и NoSQL по критериям: масштабируемость, согласованность, гибкость схемы. Приведи примеры использования».

Пример результата: Структурированное сравнение с примерами.

10. Промты для конкретных задач

Промт 24: Поиск дубликатов

Задача: Найти повторяющиеся записи.

Промт: «Напиши запрос для поиска дубликатов email в таблице users».

Пример результата:

SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1;

Промт 25: Обновление данных с подзапросом

Задача: Обновить записи на основе другой таблицы.

Промт: «Напиши UPDATE, который устанавливает статус 'gold' для клиентов с суммой заказов > 10000».

Пример результата: UPDATE customers SET status = 'gold' WHERE id IN (SELECT customer_id FROM orders GROUP BY customer_id HAVING SUM(amount) > 10000);

Итоги

Эти 25 промтов покрывают основные задачи, с которыми сталкивается каждый, кто работает с базами данных. Используйте их как отправную точку, адаптируйте под свои проекты и не забывайте проверять результаты. А если хотите систематизировать знания — загляните в наш блог, там много полезного. Надеюсь, эта подборка сэкономит вам часы работы и сделает вас чуточку продуктивнее. Сохраняйте статью в закладки, делитесь с коллегами и пишите в комментариях, какие промты используете вы!

← Все статьи

Комментарии