¿Qué es una query y cómo leer una por primera vez?
5 min de lecturaUna pregunta escrita en código
La palabra «query» significa «consulta» en inglés. En el contexto de SQL, una query es una instrucción que se envía a una base de datos para obtener información específica. Es, literalmente, una pregunta formulada en un lenguaje que la base de datos entiende.
La buena noticia es que SQL se diseñó para ser legible. Las instrucciones se parecen a oraciones en inglés, y con un poco de práctica es posible leer una query compleja y entender qué hace, incluso sin saber escribirla desde cero.
Todas las queries del catálogo de Queryteca siguen la misma estructura básica. Entender esa estructura es la clave para leer cualquier consulta SQL, independientemente de su complejidad.
Las cinco cláusulas fundamentales
Toda query SQL se construye con cláusulas. Las cinco más importantes son:
SELECT -- Qué columnas quiero ver
FROM -- De qué tabla saco los datos
WHERE -- Qué filtros aplico
GROUP BY -- Cómo agrupo los resultados
ORDER BY -- Cómo ordeno los resultados
No todas las cláusulas son obligatorias en cada consulta. La más simple de las queries solo necesita SELECT y FROM:
SELECT event_name, event_date
FROM mi_tabla_de_eventos
Esta consulta dice: «quiero ver las columnas event_name y event_date de la tabla mi_tabla_de_eventos». Nada más. Sin filtros, sin agrupaciones, sin ordenamiento. Es el equivalente SQL de abrir una hoja de cálculo y mirar dos columnas.
A medida que se necesitan análisis más específicos, se van añadiendo cláusulas. Cada cláusula adicional refina la pregunta.
Lectura guiada de una query real
A continuación se muestra una query real del catálogo de Queryteca, desglosada línea por línea. Es una versión simplificada de la query de top landing pages orgánicas:
SELECT
page_location AS landing_page,
COUNT(DISTINCT session_id) AS sesiones
FROM
tabla_de_eventos
WHERE
medio = 'organic'
AND evento = 'session_start'
GROUP BY
landing_page
ORDER BY
sesiones DESC
LIMIT 50
Lectura paso a paso:
- SELECT: se pide la columna
page_location(renombrada comolanding_pagecon la palabra claveAS) y el conteo de sesiones únicas mediante la funciónCOUNT(DISTINCT session_id). - FROM: los datos se toman de
tabla_de_eventos. - WHERE: se aplican dos filtros combinados con
AND: solo tráfico orgánico (medio = 'organic') y solo eventos de inicio de sesión (evento = 'session_start'). Ambas condiciones deben cumplirse. - GROUP BY: los resultados se agrupan por
landing_page. Esto significa que se contarán las sesiones de cada página por separado, en lugar de sumar todas juntas. - ORDER BY: se ordena de mayor a menor número de sesiones (
DESC= descendente). Sin esta cláusula, el orden sería arbitrario. - LIMIT: se limita a los 50 primeros resultados. Sin esta cláusula, la query devolvería todas las páginas.
En español, esta query dice: «Muestra las 50 páginas de entrada con más sesiones orgánicas, ordenadas de mayor a menor».
Palabras clave que conviene reconocer
Algunas palabras reservadas aparecen constantemente en las queries SQL. Reconocerlas facilita la lectura:
AS: renombra una columna o tabla para darle un alias más legible.page_location AS landing_pagemuestra la columna con el nombre «landing_page» en los resultados.DISTINCT: elimina duplicados del conteo.COUNT(DISTINCT user_id)cuenta usuarios únicos, no eventos repetidos del mismo usuario.AND/OR: combinan condiciones en elWHERE.ANDrequiere que ambas se cumplan.ORrequiere al menos una.DESC/ASC: dirección de ordenamiento.DESCes de mayor a menor (descendente),ASCde menor a mayor (ascendente). Si no se especifica, el valor por defecto esASC.NULL: representa la ausencia de valor. No es cero ni una cadena vacía: es «no hay dato». Una columna puede contenerNULLcuando la información no está disponible.BETWEEN: define un rango.fecha BETWEEN '2026-04-01' AND '2026-04-30'incluye todas las fechas de abril.
Funciones: operaciones sobre los datos
Las funciones transforman o agregan datos. Se reconocen porque van seguidas de paréntesis. Las más comunes en consultas SEO:
COUNT(): cuenta filas.COUNT(*)cuenta todas las filas,COUNT(DISTINCT x)cuenta valores únicos de la columna x.SUM(): suma valores numéricos.SUM(clicks)suma todos los clics de las filas seleccionadas.AVG(): calcula el promedio.AVG(position)devuelve la posición media de las filas.MAX()/MIN(): valor máximo o mínimo.MAX(event_date)devuelve la fecha más reciente.ROUND(): redondea decimales.ROUND(3.14159, 2)devuelve3.14. Es habitual usarlo para que los porcentajes y promedios sean legibles.CONCAT(): une textos.CONCAT(nombre, ' ', apellido)combina dos columnas en una.
No hay que memorizar
El objetivo al empezar no es memorizar todas las cláusulas y funciones, sino desarrollar la capacidad de leer una query y entender su intención. La escritura se desarrolla con la práctica, y es perfectamente válido empezar copiando queries existentes y modificándolas para adaptarlas a necesidades específicas.
El catálogo de Queryteca está diseñado exactamente para eso: cada query incluye una explicación línea por línea que facilita la comprensión progresiva. No hace falta entender una query completa de golpe: se puede ir línea por línea, consultando qué hace cada parte.
El siguiente paso lógico es entender las diferencias entre GA4, BigQuery y Looker Studio para saber dónde se ejecutan estas queries y cómo se relacionan las herramientas entre sí.
Queries para practicar
Performance por país en GSC
Desglosa el rendimiento de búsqueda por país. Permite identificar mercados geográficos donde el sitio tiene presencia y detectar oportunidades de expansión internacional.
Deduplicar registros en una tabla de keywords
Elimina keywords duplicadas de una tabla conservando el registro con más clics o más reciente. Concepto fundamental de SQL aplicado a la gestión de listas de keywords para SEO.
Top 100 keywords por clics en los últimos 28 días
Obtiene las 100 keywords con más clics en los últimos 28 días. Permite conocer los términos que generan mayor volumen de tráfico orgánico real al sitio.
¿Listo para practicar? Explora el catálogo de queries
Ver catálogo