¿Qué es un lenguaje de consulta?

Un lenguaje de consulta recupera y manipula datos en bases de datos, APIs y logs. SQL, GraphQL, MongoDB, KQL y Cypher comparados, con ejemplos y errores.

¿Qué es un lenguaje de consulta?

Un lenguaje de consulta (query language) es un lenguaje especializado para hacerle una pregunta a un sistema de datos: qué registros coinciden, en qué orden y con qué campos. Describes el resultado que quieres y el motor (una base de datos, un servidor de API, una plataforma de búsqueda o de logs) averigua cómo producirlo.

Por eso los lenguajes de consulta suelen ser más cortos que el bucle equivalente en Python o Java, y por eso los motores pueden aplicar índices, planificación de consultas y ejecución en paralelo sin que tú los escribas. Casi todas las capas de un stack moderno tienen uno: SQL para bases de datos relacionales, GraphQL para APIs, las consultas JSON de MongoDB para almacenes de documentos, y KQL, SPL y LogQL para logs.

Los principales lenguajes de consulta

SQL, para datos relacionales y analíticos

El lenguaje de consulta estructurado (SQL) es el estándar para bases de datos relacionales como PostgreSQL, MySQL, SQL Server, Oracle y SQLite, y también lo usan motores analíticos como BigQuery, Snowflake y Athena. Su modelo de tablas, filas, joins y agregaciones encaja con la mayoría de los datos de negocio.

SELECT u.name, COUNT(o.id) AS order_count
FROM users u
LEFT JOIN orders o ON o.user_id = u.id
WHERE u.created_at > '2026-01-01'
GROUP BY u.id, u.name
HAVING COUNT(o.id) > 5
ORDER BY order_count DESC
LIMIT 100;

GraphQL, para APIs

GraphQL permite que el cliente indique exactamente los campos que necesita y obtenga objetos relacionados en una sola petición, lo que evita datos de más y viajes de ida y vuelta adicionales. Consulta la entrada sobre GraphQL para la parte de API.

query {
  user(id: "123") {
    name
    orders(last: 10) {
      id
      total
    }
  }
}

Consultas de MongoDB, para almacenes de documentos

Las consultas de MongoDB tienen forma de JSON. Los filtros usan operadores como $eq, $gt, $in y $regex, y las agregaciones se ejecutan como una pipeline de etapas. Si el formato es nuevo para ti, lee sobre JSON.

db.orders.find({
  status: "shipped",
  total: { $gt: 100 }
}).sort({ total: -1 }).limit(10);

Query DSL de Elasticsearch y OpenSearch, para búsqueda

Un lenguaje basado en JSON construido en torno a la puntuación de relevancia. Combina búsqueda de texto completo, filtros, agregaciones y ordenación.

KQL, para logs y series temporales

Kusto Query Language es el lenguaje de Microsoft en forma de tuberías que se usa en Azure Monitor, Application Insights y Microsoft Sentinel. Cada línea transforma la salida de la anterior.

requests
| where timestamp > ago(1h)
| where resultCode >= 500
| summarize count() by name, bin(timestamp, 5m)
| order by timestamp desc

SPL, LogQL y PromQL, para datos de observabilidad

SPL es el lenguaje de búsqueda de Splunk. LogQL (Grafana Loki) filtra logs y toma ideas de PromQL, el lenguaje de Prometheus para métricas. Los tres funcionan como una pipeline o una expresión pensada para datos ordenados en el tiempo.

Cypher y GQL, para grafos

Cypher (Neo4j) describe patrones de grafo con una sintaxis de arte ASCII como (person)-[:KNOWS]->(friend). GQL, publicado como ISO/IEC 39075 en abril de 2024, es el primer lenguaje de consulta de bases de datos nuevo de ISO desde SQL y se apoya en las mismas ideas de grafo de propiedades. Gremlin es la alternativa de recorrido en las bases de datos compatibles con TinkerPop.

Estilo declarativo frente a estilo pipeline

La mayoría de los lenguajes de consulta son declarativos: indicas el resultado y el motor elige el plan de ejecución. Otros funcionan como una pipeline de pasos.

  • Declarativos: SQL, GraphQL, find de MongoDB, Query DSL de Elasticsearch.
  • Pipeline: KQL, SPL, LogQL, pipelines de agregación de MongoDB. Cada etapa recibe la salida de la anterior.
  • Procedimentales: procedimientos almacenados y funciones definidas por el usuario, para lógica que no cabe en una sola consulta, como bucles con estado.

