~/VibeHandbook
PDF бесплатно

Языки

iso.org

SQL

Что это

(Structured Query Language, язык структурированных запросов) — это стандартный язык для запросов и работы с реляционными базами данных, такими как PostgreSQL, MySQL, SQLite и SQL Server. Представьте, как вы заказываете блюдо в ресторане: вы говорите, что хотите видеть на тарелке, а не как это готовить. SQL работает так же. Вы описываете нужный результат, а движок базы данных сам определяет, как эффективно его получить. Это называется декларативностью.

Сильные стороны

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

Компромиссы

  • Диалекты различаются (Postgres против MySQL против SQLite), поэтому переносимость не полная.
  • Легко написать медленные запросы; производительность зависит от индексов и планов запросов.
  • Не язык общего назначения — управление потоком и логика реализуются неуклюже.
  • Изменения схемы (миграции) требуют осторожности в продакшене.

Когда обращаться

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

Подходит для vibe coding

ИИ-ассистенты сильны в SQL и удивительно хорошо переводят вопросы на простом языке в запросы, но они могут гадать о вашей схеме. Направьте ИИ, вставив фактические определения таблиц (выражения CREATE TABLE) и назвав вашу конкретную базу данных (Postgres, SQLite и т. д.), чтобы он использовал правильный диалект и функции. Попросите его объяснить запрос и предложить индексы для медленных. Всегда заставляйте его параметризовать пользовательский ввод, а не вставлять значения прямо в текст запроса. Представьте поле ввода, куда человек вписывает не имя, а команду; если вставить этот текст прямо в запрос, база данных может её выполнить. Если держать пользовательский ввод отдельно, это предотвращается, а такая атака называется SQL-инъекцией. Проверяйте сгенерированные запросы на небольшой выборке, прежде чем запускать их в продакшене.

SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.active = true
GROUP BY u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC;