Introducción y Fundamentos Básicos de SQL

¿Qué es SQL?

SQL (Structured Query Language) es el lenguaje estándar utilizado para gestionar y manipular bases de datos relacionales. Permite a los usuarios realizar operaciones como la consulta, inserción, actualización y eliminación de datos mediante sentencias estructuradas. Es fundamental para extraer insights y generar reportes a partir de datos almacenados en tablas. En este caso, será importante para el manejo de bases de datos de gran volumen y distribuidas en distintas tablas, relacionadas por algún campo en común.

¿Qué es BigQuery?

Google BigQuery es un almacén de datos en la nube completamente gestionado y sin servidor, desarrollado por Google Cloud. Esta plataforma permite analizar grandes volúmenes de datos utilizando SQL, sin la necesidad de preocuparse por la infraestructura subyacente. 

Para comenzar a usar BigQuery será necesario crear un nuevo proyecto donde trabajaremos los ejercicios de este tutorial:

Primeros passo en BigQuery

Para poder usar la plataforma de Google BigQuery será necesario contar previamente con una cuenta de Google. Acceder a la plataforma y crear un nuevo proyecto.

1. Entrar a la plataforma BigQuery: El primer paso será ingresar a la plataforma de BigQuery con nuestra cuenta de google mediante el siguiente link (https://console.cloud.google.com/bigquery).

2. Crear un nuevo proyecto: Una vez dentro tendremos que crear un nuevo proyecto donde realizaremos las pruebas.

 

Datos Públicos: Google Trends

En esta oportunidad utilizaremos el conjunto de datos público bigquery-public-data.google_trends, que contiene información sobre términos de búsqueda y tendencias en Google. La tabla top_terms es en la que se registra los términos más populares y permite analizar la evolución de las búsquedas a lo largo del tiempo.

Cargar datos en el proyecto: Para cargar la base de datos en el proyecto se puede acceder a ellos desde el marketplace de Google Cloud (Google Trends Dataset). Y hacer click en e botón "Ver Conjunto de Datos". 

Funciones básicas de consulta

A continuación, se presentan algunos de los comandos básicos de consulta y de la sintaxis, para familizarizarnos con la sintaxis básica de SQL y la estructura del dataset. Sin embargo, antes de comenzar es importante conocer la interfaz de BigQuery:

Las cosultas se colocarán en el panel superior y luego de hacer click en el botón de "Ejecutar", los resultados se visualizarán en el panel inferior en formato de tabla.

Funciones básicas de consulta

Comando SELECT

El comando SELECT Permite elegir las columnas que se van a seleccionar de una tabla que estemos consultando. Se usa junto al comando FROM que indica la tabla consultada. Y en el ejemplo que se presenta a continuación también junto al comando LIMIT para indicar que solo se muestren las primeras 10 filas de resultado.

Ejemplo:

SELECT term, search_interest
FROM `bigquery-public-data.google_trends.top_terms`
LIMIT 10;

Explicación: Se seleccionan las columnas term y search_interest y se muestran los primeros 10 registros.

Comando WHERE

Filtra los registros de acuerdo a condiciones específicas que debe cumplir cada fila para ser incluida en el resultado. Esto nos va a permitir trabajar con un subconjunto de datos y seleccionar solo la información que realmente necesitamos.

Operadores de comparación

Operadores que permiten comparar los valores de columna

  • =: Igual a.
  • <> o !=: Distinto de.
  • >: Mayor que.
  • <: Menor que.
  • >=: Mayor o igual que.
  • <=: Menor o igual que.

Ejemplo:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE search_interest > 50;
 

Operadores lógicos

Operadores que permiten combinar múltiples condiciones en la cláusula WHERE.

  • AND: Todas las condiciones deben cumplirse.
  • OR: Al menos una de las condiciones debe cumplirse.
  • NOT: Niega la condición que le sigue.

Ejemplo con AND:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE region = 'US'
  AND search_interest > 50;

Ejemplo con OR:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE region = 'US'
   OR region = 'ES';

Ejemplo con NOT:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE NOT region = 'US';
 

Operador BETWEEN

Permite filtrar los registros cuyos valores se encuentren dentro de un rango específico.

Ejemplo:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE search_interest BETWEEN 10 AND 100;
 

Operador IN

Permite especificar múltiples valores válidos para una columna.

Ejemplo:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE region IN ('US', 'GB', 'ES');
 

Operador LIKE

Se utiliza para realizar búsquedas con patrones en cadenas de texto.

Ejemplo:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE term LIKE 'A%';
 

Operadores IS NULL / IS NOT NULL

Permiten filtrar registros basados en la presencia o ausencia de valores en una columna.

Ejemplo con IS NULL:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE region IS NULL;

Ejemplo con IS NOT NULL:

SELECT *
FROM `bigquery-public-data.google_trends.top_terms`
WHERE region IS NOT NULL;

Comando GROUP BY

Agrupa filas que tienen los mismos valores en una o más columnas, útil para funciones de agregación. En el ejemplo se usa junto al comando COUNT que cuenta los resultados.

Ejemplo:

SELECT term, COUNT(*) AS ocurrencias
FROM `bigquery-public-data.google_trends.top_terms`
GROUP BY term;

Explicación: Se agrupa la información por cada term y se cuenta el número de veces que aparece.

Comando HAVING

Similar a WHERE, pero se utiliza para filtrar grupos generados por GROUP BY.

Ejemplo:

SELECT term, COUNT(*) AS ocurrencias
FROM `bigquery-public-data.google_trends.top_terms`
GROUP BY term
HAVING COUNT(*) > 5;

Explicación: Se filtran los grupos para mostrar solo aquellos términos que aparecen más de 5 veces.

Comando ORDER BY

Ordena los resultados según una o más columnas, ya sea de forma ascendente (ASC) o descendente (DESC).

Ejemplo:

SELECT term, search_interest
FROM `bigquery-public-data.google_trends.top_terms`
WHERE search_interest > 50
ORDER BY search_interest DESC
LIMIT 10;

Explicación: Se ordenan los resultados de mayor a menor según search_interest.

Comando JOIN

Permite combinar filas de dos o más tablas basándose en una relación entre ellas.

Ejemplo:

SELECT a.term,
       a.search_interest AS interest_US,
       b.search_interest AS interest_ES
FROM `bigquery-public-data.google_trends.top_terms` AS a
JOIN `bigquery-public-data.google_trends.top_terms` AS b
  ON a.term = b.term
WHERE a.region = 'US'
  AND b.region = 'ES'
LIMIT 10;

Explicación: Se unen dos instancias de la misma tabla para comparar el interés de búsqueda de cada término en dos regiones diferentes.

Ejercicios Prácticos

Ejercicio 1: Consulta básica

Objetivo: Mostrar los 15 términos más consultados (suponiendo que search_interest indica popularidad).

Instrucciones: Escribe una consulta que seleccione term y search_interest, filtre aquellos con search_interest mayor a 50, ordene los resultados de forma descendente y muestre solo 15 registros.

Pista de solución:

SELECT term, search_interest
FROM `bigquery-public-data.google_trends.top_terms`
WHERE search_interest > 50
ORDER BY search_interest DESC
LIMIT 15;

Ejercicio 2: Agregación y filtrado

Objetivo: Contar cuántas veces aparece cada término y mostrar solo aquellos con más de 5 apariciones.

Instrucciones: Utiliza GROUP BY y HAVING para agrupar y filtrar los resultados.

Pista de solución:

SELECT term, COUNT(*) AS ocurrencias
FROM `bigquery-public-data.google_trends.top_terms`
GROUP BY term
HAVING COUNT(*) > 5
ORDER BY ocurrencias DESC;

Ejercicio 3: Comparación entre regiones (JOIN)

Objetivo: Comparar el interés de búsqueda de términos en dos regiones (por ejemplo, 'US' y 'ES').

Instrucciones: Realiza un self join de la tabla utilizando alias para diferenciar las regiones y filtra por las condiciones de interés.

Pista de solución:

SELECT a.term,
       a.search_interest AS interest_US,
       b.search_interest AS interest_ES
FROM `bigquery-public-data.google_trends.top_terms` AS a
JOIN `bigquery-public-data.google_trends.top_terms` AS b
  ON a.term = b.term
WHERE a.region = 'US'
  AND b.region = 'ES'
LIMIT 10;