Prefiere la forma declarativa cuando pueda expresar lo que necesitas: es más fácil de leer y el motor puede optimizarla. Recurre al código procedimental solo cuando el control de flujo lo exija.

Qué ocurre al ejecutar una consulta

El motor analiza el texto, lo comprueba contra el esquema, construye un plan de ejecución y lo ejecuta. El plan decide si se usa un índice o se recorren todas las filas, y en qué orden se unen las tablas. En SQL, EXPLAIN muestra ese plan y es el primer sitio donde mirar cuando una consulta va lenta.

Errores comunes

  • Inyección SQL. Nunca construyas una consulta concatenando datos del usuario. Usa consultas parametrizadas (sentencias preparadas), que mantienen los datos separados del texto de la consulta. Los parámetros no pueden sustituir nombres de tablas o columnas: asígnalos desde una lista de valores permitidos.
  • El patrón N+1. Un ORM que carga una lista y luego ejecuta una consulta adicional por elemento convierte una petición en cientos. Usa joins, carga anticipada o una herramienta de agrupación como DataLoader.
  • Índices que faltan. Sin un índice útil, el motor lee toda la tabla. Revisa el plan de ejecución de cualquier consulta lenta.
  • Consultas GraphQL sin límite. Las consultas muy anidadas pueden ser muy costosas. Fija límites de profundidad y de complejidad, y tiempos máximos.
  • Suponer que NULL se comporta igual en todas partes. El NULL de SQL se compara de forma distinta a null en MongoDB o GraphQL. Lee las reglas del lenguaje que uses.
  • Fiarse del cliente para el control de acceso. Aplica los permisos donde se ejecuta la consulta (seguridad a nivel de fila, resolvers de campo, roles), no filtrando resultados en el navegador.

Lenguajes de consulta, pruebas de carga y monitorización

Las consultas lentas suelen aparecer solo con tráfico concurrente: los índices que faltan, los patrones N+1 y los pools de conexiones agotados pasan desapercibidos con un solo usuario. Una prueba de carga sobre tu API reproduce ese tráfico e informa de percentiles de tiempo de respuesta y errores. En producción, la monitorización de API sigue el tiempo de respuesta de cada endpoint desde varias regiones, de modo que una regresión en una consulta se detecta poco después de desplegarla (consulta monitorización de API). El almacenamiento en caché ayuda cuando la misma consulta se repite: la caché de API explica cómo, y optimizar los pools de conexiones a la base de datos cubre la parte de los pools. Para la seguridad, consulta seguridad de bases de datos.

Preguntas frecuentes: lenguajes de consulta

¿Sigue mereciendo la pena aprender SQL?

Sí. Aunque una herramienta genere las consultas por ti, necesitas SQL para comprobar el resultado, leer un plan de ejecución y razonar sobre índices y joins.

¿Qué diferencia hay entre los lenguajes de consulta SQL y NoSQL?

SQL trabaja con tablas de esquema fijo y admite joins. Los lenguajes de consulta NoSQL se adaptan a su modelo de datos: documentos, columnas, pares clave-valor o grafos. Muchas aplicaciones usan ambos.

¿GraphQL está sustituyendo a REST?

No de forma generalizada. GraphQL encaja con clientes que necesitan datos flexibles y anidados. REST sigue siendo habitual en APIs sencillas y públicas, y muchos equipos usan ambos.

¿Qué lenguaje de consulta se usa para series temporales?

Son habituales PromQL para Prometheus, InfluxQL o Flux para InfluxDB y KQL para Azure Monitor. Combinan un rango de tiempo con agregaciones por intervalos.

¿Puede un solo lenguaje de consulta cubrir todos los tipos de datos?

No. SQL es el que más se acerca, y bases de datos como PostgreSQL añaden funciones de JSON, texto completo y geografía, pero para el recorrido de grafos, el análisis de logs y la búsqueda vectorial siguen existiendo lenguajes específicos.

¿Qué tan rápido es tu sitio web?

Mejora su velocidad y SEO sin problemas con nuestra Prueba de Velocidad gratuita.

Prueba de velocidad de sitio web gratis

Analice la velocidad de carga de su sitio web y mejore su rendimiento con nuestro comprobador de velocidad de página gratuito.