Un repaso a los comandos más comunes en bases de datos relacionales con SQL

dic. 1, 2024

Este artículo forma parte de una serie:

En el capítulo anterior, repasamos los orígenes y fundamentos de las bases de datos. Hicimos un pequeñó viaje por los tipos de bases de datos que existen, entre ellas las relacionales, ahora avanzaremos al corazón del trabajo con bases de datos relacionales: SQL (Structured Query Language), el lenguaje universalmente aceptado para interactuar con estos motores.

SQL nos permite definir, manipular y consultar datos en bases de datos relacionales. En este capítulo, desglosaremos los términos más comunes en SQL y su funcionamiento básico, acompañados de ejemplos progresivos que facilitarán su comprensión.

SQL es el estándar de facto para trabajar con bases de datos relacionales. Ya sea que estés trabajando con MySQL, PostgreSQL, Microsft SQL ( MSSQL) u Oracle, los conceptos y comandos básicos que veremos son universales. Entender cómo funciona te permitirá extraer, analizar y manipular datos con facilidad. Empecemos con un listado con los términos más importantes que conocerás en este capítulo.

Tipos de variables y datos en SQL

Antes de proceder con los comandos, es esencial entender los tipos de datos más comunes disponibles en este tipo de bases de datos. Estos tipos definen la naturaleza y las restricciones de los datos que puedes almacenar en las columnas de tus tablas.

Numéricos

  • INT / INTEGER: Números enteros (positivos o negativos).
  • SMALLINT: Enteros más pequeños, consume menos memoria.
  • BIGINT: Enteros de gran tamaño. Útiles para valores muy grandes.
  • DECIMAL(p, s) / NUMERIC(p, s): Números decimales con precisión y escala definidas.
  • FLOAT / REAL: Números en punto flotante.

Texto

  • CHAR(n): Cadena de texto de longitud fija.
  • VARCHAR(n): Cadena de texto de longitud variable.
  • TEXT: Cadena de texto de longitud indefinida (limitada por el sistema).

Fecha y hora

  • DATE: Fecha (año, mes, día).
  • TIME: Hora (horas, minutos, segundos).
  • DATETIME: Fecha y hora combinadas.
  • TIMESTAMP: Marca de tiempo (incluye información de zona horaria en algunas implementaciones).

Booleanos

  • BOOLEAN: Valores TRUE o FALSE (puede variar según el motor de base de datos).

Otros tipos de datos

  • BLOB: Datos binarios (usados para imágenes, videos, etc.).
  • JSON: Datos en formato JSON (cada vez más soportado en motores modernos como PostgreSQL y MySQL).
  • UUID: Identificadores únicos universales.

Estos tipos de datos forman la base para diseñar esquemas eficientes y estructurar los datos de manera óptima en una base de datos relacional. Ahora que conocemos los tipos de datos disponibles, avancemos hacia los términos y comandos fundamentales en SQL.

Términos esenciales en SQL

A continuación, agrupamos los términos más importantes en SQL según su propósito principal, son comunes a todos los motores de bases de datos relacionales aunque pueden variar ligeramente en su sintaxis. Son los siguientes:

Comandos de Consulta de Datos (DQL - Data Query Language)

  • SELECT: Extrae datos de una o más tablas en la base de datos.
  • FROM: Indica la fuente de datos (tabla o vistas) para la consulta.
  • WHERE: Filtra las filas basándose en una condición específica.
  • ORDER BY: Ordena los resultados de la consulta en orden ascendente o descendente.
  • LIMIT: Restringe el número de filas devueltas por la consulta.
  • GROUP BY: Agrupa las filas que tienen valores comunes en columnas específicas.
  • HAVING: Filtra los grupos de datos después de haber aplicado GROUP BY.
  • JOIN: Combina filas de dos o más tablas basándose en una condición común.
    • INNER JOIN: Devuelve filas cuando hay coincidencia en ambas tablas.
    • LEFT JOIN: Devuelve todas las filas de la tabla izquierda y las coincidencias de la derecha.
    • RIGHT JOIN: Devuelve todas las filas de la tabla derecha y las coincidencias de la izquierda.
    • FULL JOIN: Devuelve todas las filas cuando hay coincidencia en cualquiera de las tablas.
  • UNION: Combina los resultados de dos consultas en un único conjunto de resultados, eliminando duplicados.
  • DISTINCT: Elimina duplicados en los resultados devueltos por una consulta.

