Comandos Esenciales, Operadores y Ejemplos para Principiantes

SQL (Structured Query Language) es un lenguaje de consulta que se utiliza para administrar datos en bases de datos relacionales (BDR). Las consultas SQL se componen de operadores, que son símbolos especiales o palabras clave que forman comandos. Vamos a desglosar en qué consisten las consultas SQL y cómo escribirlas.

Curso Experto en SQL

Operadores Básicos

Antes de sumergirnos en la estructura de las consultas SQL y sus comandos, vamos a familiarizarnos con los operadores de comparación, aritméticos y lógicos que necesitarás para trabajar con consultas.

Operadores de Comparación

OperadorDescripción
=Comprueba la igualdad entre dos valores.
<, >Comprueban si un valor es menor o mayor que otro.
<=, >=Comprueban si un valor es menor o igual, o mayor o igual que otro.
!= o <>Comprueban si dos valores son diferentes.

Operadores Aritméticos

OperadorDescripción
+Suma dos valores.
Resta un valor de otro.
*Multiplica dos valores.
/Divide un valor entre otro.
%Módulo. Devuelve el resto de la división de un valor entre otro.

Operadores Lógicos AND, OR y NOT

  • AND devuelve TRUE si ambas condiciones son verdaderas, de lo contrario devuelve FALSE. En algunas implementaciones de SQL (como PostgreSQL) se puede utilizar ||.
  • OR devuelve TRUE si al menos una de las condiciones es verdadera, de lo contrario devuelve FALSE. En PostgreSQL se permite la notación ~.
  • NOT invierte el valor de una condición (convierte una condición verdadera en falsa y viceversa).

Estructura de una Consulta SQL

Una consulta debe estar correctamente formulada para que el sistema de gestión de bases de datos (SGBD) pueda procesarla.

Para ello, se utiliza una estructura de consulta SQL que consta de operadores obligatorios: SELECT y FROM, así como de operadores opcionales: WHERE, GROUP BY, HAVING y ORDER BY. Estos operadores pertenecen a la categoría de comandos DQL (Data Query Language).

Estructura de una consulta SQL:

SELECT columna1, columna2, ...
FROM tabla
WHERE condición
GROUP BY columna
HAVING condición_grupo
ORDER BY columna [ASC|DESC]
LIMIT número_de_filas;

En las consultas SQL no importa si se escriben en una sola línea o en varias. Lo importante es que la consulta sea correcta. Sin embargo, para mejorar la legibilidad, es aconsejable formatear las consultas largas en varias líneas.

Categorías de Comandos en SQL

Categorías de comandos SQL
Categorías de comandos SQL

Data Query Language (DQL) – Lenguaje de consulta de datos

Los operadores de esta categoría se utilizan para extraer datos de la base de datos, ordenarlos y agruparlos.

Si hay varias bases de datos y se necesita una en concreto para trabajar, se utiliza el operador USE:

USE nombre_de_la_base_de_datos;

Esta consulta establecerá la base de datos nombre_de_la_base_de_datos como activa. Todas las consultas SQL posteriores se ejecutarán en ella.

SELECT y FROM

Son los componentes principales y obligatorios de una consulta SQL para extraer datos. Funcionan en pareja, donde SELECT define qué columnas de datos se deben extraer y FROM indica de qué tabla se deben obtener esos datos.

SELECT columna1, columna2, ...
FROM nombre_de_la_tabla;

donde:

  • columna1, columna2, ... son los nombres de las columnas que se quieren extraer (se puede utilizar * para seleccionar todas las columnas).
  • nombre_de_la_tabla es el nombre de la tabla de la que se quieren extraer los datos.

Consulta para extraer todos los datos de la tabla:

SELECT * 
FROM empleados;

Consulta para extraer columnas específicas de la tabla:

SELECT nombre, apellido, correo_electronico 
FROM empleados;

Funciones de Agregación SQL (COUNT, SUM, AVG, MAX, MIN)

Se utilizan para realizar cálculos sobre conjuntos de valores y devolver un único valor resultante.

  • COUNT calcula el número de filas del conjunto de resultados. Devolver el número de filas de la tabla:
SELECT COUNT(*) 
FROM nombre_de_la_tabla;
  • SUM calcula la suma de los valores de la columna especificada. Devolver la suma total de los salarios de todos los empleados:
SELECT SUM(salario)
FROM empleados;
  • AVG calcula la media de los valores de la columna especificada. Devolver la edad media de los empleados:
