Язык запросов
Оригинальное название: query language
Коротко
Специализированный язык, на котором описывают, какие данные нужно найти, отобрать или изменить в базе, документе или через API.
Что такое «Язык запросов»
Языки программирования описывают, как что-то сделать: шаг за шагом. Языки запросов обычно декларативны — описывают, что нужно получить, а способ поиска выбирает сама система. Запрос «все заказы за сентябрь дороже десяти тысяч» не говорит, в каком порядке читать таблицы и какие индексы использовать: это решает планировщик базы. Поэтому один и тот же запрос остаётся быстрым, когда данных становится в сто раз больше, — если правильно настроены индексы.
Основные языки запросов
- SQL — для реляционных баз: MySQL, MariaDB, PostgreSQL. На нём работают WordPress и 1С-Битрикс.
- GraphQL — для API: клиент сам перечисляет нужные поля и получает ровно их.
- XPath и XQuery — для XML-документов, например при разборе выгрузок 1С.
- Cypher — для графовых баз, где важны связи между объектами.
- Языки запросов документных NoSQL-баз — например, фильтры MongoDB в формате JSON.
Пример: один вопрос на SQL и GraphQL
-- SQL
SELECT name, price FROM products WHERE id = 42;
query { # GraphQL
product(id: 42) { name price }
}
Результат похож, а место работы разное. SQL выполняется внутри базы и видит её таблицы. GraphQL работает на уровне API: схему и связь полей с данными определяет сервер, а клиент лишь выбирает, что ему нужно.
Безопасность: инъекции
Самая известная уязвимость веба — SQL-инъекция: данные пользователя вставляют прямо в текст запроса, и злоумышленник дописывает туда свою команду. Защита — подготовленные запросы с параметрами, где данные передаются отдельно от команды. В WordPress для этого служит $wpdb->prepare(), в PDO — плейсхолдеры ? или именованные параметры. ORM и построители запросов вроде WP_Query или D7 в Битриксе делают это автоматически, пока разработчик не начинает собирать условия склейкой строк.

