Conceptos clave

SELECT, FROM, WHERE: los tres pilares que tienes que dominar

5 min de lectura

Todo empieza con tres palabras

Cualquier consulta SQL, por compleja que parezca, se construye sobre tres cláusulas fundamentales: SELECT, FROM y WHERE. Dominar estas tres es suficiente para resolver una gran cantidad de análisis SEO. Las demás cláusulas (GROUP BY, ORDER BY, JOIN) son extensiones que se aprenden después, pero la base siempre es la misma.

La forma más clara de entenderlas es como una oración: «quiero ver estas columnas (SELECT) de esta tabla (FROM) donde se cumplan estas condiciones (WHERE)».

SELECT: qué columnas quiero ver

SELECT define qué información aparece en los resultados. Se especifican los nombres de las columnas separados por comas:

-- Pedir columnas específicas
SELECT event_name, event_date, user_pseudo_id
FROM `your-project.analytics_XXXXXXXXX.events_*`
LIMIT 10

Algunos usos comunes de SELECT:

  • SELECT *: pide todas las columnas. Útil para explorar, pero ineficiente en BigQuery porque procesa más datos (y consume más cuota). Conviene usarlo solo para exploración inicial.
  • SELECT columna AS alias: renombra la columna en los resultados. event_name AS evento muestra la columna como «evento».
  • SELECT DISTINCT columna: devuelve solo valores únicos, eliminando duplicados.

Es posible usar funciones dentro del SELECT para transformar datos: LOWER(url) convierte a minúsculas, CONCAT(a, b) une textos, ROUND(valor, 2) redondea decimales.

FROM: de dónde saco los datos

FROM especifica la tabla que contiene los datos. En BigQuery, el nombre completo incluye proyecto, dataset y tabla:

-- Tabla de eventos de GA4 (todas las tablas diarias)
FROM `your-project.analytics_XXXXXXXXX.events_*`

-- Tabla de impresiones de GSC a nivel de URL
FROM `your-project.searchconsole.searchdata_url_impression`

El asterisco en events_* es un comodín que permite consultar todas las tablas particionadas por día a la vez. Sin el comodín, habría que especificar cada tabla diaria por separado (events_20260415, events_20260416…), lo cual sería impracticable.

También es posible renombrar tablas con alias para hacer las queries más legibles: FROM tabla_larga AS t permite usar t.columna en el resto de la consulta.

WHERE: qué filtros aplico

WHERE es la cláusula que filtra filas. Solo las filas que cumplan todas las condiciones especificadas aparecerán en los resultados. Es el equivalente a un filtro en una hoja de cálculo, pero mucho más potente.

Operadores de comparación

-- Igualdad
WHERE traffic_source.medium = 'organic'

-- Desigualdad
WHERE event_name != 'session_start'

-- Mayor/menor
WHERE clicks > 100
WHERE position <= 10

-- Rango
WHERE data_date BETWEEN '2026-04-01' AND '2026-04-30'

-- Lista de valores
WHERE country IN ('ESP', 'MEX', 'ARG', 'COL')

-- Patrón de texto
WHERE url LIKE '%/blog/%'

-- Valor nulo
WHERE query IS NOT NULL

Combinar condiciones con AND y OR

AND requiere que se cumplan todas las condiciones. OR requiere al menos una. Los paréntesis definen la prioridad:

-- Tráfico orgánico en España, solo mobile
WHERE traffic_source.medium = 'organic'
  AND geo.country = 'Spain'
  AND device.category = 'mobile'

-- Tráfico orgánico O de referral
WHERE (traffic_source.medium = 'organic'
  OR traffic_source.medium = 'referral')
  AND event_name = 'session_start'

Los paréntesis son importantes. Sin ellos, la segunda query podría interpretarse de forma incorrecta porque AND tiene mayor precedencia que OR.

Filtrado de fechas en tablas particionadas

En BigQuery, las tablas de GA4 están particionadas por día. Para filtrar por rango de fechas se usa _TABLE_SUFFIX, que representa el sufijo YYYYMMDD de cada tabla:

WHERE _TABLE_SUFFIX BETWEEN
  FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
  AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())

Este filtro es fundamental para controlar los costos de BigQuery: sin él, la consulta procesaría todas las tablas existentes (meses o años de datos), consumiendo mucha más cuota de la necesaria.

Ejemplo completo paso a paso

Juntando las tres cláusulas en una consulta práctica de SEO, la query de tráfico orgánico por dispositivo:

SELECT
  device.category AS dispositivo,
  COUNT(DISTINCT user_pseudo_id) AS usuarios
FROM
  `your-project.analytics_XXXXXXXXX.events_*`
WHERE
  _TABLE_SUFFIX BETWEEN
    FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
    AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
  AND traffic_source.medium = 'organic'
  AND event_name = 'session_start'
GROUP BY
  dispositivo
ORDER BY
  usuarios DESC

Lectura: «quiero ver el dispositivo y el conteo de usuarios únicos (SELECT), sacados de la tabla de eventos de GA4 (FROM), filtrando los últimos 30 días, solo tráfico orgánico, solo eventos de inicio de sesión (WHERE)».

Conviene tener en cuenta que el orden de las cláusulas no es arbitrario: SQL exige que SELECT aparezca antes que FROM, y FROM antes que WHERE. Alterar ese orden produce un error de sintaxis. Esta rigidez, lejos de ser una limitación, facilita la lectura de cualquier consulta porque la estructura siempre es predecible.

Errores frecuentes con SELECT, FROM y WHERE

  • Olvidar las comillas simples en strings: WHERE medium = organic falla; debe ser WHERE medium = 'organic' (con comillas simples).
  • Usar = con NULL: WHERE campo = NULL nunca funciona; se debe usar WHERE campo IS NULL.
  • SELECT * en BigQuery: procesa todas las columnas, lo que consume mucha más cuota. Seleccionar solo las columnas necesarias es una buena práctica fundamental.
  • Olvidar _TABLE_SUFFIX: sin este filtro en tablas de GA4, la consulta lee todos los datos históricos y puede consumir decenas de GB de cuota en una sola ejecución.

Siguiente paso

Con SELECT, FROM y WHERE dominados, el siguiente concepto clave son las funciones de agregación (COUNT, SUM, AVG) y GROUP BY, que transforman listas de filas en resúmenes analíticos con datos accionables.

Queries para practicar

Principiante

Performance por dispositivo (mobile, desktop, tablet)

Compara el rendimiento de búsqueda por tipo de dispositivo. Permite detectar diferencias de posicionamiento o CTR entre mobile y desktop que indiquen problemas de UX o indexación.

Principiante

Tráfico orgánico por país y ciudad

Desglosa el tráfico orgánico por ubicación geográfica. Permite identificar mercados principales y oportunidades de contenido localizado.

¿Listo para practicar? Explora el catálogo de queries

Ver catálogo