DeepEdit!

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

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта
Дата публикации: 15.05.2026

Написание SQL-запросов через ИИ

Хочу себе такие же кнопки

Введение

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


1. Почему ИИ помогает писать SQL

Проблема Как ИИ решает Пример
Длинные условия — много AND/OR Генерирует их автоматически, соблюдая приоритеты «Выберите клиентов, у которых сумма покупок > 1000 и которые сделали заказ в последнем месяце».
Неизвестные функции Предлагает нужные агрегаты, окна, CTE «Посчитайте средний чек за каждый день».
Ошибки в синтаксисе Быстрая проверка и исправление ИИ указывает, где забыли запятую или скобку.

Именно потому, что ИИ «видит» ваш запрос в контексте схемы, он может предложить оптимальное решение, а вам остаётся лишь проверить и при необходимости поправить.


2. Основные понятия и терминология

Термин Определение
Prompt Текстовое описание задачи, которое вы передаёте ИИ.
Schema Структура базы данных: таблицы, столбцы, типы, ключи.
DDL Data Definition Language – команды создания/изменения схемы (CREATE TABLE, ALTER).
DML Data Manipulation Language – команды работы с данными (SELECT, INSERT).
CTE (Common Table Expression) Временный набор результатов, объявляемый через WITH.
Parameterization Подстановка параметров вместо конкатенации строк, защищающая от SQL‑инъекций.

Все эти термины будут использоваться в примерах, поэтому запоминайте их заранее.


3. Как подготовить Prompt для генерации SQL

  1. Укажите цель – что именно нужно получить.
    Пример: «Получить список топ‑5 товаров по выручке».

  2. Опишите входные данные – какие таблицы и столбцы задействованы.
    Пример: «Таблица orders (order_id, product_id, quantity, price) и products (product_id, name)».

  3. Добавьте ограничения и сортировку – фильтры, группировки, порядок.
    Пример: «Только за 2023 год, сортировать по убыванию выручки».

  4. Укажите желаемый формат вывода – список, агрегаты, вложенные запросы.
    Пример: «Вывести product_name, total_sales».

  5. Не забудьте про ограничения – ограничения на количество строк, безопасность.
    Пример: «Не использовать подзапросы более двух уровней».

Совет: пишите запрос в виде небольшого диалога, а не одного длинного абзаца. ИИ лучше «понимает» короткие, чётко разделённые части.


4. Пример полного диалога с ИИ

Вы:

У меня есть две таблицы: employees (id, name, department_id, salary) и departments (id, dept_name). Нужно получить среднюю зарплату по каждому отделу, но только для тех отделов, где средняя зарплата выше 50000. Выведите dept_name и avg_salary, отсортировав по avg_salary убыванию.

ИИ (результат):

WITH dept_avg AS (
    SELECT 
        d.id,
        d.dept_name,
        AVG(e.salary) AS avg_salary
    FROM 
        departments d
    JOIN 
        employees e ON e.department_id = d.id
    GROUP BY 
        d.id, d.dept_name
    HAVING 
        AVG(e.salary) > 50000
)
SELECT 
    dept_name,
    avg_salary
FROM 
    dept_avg
ORDER BY 
    avg_salary DESC;

Пояснение ИИ:

  • WITH dept_avg AS (…) — CTE, упрощает дальнейший запрос.
  • HAVING — фильтр после агрегирования.
  • ORDER BY … DESC — сортировка по убыванию.

5. Как проверять сгенерированный код

Шаг Что делаем Почему
1️⃣ Сравниваем названия столбцов с Schema Чтобы убедиться, что ИИ не придумал несуществующие поля.
2️⃣ Выполняем запрос в тестовой среде (sandbox) Проверка синтаксиса и логики без риска продакшн‑данных.
3️⃣ Сравниваем результат с ожидаемым вручную Убедиться, что бизнес‑правила соблюдены.
4️⃣ Добавляем Parameterization если запрос содержит пользовательские данные Защита от SQL‑инъекций.
5️⃣ Оптимизируем план выполнения (EXPLAIN) Выявить потенциальные узкие места.

Если на каком‑то шаге обнаружена ошибка, просто уточните её в следующем запросе к ИИ: «В столбце salary тип DECIMAL(10,2), а я получил ошибку «тип данных не совместим»». ИИ автоматически поправит запрос.


6. Лучшие практики Prompt‑Engineering для SQL

Практика Описание Пример
Ясность Указывайте точные типы данных, если они влияют на синтаксис. «priceNUMERIC(12,2)».
Контекст При повторных запросах передавайте часть предыдущего кода. «Продолжи, используя CTE dept_avg из предыдущего сообщения».
Ограничения Указывайте максимум строк (LIMIT) и запрещённые конструкции. «Не использовать DISTINCT».
Тестовый набор Попросите ИИ сгенерировать небольшие тестовые данные. «Создай 5‑строк таблицы employees для проверки».
Пошаговый подход Сначала попросите схему, потом запрос, потом объяснение. 1️⃣ «Опиши схему», 2️⃣ «Сгенерируй запрос», 3️⃣ «Объясни каждый шаг».