SELECT AVG(edad)
FROM empleados;
  • MAX devuelve el valor máximo de la columna especificada. Devolver el precio máximo de todos los productos:
SELECT MAX(precio) FROM productos;
  • MIN devuelve el valor mínimo de la columna especificada. Devolver la cantidad mínima de productos en stock:
SELECT MIN(stock) FROM inventario;

Operador AS

Asigna un alias más legible a una columna o tabla.

Asignar un alias al resultado de una función:

SELECT SUM(salario) AS salario_total 
FROM empleados;

donde:

  • SUM(salario) es la función de agregación que calcula la suma total de los valores de la columna salario.
  • AS salario_total asigna el alias salario_total al resultado de la función SUM.

WHERE

Este operador define sobre qué datos se realizarán las operaciones. Las condiciones de selección de los datos objetivo deben escribirse en predicados, que son expresiones que evalúan los valores como TRUE, FALSE o UNKNOWN.

SELECT columna1, columna2, ...
FROM nombre_de_la_tabla
WHERE condicion;

donde:

  • condicion es la condición/predicado que deben cumplir los datos.

Por ejemplo, así es como se puede implementar una consulta para seleccionar empleados con un salario superior a 50.000:

SELECT nombre, apellido, salario
FROM empleados
WHERE salario > 50000;

Operadores Lógicos BETWEEN, LIKE, IN, IS NULL

  • BETWEEN Se utiliza para seleccionar valores dentro de un rango específico. Seleccionar todos los empleados con salarios entre 50.000 y 80.000:
SELECT nombre, apellido, salario
FROM empleados 
WHERE salario 
BETWEEN 50000 AND 80000;
  • LIKE Se utiliza para hacer coincidir cadenas con un patrón utilizando caracteres especiales (por ejemplo, % para cualquier número de caracteres y _ para un solo carácter). Seleccionar todos los clientes cuyo nombre empiece por la letra «A»:
SELECT nombre, apellido 
FROM clientes 
WHERE nombre LIKE 'A%';
  • IN Se utiliza para comparar un valor con un conjunto de valores enumerados en una lista. Seleccionar todos los productos de las categorías «Electrónica» y «Ropa»:
SELECT nombre_del_producto, categoria
FROM productos
WHERE categoria IN ('Electronica', 'Ropa');
  • IS NULL Se utiliza para seleccionar filas en las que falta un valor de columna (es NULL). Seleccionar todos los clientes que no tienen un número de teléfono:
SELECT nombre, apellido 
FROM clientes
WHERE numero_de_telefono IS NULL;

GROUP BY

Operador para agrupar filas por los valores de columnas específicas. Esto permite aplicar funciones de agregación a cada grupo por separado.

SELECT columna1, columna2, ..., funcion_de_agregacion(columna)
FROM nombre_de_la_tabla
GROUP BY columna1, columna2, ...;

donde:

  • columna1, columna2, ... son las columnas por las que se quieren agrupar los datos.
  • funcion_de_agregacion(columna) es la función de agregación que se aplica a las columnas para cada grupo.

Encontrar el número total de productos en cada categoría:

SELECT categoria, COUNT(*) AS numero_de_productos
FROM productos
GROUP BY categoria;

Calcular la suma total de ventas para cada mes:

SELECT MONTH(fecha_de_venta) AS mes, SUM(importe_de_venta) AS ventas_totales
FROM ventas
GROUP BY MONTH(fecha_de_venta);

HAVING

Se utiliza para filtrar los resultados de una consulta que se han agrupado utilizando la cláusula GROUP BY.

SELECT columna1, columna2, ..., funcion_de_agregacion(columna)
FROM nombre_de_la_tabla
GROUP BY columna1, columna2, ...
HAVING condicion;

donde:

condicion es la condición que deben cumplir los resultados después de aplicar las funciones de agregación.

Seleccionar las categorías de productos cuya cantidad media sea superior a 50:

SELECT categoria, AVG(cantidad) AS cantidad_media
FROM productos
GROUP BY categoria
HAVING AVG(cantidad) > 50;

Seleccionar los clientes cuyo importe medio de pedido sea superior a 1000:

SELECT id_cliente, AVG(importe_pedido) AS importe_medio_pedido
FROM pedidos
GROUP BY id_cliente
HAVING AVG(importe_pedido) > 1000;

ORDER BY