Comandos de Manipulación de Datos (DML - Data Manipulation Language)

  • INSERT: Inserta nuevas filas en una tabla.
  • UPDATE: Modifica filas existentes en una tabla.
  • DELETE: Elimina filas de una tabla.

Comandos de Definición de Datos (DDL - Data Definition Language)

  • CREATE: Crea nuevas tablas, bases de datos, vistas, índices, etc.
  • ALTER: Modifica la estructura de una tabla, como añadir, modificar o eliminar columnas.
  • DROP: Elimina tablas, bases de datos o vistas.

Restricciones y Claves

  • PRIMARY KEY: Identifica de manera única cada fila en una tabla.
  • FOREIGN KEY: Define una relación entre dos tablas.

En las siguientes secciones, veremos algunos ejemplos de los términos más fundamentales (SELECT, FROM, WHERE, etc.) en detalle, junto con ejemplos prácticos. Utilizaremos una base de datos en local, con SQLite para ilustrar los conceptos de manera clara y concisa.

Los comandos SQL en profundidad, ejemplo práctico

Para empezar, necesitamos una base de datos de ejemplo. Puedes descargar la herramienta SQLiteBrowser desde su sitio web, o instalarla a través de tu gestor de paquetes favorito. Una vez instalada, crea una base de datos llamada tienda.db y ejecuta el siguiente script SQL para crear una tabla de ejemplo:

Crear una tabla

Con este comando creamos una tabla llamada Productos con cuatro columnas: id, nombre, precio y categoria. La columna id es la clave primaria de la tabla, y se autoincrementa automáticamente con cada nueva fila insertada. Las columnas nombre, precio y categoria son de tipo TEXT, REAL y TEXT respectivamente, y no pueden ser nulas ( NOT NULL). También creamos una tabla adicional llamada Categorias para almacenar las categorías de los productos:


  CREATE TABLE Categorias (
     id INTEGER PRIMARY KEY AUTOINCREMENT,
     nombre TEXT NOT NULL
  );
  
  CREATE TABLE Productos (
     id INTEGER PRIMARY KEY AUTOINCREMENT,
     nombre TEXT NOT NULL,
     precio REAL NOT NULL,
     categoria_id INTEGER,
     FOREIGN KEY (categoria_id) REFERENCES Categorias (id)
  );
   

Ahora que tenemos dos tablas de ejemplo, veamos cómo interactuar con ella utilizando los comandos de inserción y consulta de datos.

Insertar datos en la tabla

Para insertar datos en la tabla Productos, utilizamos el comando INSERT INTO. A continuación, insertamos tres filas de datos en la tabla:


  INSERT INTO Categorias (nombre) VALUES 
  ('Electrónica'), 
  ('Muebles'), 
  ('Accesorios');
  
  INSERT INTO Productos (nombre, precio, categoria_id) VALUES
  ('Laptop', 1200, 1),
  ('Smartphone', 800, 1),
  ('Auriculares', 50, 3),
  ('Mesa', 150, 2),
  ('Silla', 85, 2),
  ('Cargador', 20, 3),
  ('Monitor', 250, 1);
   

Esto añade cinco productos a la tabla. Para verlos, ejecuta una consulta SELECT para extraer todos los datos de la tabla.

Consultar datos de la tabla

La consulta SELECT es el comando más utilizado en SQL nos permite extraer datos de una o más tablas basándonos en una condición específica. En este caso, extraemos todos los datos de la tabla Productos:


  SELECT * FROM Productos;
   

Podemos escoger sólo algunas columnas específicas para mostrar en la consulta. Por ejemplo, si solo queremos ver el nombre y el precio de los productos, podemos hacerlo de la siguiente manera:


  SELECT nombre, precio FROM Productos;
   

También podríamos filtrar los resultados basándonos en una condición específica. Por ejemplo, si queremos ver solo los productos de la categoría Electrónica, podemos añadir una cláusula WHERE a nuestra consulta, al tener sólo la ID de la categoría tenemos que obtenerlo utilizando el número de la categoría al que corresponde, el 1 en este caso:


  SELECT * FROM Productos WHERE categoria_id = 1;
   