7. Инструменты и платформы

Платформа Особенности Как подключить
ChatGPT (OpenAI) Поддержка «code interpreter», возможность задавать системные подсказки. Включить режим «Developer Mode», добавить system‑сообщение с описанием схемы.
GitHub Copilot Интеграция в VS Code, автодополнение SQL‑блоков. Установить расширение, включить AI Pair Programmer.
Google Gemini Хорошо работает с мультимодальными запросами (таблицы + текст). Через API, передавая schema в metadata.
SQL‑Assist (Open‑source) Локальная модель, работает без интернета. Запустить Docker‑контейнер, загрузить schema.json.

Все они используют один и тот же принцип: Prompt + Schema → SQL. Выбирайте тот, который удобнее в вашей рабочей среде.


8. Частые ошибки и как их исправлять

Ошибка Причина Решение
Column not found ИИ использовал псевдоним, не объявленный в SELECT. Добавьте AS‑псевдоним в CTE или уточните в Prompt.
Ambiguous column Одинаковые имена столбцов в разных таблицах без префикса. Указывайте таблицу (t1.column).
Incorrect data type Попытка сравнить VARCHAR с INT. Приведите типы (CAST(... AS INT)).
Performance issue ИИ использовал подзапрос вместо JOIN. Попросите переписать с JOIN и добавить индексы.
SQL injection risk Конкатенация пользовательского ввода. Перепишите запрос с параметрами (?, :name).

9. Пример сложного запроса с несколькими CTE

Задача:

Нужно получить список студентов, которые получили более 90 % от максимального балла в каждом предмете, а также вывести их средний балл по всем предметам. Таблицы: students (id, name), grades (student_id, subject_id, score), subjects (id, title).

Prompt:

Опиши запрос, используя CTE, без подзапросов более одного уровня, выводя student_name, subject_title, score, overall_avg. Сортировать по overall_avg убыванию.

Ответ ИИ:

WITH max_score_per_subject AS (
    SELECT 
        subject_id,
        MAX(score) AS max_score
    FROM 
        grades
    GROUP BY 
        subject_id
),
high_achievers AS (
    SELECT 
        g.student_id,
        g.subject_id,
        g.score,
        s.title AS subject_title,
        st.name AS student_name
    FROM 
        grades g
    JOIN 
        max_score_per_subject m ON g.subject_id = m.subject_id
    JOIN 
        subjects s ON g.subject_id = s.id
    JOIN 
        students st ON g.student_id = st.id
    WHERE 
        g.score >= 0.9 * m.max_score
),
overall_average AS (
    SELECT 
        student_id,
        AVG(score) AS overall_avg
    FROM 
        grades
    GROUP BY 
        student_id
)
SELECT 
    ha.student_name,
    ha.subject_title,
    ha.score,
    oa.overall_avg
FROM 
    high_achievers ha
JOIN 
    overall_average oa ON ha.student_id = oa.student_id
ORDER BY 
    oa.overall_avg DESC;

Разбор:

  • max_score_per_subject — вычисляет максимум в каждом предмете.
  • high_achievers — фильтрует студентов, превысивших 90 % от максимального.
  • overall_average — средний балл по всем предметам для каждого студента.
  • Финальный SELECT соединяет всё вместе и сортирует.

10. Как интегрировать генерацию SQL в ваш рабочий процесс

  1. Создайте шаблон Prompt в виде файла sql_prompt.txt.
  2. Автоматизируйте передачу схемы через schema.json.
  3. Запускайте скрипт (Python + OpenAI SDK) который:
    • Читает задачу от пользователя.
    • Формирует полный Prompt (шаблон + задача).
    • Получает ответ, сохраняет в generated.sql.
    • Выполняет EXPLAIN и выводит план.
  4. Проверка: добавьте unit‑тесты, сравнивающие результат с ожидаемым набором данных.

Пример кода (Python):

import openai, json, subprocess

with open('schema.json') as f:
    schema = json.load(f)

task = "Получить топ‑10 самых продаваемых товаров за последний квартал."
prompt = f"""Schema:
{json.dumps(schema, indent=2)}

Task: {task}
Generate SQL only, no explanation."""
response = openai.ChatCompletion.create(
    model="gpt-4o",
    messages=[{"role":"system","content":"You are a helpful SQL assistant."},
              {"role":"user","content":prompt}]
)
sql = response.choices[0].message.content.strip()
print(sql)

# optional: run EXPLAIN
subprocess.run(["psql", "-c", f"EXPLAIN {sql}"])