Permite ordenar los datos de salida en un orden específico, es decir, ordenarlos por una o varias columnas.

SELECT columna1, columna2, ...
FROM nombre_de_la_tabla
ORDER BY columna1 [ASC], columna2 [ASC], ...;

donde:

ASC (o DESC) es una palabra clave opcional que define el orden de clasificación. Por defecto, se utiliza ASC (orden ascendente), pero se puede especificar DESC (orden descendente).

Ordenar los pedidos por fecha en orden descendente:

SELECT id_pedido, fecha_pedido, id_cliente
FROM pedidos
ORDER BY fecha_pedido DESC;

Cláusulas Limitantes LIMIT y OFFSET

Estas cláusulas se utilizan para limitar el número de filas devueltas por una consulta.

LIMIT

Define el número de filas que se devolverán. Si es cero, la consulta devuelve un conjunto de resultados vacío.

SELECT columna1, columna2, ...
FROM nombre_de_la_tabla
LIMIT numero_de_filas;

donde:

numero_de_filas es el número de filas que se devolverán. Si el valor es cero, la consulta devolverá un conjunto de resultados vacío.

OFFSET

Especifica cuántas filas se deben omitir antes de devolver el resultado. Si no se define OFFSET, la consulta devuelve los datos a partir de la primera fila especificada en SELECT.

SELECT columna1, columna2, ...
FROM nombre_de_la_tabla
OFFSET numero_de_filas_a_omitir;

donde:

numero_de_filas_a_omitir es el número de filas que se deben omitir antes de devolver el resultado.

Es mejor utilizar las cláusulas LIMIT y OFFSET junto con ORDER BY. Esto ordenará el resultado devuelto.

Data Definition Language (DDL) – Lenguaje de definición de datos

Estos comandos se utilizan para definir y gestionar la estructura de la base de datos y sus objetos, como tablas, índices, etc.

CREATE

Se utiliza para crear bases de datos y sus objetos.

CREATE DATABASE – crea una base de datos.

CREATE DATABASE mi_base_de_datos;

CREATE TABLE – crea una tabla.

CREATE TABLE empleados (
    id_empleado INT PRIMARY KEY,
    nombre VARCHAR(50),
    apellido VARCHAR(50),
    fecha_contratacion DATE
);

donde:

nombre VARCHAR(50) crea una columna llamada nombre que contendrá valores de cadena (VARCHAR) de hasta 50 caracteres de longitud.
fecha_contratacion DATE crea una columna llamada fecha_contratacion que contendrá fechas.

CREATE INDEX – crea un índice.

Asignar un índice a una o varias columnas acelera la búsqueda de datos.

CREATE INDEX idx_apellido ON empleados(apellido);

La cláusula ON indica que el índice se creará en la columna apellido de la tabla empleados.

CREATE VIEW – crea una vista.

Una vista es una tabla virtual basada en el resultado de una consulta. Las vistas no almacenan datos por sí mismas, se definen mediante consultas SQL que extraen datos de una o varias tablas.

CREATE VIEW vista_empleados AS
SELECT nombre, apellido 
FROM empleados;

CREATE SCHEMA – crea un esquema.

Un esquema es un contenedor para almacenar objetos de base de datos, como tablas, vistas e índices, que pueden organizarse y gestionarse conjuntamente.

CREATE SCHEMA mi_esquema;

Después de crear un esquema, se pueden añadir objetos a él, por ejemplo, una tabla:

CREATE TABLE mi_esquema.mi_tabla 

CREATE TRIGGER – crea un disparador.

Un disparador es un conjunto de instrucciones SQL que se ejecutan automáticamente cuando se produce un evento específico en la base de datos, como la inserción, actualización o eliminación de un registro de una tabla SQL.

CREATE TRIGGER nombre_disparador
BEFORE INSERT
ON nombre_de_la_tabla
FOR EACH ROW
--cuerpo del disparador (código que se ejecutará cuando se dispare el disparador)

donde:

BEFORE (o AFTER) – especifica cuándo se disparará el disparador (antes o después de ejecutar la operación).
INSERT (o UPDATE, DELETE) – define la operación antes o después de la cual se disparará el disparador.
ON nombre_de_la_tabla – especifica la tabla a la que está vinculado el disparador.
FOR EACH ROW (o STATEMENT) – condición que determina si el disparador se ejecutará para cada fila (FOR EACH ROW) o para cada sentencia (FOR EACH STATEMENT). Esta parte de la sintaxis puede no estar presente en algunos sistemas de gestión de bases de datos.

