1.24. Языки запросов
Языки запросов
Языки запросов (Query Languages) - это языки, предназначенные для извлечения и манипуляции данными в различных системах, чаще всего в базах данных.
Запросом называют инструкцию или команду, которая направлена системе (обычно системе управления базами данных) с целью извлечь или модифицировать данные. Запрос имеет:
- декларативный характер (вы указываете что хотите получить, а не как это сделать);
- структурированность (запросы следуют строгому синтаксису языка);
- исполняемость (запрос передаётся системе, которая его интерпретирует и выполняет);
- результат (может быть набором данных, сообщением об успешном выполнении или ошибкой).
Запросы используются в базах данных, поисковых системах, семантических базах. В основном, когда речь идёт о «языках запросов», то говорят именно о SQL/NoSQL, однако даже файловые системы или API могут иметь свои языки запросов, например, GraphQL для API.


SQL (Structured Query Language) – стандартный язык запросов к реляционным базам данных. Дата создания — 1974 год (SEQUEL), современный вид получил в 1986 году. Основными особенностями являются декларативность, работа с таблицами, поддержка агрегаций, фильтров, соединений. Выполняется через SQL-движок СУБД. Применяется в управлении и анализе данных в реляционных БД. Один из самых популярных языков в мире, основа всех систем хранения структурированных данных.
SELECT name, age
FROM users
WHERE age > 18
ORDER BY age;
PL/pgSQL – процедурный язык расширения SQL в PostgreSQL. Дата появления — 1998 год. Основными особенностями являются поддержка функций, циклов, переменных, триггеров. Работает внутри PostgreSQL. Применяется для написания бизнес-логики прямо в базе данных. Важен в продвинутых PostgreSQL-проектах.
DO $$
BEGIN
IF (SELECT SUM(salary) FROM employees) > 100000 THEN
INSERT INTO logs (message, timestamp)
VALUES ('High payroll detected', NOW());
END IF;
END $$;
T-SQL (Transact-SQL) – диалект SQL от Microsoft, используемый в SQL Server и Azure SQL. Дата появления — 1989 год. Основными особенностями являются дополнительные конструкции (например, IF-ELSE, WHILE), поддержка хранимых процедур. Работает в экосистеме Microsoft. Применяется в корпоративных и enterprise-системах на основе SQL Server.
DECLARE @count INT = 0;
WHILE @count < 5
BEGIN
PRINT 'Attempt ' + CAST(@count AS VARCHAR);
SET @count = @count + 1;
END
PL/SQL – процедурный язык расширения SQL от Oracle. Дата появления — 1988 год. Основными особенностями являются богатые возможности для написания процедур, функций, пакетов, курсоров. Работает в Oracle Database. Применяется в крупных корпоративных системах, где используется Oracle. Один из ключевых инструментов в Oracle-экосистеме.
DECLARE
CURSOR emp_cursor IS SELECT name, salary FROM employees WHERE dept = 'IT';
emp_name employees.name%TYPE;
emp_salary employees.salary%TYPE;
BEGIN
OPEN emp_cursor;
LOOP
FETCH emp_cursor INTO emp_name, emp_salary;
EXIT WHEN emp_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(emp_name || ': ' || emp_salary);
END LOOP;
CLOSE emp_cursor;
END;
MongoDB Query Language – язык запросов к MongoDB, документоориентированной NoSQL базе данных. Дата появления — 2009 год. Основными особенностями являются работа с BSON-документами, гибкий синтаксис, поддержка агрегационных операций. Работает через MongoDB Shell и драйверы. Применяется в проектах с неструктурированными данными, микросервисами, big data.
db.users.find(
{ age: { $gt: 18 }, status: "active" },
{ name: 1, email: 1, _id: 0 }
);
Cypher – язык запросов к графовой базе данных Neo4j. Дата появления — 2010 год. Основными особенностями являются визуальная ориентация синтаксиса на графы, мощные возможности анализа связей. Работает в Neo4j. Применяется в социальных сетях, рекомендательных системах, анализе зависимостей. Один из ключевых языков в области graph databases.
MATCH (a:User)-[:FRIEND]->(b:User)-[:LIVES_IN]->(c:City {name: "Moscow"})
RETURN a.name, c.name;
Gremlin – язык запросов для работы с графовыми базами данных, часть Apache TinkerPop. Дата появления — 2009 год. Основными особенностями являются поддержка транзакций, движение по графу, гибкость в реализации. Работает в различных графовых БД, поддерживающих TinkerPop. Применяется в системах, где важны связи между объектами.
g.V().has('label', 'User')
.out('FRIEND')
.has('age', gt(25))
.values('name');
SPARQL – язык запросов к RDF-данным, используемый в семантической паутине. Дата появления — 2008 год. Основными особенностями являются работа с тройками (subject-predicate-object), поддержка OWL и RDFS. Работает в RDF-хранилищах. Применяется в научных проектах, Linked Data, семантическом поиске.
SELECT ?person ?email
WHERE {
?person a <http://schema.org/Person> ;
<http://schema.org/email> ?email .
}
XQuery – язык запросов к XML-документам, позволяющий извлекать и преобразовывать данные. Дата появления — 2001 год. Основными особенностями являются работа с деревьями XML, поддержка XPath, функциональный стиль. Работает в XML-базах данных. Применяется в системах обработки XML, legacy-веб-приложениях.
for $book in doc("library.xml")//book
where $book/price > 30
return $book/title
GraphQL – язык запросов к API, позволяющий клиентам точно указывать, какие данные им нужны. Дата создания — 2012 год (Facebook), открыт в 2015 году. Основными особенностями являются типизация, одно вызов — много данных, гибкость в выборке. Работает через HTTP как надстройка над REST. Применяется в клиент-серверных взаимодействиях, особенно в SPA и мобильных приложениях. Активно развивается, поддерживается многими компаниями.
query {
user(id: "123") {
name
email
posts(limit: 5) {
title
comments { author { name } }
}
}
}