Практика для закрепления

  1. Упражнение 1
    Таблицы: orders (order_id, customer_id, order_date, total_amount) и customers (customer_id, city).
    Задача: Сформулируйте Prompt, который попросит ИИ вывести количество заказов и суммарную сумму по каждому городу за 2022 год, только для городов, где суммарная сумма превышает 500 000.

  2. Упражнение 2
    Сгенерируйте запрос, который найдёт всех сотрудников, получивших зарплату выше среднего по их отделу, и выведет employee_name, department_name, salary. Таблицы: employees (id, name, department_id, salary) и departments (id, name).

  3. Упражнение 3
    Опишите, как добавить parameterization к запросу из упражнения 2, если department_id будет передаваться пользователем. Приведите пример кода на Python с использованием psycopg2.

  4. Упражнение 4
    Вы получили от ИИ запрос, но в нём присутствует подзапрос более двух уровней. Переформулируйте Prompt, чтобы ИИ использовал только CTE и не более одного уровня вложенности.

  5. Упражнение 5
    Сравните план выполнения (EXPLAIN) двух вариантов одного и того же запроса: один с JOIN, второй с подзапросом в WHERE. Какие различия в стоимости вы видите? Какие рекомендации дадите для оптимизации?


Итоги

  • Чётко формулируйте цель, схему и ограничения в Prompt.
  • Проверяйте каждый сгенерированный запрос на соответствие схеме и бизнес‑правилам.
  • Используйте CTE, параметризацию и EXPLAIN для читаемости и производительности.
  • Практикуйтесь регулярно, меняя сложность задач – тогда ИИ станет вашим надёжным «соавтором» SQL‑кода.

Что такое нейросети и как они работают (простое объяснение)
Обзор популярных нейросетей: ChatGPT, Claude, Gemini, DeepSeek
Как правильно формулировать запросы (промты) для нейросетей
Регистрация и настройка аккаунтов в основных сервисах
Безопасность: что нельзя загружать в нейросети
Использование нейросетей для генерации идей для проектов
Написание писем и деловой переписки с помощью ИИ
Создание структуры доклада или презентации
Автоматическое реферирование больших текстов
Как нейросети помогают учить иностранные языки
Генерация тестов и экзаменационных вопросов
Подготовка к собеседованию с помощью ИИ
Написание постов для соцсетей и блогов
Создание конспектов лекций и видеоуроков
Объяснение сложных тем простыми словами
Генерация примеров для решения задач по математике
Написание кода на Python с помощью нейросетей
Отладка и исправление ошибок в коде
Написание SQL-запросов через ИИ
Автоматизация рутинных отчётов в Excel и Google Sheets
Анализ данных и поиск трендов
Создание таблиц и сводок из неструктурированного текста
Генерация резюме и сопроводительных писем
Составление планов уроков для преподавателей
Проверка грамматики и стиля текста
Генерация названий для статей и видео
Создание аннотаций и кратких содержаний книг
Помощь в решении творческих задач (написание сценариев)
Использование нейросетей для переговоров и аргументации
Составление расписания и to-do листов
Подбор литературы и источников по теме
Генерация возражений для тренировки продаж
Написание инструкций и руководств
Анализ тональности текста
Создание чек-листов для рабочих процессов
Как нейросети помогают перефразировать текст (рерайтинг)
Составление меню и планов питания с обоснованием
Подбор образовательных траекторий под цели ученика
Написание отзывов и рекомендательных писем
Создание вопросов для интервью
Генерация заданий для учеников с ответами
Обобщение переписок в мессенджерах (подведение итогов)
Расчёт бюджета и приблизительных смет
Составление плана развития навыков (roadmap)
Генерация базы знаний для нового сотрудника
Ускорение чтения и обработки документов
Перевод профессиональной лексики с пояснением
Создание скриптов для автоматизации нейросетями (API)
Этика использования ИИ: плагиат и проверки на ИИ
Ограничения и галлюцинации нейросетей (как проверять факты)
Создание пайплайна: от идеи до готового текста с помощью ИИ
Бесплатный курс Excel: логистика, учёт остатков и подбор транспорта
Чат с искусственной подругой
Чатрулетка: чат с новыми друзьями
Чай и кофе: утренний ритуал
Экран с отображением времени в полном размере
Фототехника с подсветкой
Генератор паролей с буквами и цифрами
Игры на развитие воображения у детей
Инновационные методы 3D-печати в строительстве бетонных конструкций
Легковые и микроавтобусы от немецких брендов
Материализация подсказок в Oracle Advanced Security для обеспечения безопасности данных
Местные автобренды России
Нейросети и анализ данных: бесплатно
Оптимизация работы с CDN GEO
Политика конфиденциальности и пользовательское соглашение
Смех без конца
Создание мемов без фотошопа: пошаговое руководство
Средства IP видеосистем
VDSina для чайников: основы
Видеосвязь без задержек
Виджет обратной связи с поддержкой
Зачем видеочат-ролетка в чате



jAntivirus
Политика конфиденциальности