CREATE PROCEDURE

Una procedimiento es un conjunto de instrucciones SQL que realizan una tarea o un conjunto de tareas específicas en la base de datos. Puede aceptar parámetros, procesar datos y devolver resultados.

Creación de un procedimiento:

CREATE PROCEDURE obtener_numero_empleados()
BEGIN
  SELECT COUNT(*) 
  FROM empleados;
END;

El operador BEGIN marca el inicio de una transacción (un conjunto de operaciones) y END marca su finalización.

Llamada a un procedimiento:

CALL obtener_numero_empleados();

CALL invoca un conjunto de instrucciones de un procedimiento o función.

DROP

Se utiliza para eliminar objetos.

DROP TABLE mi_tabla;

De forma similar, DROP se puede utilizar con otros objetos, incluidas las bases de datos.

ALTER

Se utiliza para modificar la estructura de los objetos de base de datos existentes.

ALTER TABLE mi_tabla
ADD COLUMN edad INT;

Añade una columna (COLUMN) llamada edad con el formato de datos INT.

TRUNCATE

Se utiliza para eliminar todos los registros de una tabla, conservando la estructura de la tabla.

TRUNCATE TABLE mi_tabla;

RENAME

Operador para renombrar objetos de base de datos.

RENAME TABLE tabla_antigua TO tabla_nueva;

El operador TO indica el nuevo valor (nuevo nombre o ubicación).

COMMENT

Se utiliza para añadir comentarios a los objetos de la base de datos.

COMMENT ON TABLE empleados IS 'Tabla para almacenar información sobre los empleados';

El operador IS indica el objeto del comando. En este caso, el texto que será el comentario de la tabla.

Data Manipulation Language (DML) – Lenguaje de manipulación de datos

Se utiliza para trabajar con los datos dentro de las tablas. Los operadores INSERT, UPDATE y DELETE pertenecen a DML. SELECT y FROM también se pueden incluir aquí, pero forman parte de DQL.

INSERT

Añade nuevas filas de datos a una tabla.

INSERT INTO nombre_de_la_tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);

donde:

  • INTO especifica dónde se deben colocar los datos.
  • VALUES especifica los valores que se insertarán en las columnas correspondientes de la tabla.

UPDATE

Actualiza las filas de datos existentes en una tabla.

UPDATE nombre_de_la_tabla
SET columna1 = valor1, columna2 = valor2, ...
WHERE condicion;

donde:

  • SET – operador para asignar un valor a una variable (en este caso, columnas).

DELETE

Elimina filas de datos de una tabla.

DELETE FROM nombre_de_la_tabla
WHERE condicion;

Data Control Language (DCL) – Lenguaje de control de datos

Se utiliza para gestionar los derechos de acceso a los datos y el control de la base de datos.

GRANT

Otorga a un usuario o rol privilegios específicos sobre un objeto de base de datos.

Un rol puede crearse utilizando el comando CREATE ROLE nombre_del_rol. En lugar de asignar privilegios a usuarios individuales, se pueden asignar a roles.

GRANT SELECT, INSERT
ON empleados
TO usuario1;

El usuario usuario1 obtiene privilegios SELECT e INSERT en la tabla empleados.

REVOKE

Revoca privilegios específicos de un usuario o rol sobre un objeto de base de datos.

REVOKE SELECT, INSERT
ON empleados
FROM usuario1;

Se revocan los privilegios SELECT e INSERT del usuario usuario1 en la tabla empleados.

Transaction Control Language (TCL) – Lenguaje de control de transacciones

Permite controlar, guardar o deshacer los cambios realizados dentro de una transacción, que es un conjunto de operaciones.

COMMIT

Confirma todos los cambios realizados dentro de la transacción actual. Una vez ejecutado el comando COMMIT, todos los cambios serán visibles para otros usuarios.

ROLLBACK

Deshace todos los cambios realizados dentro de la transacción actual y devuelve la base de datos al estado en el que se encontraba antes de que comenzara la transacción.

SAVEPOINT

Crea un punto de guardado dentro de una transacción al que se puede retroceder sin tener que deshacer toda la transacción.

RELEASE SAVEPOINT

Elimina un punto de guardado creado previamente. Una vez eliminado un punto de guardado, ya no se puede retroceder a él.

SET TRANSACTION

Establece las características de la transacción.