Para poder ver el nombre de la categoría en lugar de la ID, podemos unir las dos tablas utilizando la cláusula JOIN. En este caso, utilizamos un INNER JOIN para combinar las filas de ambas tablas basándonos en la columna categoria_id:


  SELECT p.nombre, p.precio, c.nombre AS categoria
  FROM Productos p
  INNER JOIN Categorias c ON p.categoria_id = c.id;
   

Ahora podemos filtrar por su nombre en vez del ID de la categoría:


  SELECT p.nombre, p.precio, c.nombre AS categoria
  FROM Productos p
  INNER JOIN Categorias c ON p.categoria_id = c.id
  WHERE c.nombre = 'Electrónica';
   

Como vemos, combinando diferentes comandos y cláusulas SQL, podemos extraer, filtrar y manipular datos de manera eficiente cuándo utilizamos o accedemos a una base de datos relacional.

Ordenar y limitar los resultados

Además de filtrar los resultados, también podemos ordenarlos y limitarlos utilizando las cláusulas ORDER BY y LIMIT. Por ejemplo, si queremos ver los productos ordenados por precio de mayor a menor, podemos hacerlo de la siguiente manera:


  SELECT * FROM Productos ORDER BY precio DESC;
   

Si solo queremos ver los dos productos más caros, podemos añadir una cláusula LIMIT a nuestra consulta:


  SELECT * FROM Productos ORDER BY precio DESC LIMIT 2;
   

Agrupamiento y filtrado de datos

La cláusula GROUP BY nos permite agrupar filas que tienen valores comunes en una o más columnas. Por ejemplo, si quisiéramos agrupar los productos por categoría y contar cuántos productos hay en cada categoría, podríamos hacerlo de la siguiente manera:


  SELECT c.nombre AS categoria, COUNT(p.id) AS total_productos
  FROM Productos p
  INNER JOIN Categorias c ON p.categoria_id = c.id
  GROUP BY c.nombre;
   

También podemos filtrar los grupos de datos utilizando la cláusula HAVING. Por ejemplo, si solo queremos ver las categorías que tienen más de dos producto, podemos añadir una condición HAVING a nuestra consulta:


  SELECT c.nombre AS categoria, COUNT(p.id) AS total_productos
  FROM Productos p
  INNER JOIN Categorias c ON p.categoria_id = c.id
  GROUP BY c.nombre
  HAVING COUNT(p.id) > 2;
   

Ahora veamos como hacer para actualizar y eliminar datos de la tabla. Algo muy habitual en este tipo de operaciones y que es sumamente importante conocer tanto para mantener la integridad de los datos como para realizar operaciones de mantenimiento.

Actualizar y eliminar datos

Para actualizar datos en una tabla, utilizamos el comando UPDATE. Por ejemplo, si queremos cambiar el precio de un producto, podemos hacerlo de la siguiente manera:


  UPDATE Productos SET precio = 900 WHERE nombre = 'Laptop';
   

Para eliminar filas de una tabla, utilizamos el comando DELETE. Por ejemplo, si queremos eliminar un producto de la tabla, podemos hacerlo de la siguiente manera:


  DELETE FROM Productos WHERE nombre = 'Cargador';
   

Hemos visto de una manera práctica cómo utilizar los comandos más comunes en SQL para interactuar con una base de datos relacional. Estos comandos forman la base para diseñar consultas complejas, manipular datos y definir la estructura de una base de datos. A medida que te familiarices con estos comandos, podrás extraer, analizar y manipular datos de manera eficiente.

Conclusión

En este capítulo, hemos explorado los términos más comunes en SQL y su funcionamiento básico. Hemos cubierto los comandos de consulta de datos (SELECT, FROM, WHERE, etc.), los comandos de manipulación de datos (INSERT, UPDATE, DELETE, etc.) y los comandos de definición de datos (CREATE, ALTER, DROP, etc.). Además, hemos discutido las restricciones y claves (PRIMARY KEY, FOREIGN KEY) que se utilizan para garantizar la integridad de los datos en una base de datos relacional.

Artículos relacionados

Quizá te puedan interesar