Aquí se establece el nivel de aislamiento (ISOLATION LEVEL) al nivel más alto – SERIALIZABLE. Los niveles de aislamiento afectan a la capacidad de otras transacciones para realizar cambios en los mismos datos.

Consultas Externas e Internas

Las consultas externas (principales) e internas (subconsultas) permiten ejecutar una consulta dentro de otra. La subconsulta se ejecuta primero y su resultado es utilizado por la consulta principal.

SELECT nombre
FROM empleados
WHERE id_departamento = (
    SELECT id
    FROM departamentos
    WHERE nombre = 'Ventas'
);

Subconsulta (consulta interna)

SELECT id
FROM departamentos
WHERE nombre = 'Ventas';

Esta consulta se ejecuta primero. Encuentra el id del departamento donde nombre es igual a Ventas. Supongamos que el resultado es id = 3.

Consulta externa

SELECT nombre
FROM empleados
WHERE id_departamento = 3;

La consulta externa utiliza el resultado de la subconsulta (id = 3) para filtrar los datos de la tabla empleados.

Selecciona los nombres de los empleados cuyo id_departamento es 3.

Trabajar con Consultas Externas e Internas Utilizando el Operador EXISTS

El operador EXISTS se utiliza para filtrar las filas de la consulta principal en función de los resultados de la subconsulta. Se utiliza para comprobar si existe al menos una fila en el resultado de la subconsulta.

SELECT nombre
FROM clientes
WHERE EXISTS (
    SELECT * 
    FROM pedidos 
    WHERE pedidos.id_cliente = clientes.id
);

La consulta externa selecciona los nombres de los clientes de la tabla clientes.

La subconsulta comprueba si existe al menos un pedido para cada cliente en la tabla pedidos utilizando la condición pedidos.id_cliente = clientes.id.

Si se encuentra al menos un pedido para el cliente actual, la subconsulta devuelve una fila, el operador EXISTS devuelve TRUE e incluye el nombre del cliente en el resultado final.

Ejemplos de Uso de Comandos SQL

Crear y eliminar una base de datos

CREATE DATABASE mi_base_de_datos;
SHOW DATABASES;
USE mi_base_de_datos;
DROP DATABASE mi_base_de_datos;

Crear y gestionar tablas

Crear la tabla empleados:

CREATE TABLE empleados (
    id INT AUTO_INCREMENT PRIMARY KEY,
    nombre VARCHAR(50),
    edad INT,
    departamento VARCHAR(50)
);

Añadir la columna email:

ALTER TABLE empleados ADD COLUMN email VARCHAR(100);

Cambiar el tipo de datos de una columna (MODIFY COLUMN) a INT:

ALTER TABLE empleados MODIFY COLUMN edad INT UNSIGNED;

UNSIGNED – operador para especificar que un tipo de datos numérico no puede contener valores negativos.

Restricción de integridad

Las operaciones de restricción de integridad se utilizan para garantizar la precisión y fiabilidad de los datos de una tabla.

Crear una estructura de tabla para almacenar información sobre pedidos en la base de datos.

CREATE TABLE pedidos (
    id INT AUTO_INCREMENT PRIMARY KEY,
    id_producto INT,
    cantidad INT,
    FOREIGN KEY (id_producto) REFERENCES productos(id),
    CHECK (cantidad > 0)
);

id INT AUTO_INCREMENT PRIMARY KEY: crea una columna id de tipo INT que se incrementará automáticamente para cada nuevo registro. También se define como clave principal (PRIMARY KEY), lo que garantiza que cada registro de la tabla sea único.

id_producto INT: crea una columna id_producto de tipo INT que contendrá el identificador del producto asociado a ese pedido.

cantidad INT: crea una columna cantidad de tipo INT que contendrá el número de productos del pedido.

FOREIGN KEY (id_producto) REFERENCES productos(id): establece una restricción de clave externa (FOREIGN KEY) en la columna id_producto que hace referencia a la columna id de la tabla productos. Esto garantiza la integridad de los datos: el valor de id_producto en la tabla pedidos corresponderá a un id existente en la tabla productos.

CHECK (cantidad > 0): establece una condición de verificación (CHECK) que garantiza que el valor de la columna cantidad sea siempre mayor que cero. Esto evitará que se añadan registros con valores de cantidad de producto incorrectos.

¿Te ha gustado este resumen? Por favor compártelo y déjanos tu comentario.

Curso online de SQL Server

Categorizado en:

SQL,