SQL (Structured Query Language) es el lenguaje de programación estándar para gestionar y manipular bases de datos relacionales. Dominar los comandos SQL es crucial para cualquier profesional que trabaje con datos, incluyendo desarrolladores, analistas de datos y administradores de bases de datos. Con SQL, es posible realizar tareas como insertar, actualizar, eliminar y consultar datos de manera eficiente. Esta guía completa explora en detalle los comandos SQL básicos y avanzados, proporcionando ejemplos prácticos para que puedas aplicar estos conocimientos en tus proyectos y optimizar el rendimiento de tus consultas de bases de datos.
Índice
- ¿Qué es SQL?
- Comandos básicos de SQL
- Comandos avanzados de SQL
- Comandos de condición y lógica de SQL
- Claves y restricciones en SQL
- Funciones de orden y ventana en SQL
- Funciones de fecha y tiempo en SQL
- Funciones avanzadas de SQL
- Funciones de manipulación de datos en SQL
- Preguntas frecuentes
- Conclusión
¿Qué es SQL?
SQL (Structured Query Language) es un lenguaje de programación diseñado para interactuar con bases de datos relacionales, permitiendo gestionar y manipular datos de manera eficiente. Con SQL, es posible realizar operaciones como consultar, actualizar, insertar y eliminar datos, así como definir y modificar la estructura de las bases de datos. También permite crear relaciones entre tablas y establecer restricciones para garantizar la integridad de los datos. SQL es un estándar en la industria y es compatible con sistemas de gestión de bases de datos como MySQL, PostgreSQL, SQLite y Microsoft SQL Server. Su capacidad para trabajar con grandes volúmenes de datos y realizar análisis complejos lo convierte en una herramienta indispensable para desarrolladores, analistas de datos y administradores de bases de datos. Dominar SQL facilita la extracción de información valiosa de los datos, la automatización de procesos y la creación de informes detallados, mejorando así la toma de decisiones empresariales.
Comandos básicos de SQL
Los comandos básicos de SQL son la base para gestionar y manipular datos en una base de datos relacional. Estos comandos permiten realizar tareas fundamentales como seleccionar, insertar, actualizar y eliminar datos, así como crear y modificar la estructura de las bases de datos. Comprender y dominar estos comandos es esencial para cualquier trabajo con SQL. A continuación, se detallan los comandos básicos más importantes:
SELECT – Recuperar datos de una base de datos
El comando SELECT se utiliza para recuperar datos específicos de una o varias tablas en una base de datos. Permite filtrar y ordenar los resultados según condiciones definidas.
SELECT nombre, edad FROM usuarios WHERE edad > 18;
Este comando selecciona los valores de las columnas nombre y edad de la tabla usuarios donde la edad sea mayor de 18 años.
INSERT – Insertar nuevos datos en una base de datos
El comando INSERT permite añadir nuevos registros a una tabla específica.
INSERT INTO usuarios (nombre, edad) VALUES ('Carlos', 25);
Este comando inserta un nuevo registro en la tabla usuarios con el nombre “Carlos” y edad 25.
UPDATE – Actualizar datos existentes en una base de datos
El comando UPDATE se utiliza para modificar registros existentes en una tabla.
UPDATE usuarios SET edad = 30 WHERE nombre = 'Carlos';
Este comando actualiza la edad de “Carlos” a 30 en la tabla usuarios.
DELETE – Eliminar datos de una base de datos
El comando DELETE elimina registros de una tabla basándose en condiciones específicas.
DELETE FROM usuarios WHERE edad < 18;
Este comando elimina todos los registros de la tabla usuarios donde la edad sea menor a 18.
CREATE DATABASE – Crear una nueva base de datos
El comando CREATE DATABASE se utiliza para crear una nueva base de datos.
CREATE DATABASE tienda;
Este comando crea una base de datos llamada tienda.
CREATE TABLE – Crear una nueva tabla en una base de datos
El comando CREATE TABLE permite definir la estructura de una nueva tabla en una base de datos.
CREATE TABLE productos (
id INT PRIMARY KEY,
nombre VARCHAR(100),
precio DECIMAL(10,2)
);
Este comando crea una tabla llamada productos con tres columnas: id como clave primaria, nombre y precio.
ALTER TABLE – Modificar la estructura de una tabla existente
El comando ALTER TABLE permite añadir, eliminar o modificar columnas en una tabla existente.
ALTER TABLE productos ADD categoria VARCHAR(50);
Este comando añade una nueva columna categoria a la tabla productos.
DROP TABLE – Eliminar una tabla de una base de datos
El comando DROP TABLE elimina una tabla y todos sus datos de manera permanente.
DROP TABLE productos;
Este comando elimina la tabla productos de la base de datos.
TRUNCATE TABLE – Eliminar todos los registros de una tabla
El comando TRUNCATE TABLE elimina rápidamente todos los registros de una tabla sin eliminar su estructura.
TRUNCATE TABLE productos;
Este comando vacía la tabla productos, pero mantiene su estructura para futuras inserciones.
CREATE INDEX – Crear un índice en una tabla
El comando CREATE INDEX mejora la velocidad de las consultas creando un índice en una o más columnas de una tabla.
CREATE INDEX idx_nombre ON productos (nombre);
Este comando crea un índice en la columna nombre de la tabla productos para mejorar el rendimiento de las consultas.
DROP INDEX – Eliminar un índice de una tabla
El comando DROP INDEX elimina un índice existente en una tabla.
DROP INDEX idx_nombre;
Este comando elimina el índice idx_nombre de la tabla productos.
JOIN – Combinar filas de dos o más tablas
El comando JOIN permite combinar filas de dos o más tablas basándose en una columna relacionada.
SELECT usuarios.nombre, pedidos.total
FROM usuarios
JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Este comando combina las tablas usuarios y pedidos mediante la columna usuario_id.
INNER JOIN – Devolver filas coincidentes en ambas tablas
El comando INNER JOIN devuelve solo las filas donde hay coincidencias en ambas tablas.
SELECT usuarios.nombre, pedidos.total
FROM usuarios
INNER JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Este comando solo muestra los registros donde hay coincidencias en las dos tablas.
LEFT JOIN – Devolver todas las filas de la tabla izquierda y las coincidencias de la derecha
El comando LEFT JOIN devuelve todas las filas de la tabla izquierda y las coincidencias de la tabla derecha.
SELECT usuarios.nombre, pedidos.total
FROM usuarios
LEFT JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Este comando devuelve todos los registros de la tabla usuarios, incluso si no hay coincidencias en la tabla pedidos.
RIGHT JOIN – Devolver todas las filas de la tabla derecha y las coincidencias de la izquierda
El comando RIGHT JOIN devuelve todas las filas de la tabla derecha y las coincidencias de la tabla izquierda.
SELECT usuarios.nombre, pedidos.total
FROM usuarios
RIGHT JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Este comando devuelve todos los registros de la tabla pedidos, incluso si no hay coincidencias en la tabla usuarios.

Comandos avanzados de SQL
Una vez que domines los comandos básicos de SQL, es momento de explorar los comandos avanzados. Estos permiten realizar operaciones más complejas y detalladas sobre los datos, como combinar resultados, agrupar registros y realizar cálculos. A continuación, se explican los comandos avanzados más importantes y su función:
FULL JOIN – Combinar filas con coincidencias en cualquiera de las tablas
El comando FULL JOIN devuelve todas las filas de ambas tablas, incluso si no hay coincidencias. Las filas sin coincidencia mostrarán valores NULL.
SELECT usuarios.nombre, pedidos.total
FROM usuarios
FULL JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Este comando devuelve todos los registros de las tablas usuarios y pedidos, incluso si no hay coincidencias.
UNION – Combinar resultados de múltiples consultas SELECT
El comando UNION combina los resultados de dos o más consultas SELECT, eliminando valores duplicados automáticamente.
SELECT nombre FROM clientes
UNION
SELECT nombre FROM empleados;
Este comando combina los nombres de las tablas clientes y empleados, eliminando duplicados.
UNION ALL – Combinar resultados de múltiples consultas SELECT (incluyendo duplicados)
A diferencia de UNION, el comando UNION ALL incluye los registros duplicados.
SELECT nombre FROM clientes
UNION ALL
SELECT nombre FROM empleados;
Este comando devuelve todos los registros de las tablas clientes y empleados, incluyendo duplicados.
GROUP BY – Agrupar filas con los mismos valores
El comando GROUP BY agrupa los resultados que tienen los mismos valores en columnas específicas.
SELECT departamento, COUNT(*)
FROM empleados
GROUP BY departamento;
Este comando agrupa a los empleados por departamento y devuelve el número de empleados en cada uno.
HAVING – Filtrar registros después de agruparlos
El comando HAVING permite aplicar una condición sobre el resultado de una función de agrupación (como COUNT o SUM).
SELECT departamento, COUNT(*)
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 5;
Este comando muestra solo los departamentos con más de cinco empleados.
ORDER BY – Ordenar los resultados
El comando ORDER BY ordena los resultados de una consulta en orden ascendente o descendente.
SELECT nombre, salario
FROM empleados
ORDER BY salario DESC;
Este comando devuelve la lista de empleados ordenada por salario en orden descendente.
COUNT – Contar filas que cumplen una condición
El comando COUNT devuelve el número de filas que cumplen con una condición específica.
SELECT COUNT(*)
FROM empleados
WHERE departamento = 'Ventas';
Este comando cuenta el número de empleados que pertenecen al departamento de ventas.
SUM – Calcular la suma de un conjunto de valores
El comando SUM devuelve la suma total de una columna numérica.
SELECT SUM(salario)
FROM empleados
WHERE departamento = 'Marketing';
Este comando suma todos los salarios de los empleados en el departamento de marketing.
AVG – Calcular el valor promedio
El comando AVG calcula el valor medio de una columna numérica.
SELECT AVG(salario)
FROM empleados
WHERE departamento = 'Finanzas';
Este comando devuelve el salario promedio en el departamento de finanzas.
MIN – Devolver el valor mínimo
El comando MIN devuelve el valor mínimo de una columna.
SELECT MIN(salario)
FROM empleados;
Este comando devuelve el salario más bajo de la tabla empleados.
MAX – Devolver el valor máximo
El comando MAX devuelve el valor máximo de una columna.
SELECT MAX(salario)
FROM empleados;
Este comando devuelve el salario más alto de la tabla empleados.
DISTINCT – Seleccionar valores únicos
El comando DISTINCT devuelve solo valores únicos en una columna.
SELECT DISTINCT departamento
FROM empleados;
Este comando devuelve una lista de departamentos únicos en la tabla empleados.
WHERE – Filtrar resultados según una condición
El comando WHERE permite establecer una condición para filtrar registros.
SELECT nombre, salario
FROM empleados
WHERE salario > 3000;
Este comando devuelve los nombres y salarios de los empleados cuyo salario sea mayor de 3000.
Comandos de condición y lógica en SQL
Los comandos de condición y lógica en SQL permiten filtrar, buscar y establecer condiciones en los resultados de las consultas. Estos comandos son fundamentales para realizar consultas precisas y complejas, ya que permiten establecer múltiples condiciones y aplicar lógica condicional. A continuación, se explican los comandos de condición y lógica más importantes:
AND – Combinar múltiples condiciones
El operador AND permite combinar varias condiciones en una cláusula WHERE. Todas las condiciones deben cumplirse para que se devuelva un resultado.
SELECT nombre, salario
FROM empleados
WHERE salario > 3000 AND departamento = 'Ventas';
Este comando devuelve los nombres y salarios de los empleados que trabajan en ventas y tienen un salario superior a 3000.
OR – Especificar condiciones alternativas
El operador OR permite especificar múltiples condiciones alternativas. Si al menos una de las condiciones es verdadera, se devuelve el resultado.
SELECT nombre, salario
FROM empleados
WHERE departamento = 'Ventas' OR salario > 5000;
Este comando devuelve los empleados que trabajan en ventas o tienen un salario superior a 5000.
NOT – Negar una condición
El operador NOT niega una condición específica. Devuelve resultados que no cumplen con la condición especificada.
SELECT nombre
FROM empleados
WHERE NOT departamento = 'Marketing';
Este comando devuelve todos los empleados que no pertenecen al departamento de marketing.
BETWEEN – Seleccionar valores dentro de un rango
El operador BETWEEN permite seleccionar registros que están dentro de un rango de valores.
SELECT nombre, salario
FROM empleados
WHERE salario BETWEEN 3000 AND 6000;
Este comando devuelve los empleados con salarios entre 3000 y 6000.
IN – Seleccionar valores específicos
El operador IN permite seleccionar registros que coinciden con una lista específica de valores.
SELECT nombre, departamento
FROM empleados
WHERE departamento IN ('Ventas', 'Marketing', 'Finanzas');
Este comando devuelve los empleados que pertenecen a los departamentos de ventas, marketing o finanzas.
LIKE – Buscar valores que coincidan con un patrón
El operador LIKE permite buscar registros que coincidan con un patrón específico mediante el uso de caracteres comodín.
%– Representa cualquier número de caracteres._– Representa un solo carácter.
SELECT nombre
FROM empleados
WHERE nombre LIKE 'A%';
Este comando devuelve todos los empleados cuyo nombre comienza con la letra “A”.
IS NULL – Buscar valores nulos
El operador IS NULL permite seleccionar registros donde el valor de una columna es NULL.
SELECT nombre
FROM empleados
WHERE salario IS NULL;
Este comando devuelve los empleados que no tienen un salario registrado.
IS NOT NULL – Buscar valores no nulos
El operador IS NOT NULL permite seleccionar registros donde el valor de una columna no es NULL.
SELECT nombre
FROM empleados
WHERE salario IS NOT NULL;
Este comando devuelve los empleados que tienen un salario registrado.
EXISTS – Comprobar la existencia de un valor
El operador EXISTS devuelve verdadero si la subconsulta devuelve al menos un resultado.
SELECT nombre
FROM empleados e
WHERE EXISTS (
SELECT *
FROM pedidos p
WHERE e.id = p.usuario_id
);
Este comando devuelve los nombres de los empleados que tienen al menos un pedido registrado.
CASE – Lógica condicional en consultas
El operador CASE permite realizar evaluaciones condicionales en una consulta y devolver resultados según el valor de la condición.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
Este comando clasifica el salario de los empleados como “Alto”, “Medio” o “Bajo” dependiendo de su valor.
WHEN – Especificar condiciones dentro de una declaración CASE
El operador WHEN se utiliza dentro de una estructura CASE para definir una condición específica.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
El comando evalúa las condiciones definidas en cada bloque WHEN.
THEN – Especificar el resultado si se cumple una condición
El operador THEN se utiliza en una declaración CASE para devolver un valor si la condición especificada es verdadera.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
El valor especificado después de THEN es el resultado que se devuelve si la condición es verdadera.
ELSE – Definir un valor por defecto si no se cumple ninguna condición
El operador ELSE se utiliza para definir un valor de retorno cuando ninguna de las condiciones especificadas es verdadera.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
El valor especificado después de ELSE es el valor por defecto.
END – Finalizar una declaración CASE
El operador END finaliza una estructura CASE. Es obligatorio para completar la estructura correctamente.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
La palabra clave END cierra la declaración CASE y devuelve el valor final.
Claves y restricciones en SQL
Las claves y restricciones en SQL son fundamentales para garantizar la integridad y coherencia de los datos en una base de datos relacional. Estas reglas permiten definir relaciones entre tablas, asegurar la unicidad de los datos y evitar valores nulos no deseados. A continuación, se explican las claves y restricciones más importantes en SQL:
PRIMARY KEY – Identificar de manera única cada registro
El comando PRIMARY KEY define una clave primaria que identifica de manera única cada fila en una tabla. No puede contener valores nulos y debe ser única para cada registro.
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100),
salario DECIMAL(10,2)
);
Este comando crea una tabla llamada empleados donde la columna id es la clave primaria que identifica de manera única cada registro.
FOREIGN KEY – Establecer una relación entre tablas
El comando FOREIGN KEY establece una relación entre una tabla y otra mediante una clave externa.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
Este comando crea una relación entre las tablas pedidos y clientes, donde la columna cliente_id hace referencia a la clave primaria de la tabla clientes.
CONSTRAINT – Definir reglas para los datos
El comando CONSTRAINT permite definir restricciones para mantener la integridad de los datos.
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100) CONSTRAINT chk_nombre CHECK (nombre IS NOT NULL)
);
Este comando define una restricción que impide que la columna nombre contenga valores nulos.
DEFAULT – Establecer un valor por defecto
El comando DEFAULT define un valor por defecto para una columna si no se proporciona uno al insertar datos.
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100),
salario DECIMAL(10,2) DEFAULT 2000
);
Este comando establece que el valor por defecto de la columna salario será 2000 si no se proporciona otro valor.
NOT NULL – Evitar valores nulos en una columna
El comando NOT NULL impide que una columna acepte valores nulos.
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL
);
Este comando asegura que la columna nombre no podrá contener valores nulos.
UNIQUE – Garantizar valores únicos en una columna
El comando UNIQUE garantiza que los valores en una columna sean únicos.
CREATE TABLE empleados (
id INT PRIMARY KEY,
correo VARCHAR(100) UNIQUE
);
Este comando asegura que la columna correo solo acepte valores únicos.
CHECK – Aplicar una condición sobre los valores de una columna
El comando CHECK permite establecer una condición que los valores de una columna deben cumplir.
CREATE TABLE empleados (
id INT PRIMARY KEY,
edad INT CHECK (edad >= 18)
);
Este comando asegura que la edad de los empleados debe ser igual o mayor a 18 años.
CASCADE – Propagar automáticamente los cambios
El comando CASCADE permite que los cambios realizados en una tabla se propaguen automáticamente a las tablas relacionadas.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE CASCADE
);
Si se elimina un cliente de la tabla clientes, automáticamente se eliminarán los pedidos relacionados en la tabla pedidos.
SET NULL – Asignar valores NULL cuando se elimina un registro relacionado
El comando SET NULL permite que una clave externa se establezca en NULL si el registro relacionado es eliminado.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET NULL
);
Si un cliente es eliminado de la tabla clientes, el valor de cliente_id en la tabla pedidos se establecerá en NULL.
SET DEFAULT – Asignar un valor por defecto cuando se elimina un registro relacionado
El comando SET DEFAULT establece un valor por defecto si el registro relacionado es eliminado.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT DEFAULT 0,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE SET DEFAULT
);
Si un cliente es eliminado de la tabla clientes, el valor de cliente_id se establecerá en 0.
NO ACTION – Evitar cambios en registros relacionados
El comando NO ACTION impide que una operación (como eliminar o actualizar) afecte a las tablas relacionadas si hay una clave externa involucrada.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE NO ACTION
);
Si se intenta eliminar un cliente de la tabla clientes que tiene pedidos asociados, la operación será rechazada.
Funciones de orden y ventana en SQL
Las funciones de orden y ventana en SQL permiten realizar cálculos avanzados sobre un conjunto de filas relacionadas dentro de un resultado de consulta. Estas funciones son muy útiles para generar rankings, numerar filas y calcular valores agregados sin perder el contexto de cada fila individual. A continuación, se explican las funciones más importantes de orden y ventana:
RESTRICT – Restringir la eliminación de registros relacionados
El comando RESTRICT impide la eliminación de un registro si existen registros relacionados en otras tablas.
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
FOREIGN KEY (cliente_id) REFERENCES clientes(id) ON DELETE RESTRICT
);
Si intentas eliminar un cliente que tiene pedidos asociados, la operación será rechazada debido a la restricción.
CASE WHEN – Expresión condicional en SELECT
El comando CASE WHEN permite realizar evaluaciones condicionales en una consulta y devolver diferentes valores según el resultado.
SELECT nombre,
CASE
WHEN salario > 5000 THEN 'Alto'
WHEN salario BETWEEN 3000 AND 5000 THEN 'Medio'
ELSE 'Bajo'
END AS categoria_salario
FROM empleados;
Este comando clasifica el salario de los empleados como “Alto”, “Medio” o “Bajo” dependiendo de su valor.
WITH – Definir una expresión de tabla común (CTE)
El comando WITH define una expresión de tabla común (CTE) que puede reutilizarse en una consulta compleja.
WITH empleados_activos AS (
SELECT * FROM empleados WHERE estado = 'Activo'
)
SELECT * FROM empleados_activos;
Este comando crea una CTE llamada empleados_activos que contiene solo los empleados activos y luego la consulta selecciona todos esos registros.
INTO – Especificar una tabla de destino
El comando INTO permite copiar datos de una consulta en una nueva tabla.
SELECT * INTO empleados_backup
FROM empleados;
Este comando copia todos los datos de la tabla empleados a una nueva tabla llamada empleados_backup.
TOP – Limitar el número de filas devueltas
El comando TOP limita el número de filas devueltas en una consulta. Es específico de algunos sistemas de bases de datos como SQL Server.
SELECT TOP 5 *
FROM empleados
ORDER BY salario DESC;
Este comando devuelve los 5 empleados con los salarios más altos.
LIMIT – Limitar el número de filas devueltas (MySQL, PostgreSQL)
El comando LIMIT limita el número de filas devueltas en una consulta.
SELECT *
FROM empleados
ORDER BY salario DESC
LIMIT 5;
Este comando devuelve los 5 empleados con los salarios más altos.
OFFSET – Omitir un número de filas antes de devolver resultados
El comando OFFSET permite omitir un número específico de filas antes de empezar a devolver resultados.
SELECT *
FROM empleados
ORDER BY salario DESC
LIMIT 5 OFFSET 2;
Este comando devuelve 5 empleados comenzando desde la tercera fila (ya que OFFSET omite las dos primeras).
FETCH – Recuperar un conjunto de filas
El comando FETCH devuelve un conjunto de filas de un resultado de consulta.
SELECT *
FROM empleados
ORDER BY salario DESC
OFFSET 2 ROWS
FETCH NEXT 5 ROWS ONLY;
Este comando omite las dos primeras filas y luego devuelve las siguientes cinco filas.
ROW_NUMBER() – Asignar un número secuencial a cada fila
La función ROW_NUMBER() asigna un valor numérico secuencial único a cada fila dentro de una partición de un conjunto de resultados.
SELECT nombre, salario,
ROW_NUMBER() OVER (ORDER BY salario DESC) AS posicion
FROM empleados;
Este comando asigna un número secuencial a cada empleado ordenado por salario de mayor a menor.
RANK() – Asignar un rango con espacios en el orden
La función RANK() asigna un rango a cada fila dentro de una partición de un conjunto de resultados. Si hay valores duplicados, deja espacios en el ranking.
SELECT nombre, salario,
RANK() OVER (ORDER BY salario DESC) AS posicion
FROM empleados;
Si dos empleados tienen el mismo salario, recibirán el mismo rango, pero el siguiente rango se saltará un número.
DENSE_RANK() – Asignar un rango sin espacios
La función DENSE_RANK() asigna un rango a cada fila dentro de una partición de un conjunto de resultados. Si hay valores duplicados, no deja espacios en el ranking.
SELECT nombre, salario,
DENSE_RANK() OVER (ORDER BY salario DESC) AS posicion
FROM empleados;
Si dos empleados tienen el mismo salario, recibirán el mismo rango, pero el siguiente rango continuará de manera secuencial.
Funciones de fecha y tiempo en SQL
Las funciones de fecha y tiempo en SQL permiten manipular y calcular fechas y horas de manera eficiente. Estas funciones son esenciales para realizar cálculos basados en fechas, comparar intervalos de tiempo y organizar resultados cronológicamente. A continuación, se explican las funciones de fecha y tiempo más importantes en SQL:
NTILE() – Dividir los resultados en grupos de tamaño igual
La función NTILE() divide un conjunto de resultados en un número específico de grupos de tamaño igual y asigna un número de grupo a cada fila.
SELECT nombre, salario,
NTILE(4) OVER (ORDER BY salario DESC) AS grupo
FROM empleados;
Este comando divide los empleados en 4 grupos ordenados por salario de mayor a menor.
LEAD() – Recuperar el valor de la siguiente fila
La función LEAD() devuelve el valor de una columna en la fila siguiente dentro de un conjunto de resultados.
SELECT nombre, salario,
LEAD(salario) OVER (ORDER BY salario) AS salario_siguiente
FROM empleados;
Este comando devuelve el salario del siguiente empleado en la lista ordenada por salario.
LAG() – Recuperar el valor de la fila anterior
La función LAG() devuelve el valor de una columna en la fila anterior dentro de un conjunto de resultados.
SELECT nombre, salario,
LAG(salario) OVER (ORDER BY salario) AS salario_anterior
FROM empleados;
Este comando devuelve el salario del empleado anterior en la lista ordenada por salario.
PARTITION BY – Dividir el conjunto de resultados en particiones
La cláusula PARTITION BY divide el conjunto de resultados en particiones y aplica la función de ventana de manera separada a cada partición.
SELECT nombre, departamento, salario,
ROW_NUMBER() OVER (PARTITION BY departamento ORDER BY salario DESC) AS posicion
FROM empleados;
Este comando ordena los empleados por salario dentro de cada departamento y asigna un número de posición a cada uno.
ORDER BY – Especificar el orden de las filas
La cláusula ORDER BY especifica el orden de las filas dentro de una partición cuando se usan funciones de ventana.
SELECT nombre, salario,
ROW_NUMBER() OVER (ORDER BY salario DESC) AS posicion
FROM empleados;
Este comando ordena los empleados por salario en orden descendente y asigna un número de posición.
ROWS – Definir un marco de ventana por número de filas
La cláusula ROWS define un marco de ventana basado en el número de filas antes o después de la fila actual.
SELECT nombre, salario,
SUM(salario) OVER (ORDER BY salario ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS suma
FROM empleados;
Este comando suma el salario de la fila actual, la anterior y la siguiente.
RANGE – Definir un marco de ventana basado en valores
La cláusula RANGE define un marco de ventana basado en valores, en lugar de filas específicas.
SELECT nombre, salario,
SUM(salario) OVER (ORDER BY salario RANGE BETWEEN 1000 PRECEDING AND 1000 FOLLOWING) AS suma
FROM empleados;
Este comando suma el salario de todas las filas que están dentro de una diferencia de 1000 unidades respecto a la fila actual.
CURRENT_TIMESTAMP – Devolver la fecha y hora actual
La función CURRENT_TIMESTAMP devuelve la fecha y hora actual del sistema en formato de fecha y hora.
SELECT CURRENT_TIMESTAMP AS fecha_hora_actual;
Este comando devuelve la fecha y hora actual del sistema.
CURRENT_DATE – Devolver la fecha actual
La función CURRENT_DATE devuelve la fecha actual sin incluir la hora.
SELECT CURRENT_DATE AS fecha_actual;
Este comando devuelve la fecha actual del sistema.
CURRENT_TIME – Devolver la hora actual
La función CURRENT_TIME devuelve la hora actual sin incluir la fecha.
SELECT CURRENT_TIME AS hora_actual;
Este comando devuelve la hora actual del sistema.
DATEADD – Añadir un intervalo de tiempo a una fecha
La función DATEADD añade un intervalo de tiempo específico a una fecha dada.
SELECT DATEADD(DAY, 7, '2025-03-20') AS nueva_fecha;
Este comando añade 7 días a la fecha proporcionada.
DATEDIFF – Calcular la diferencia entre dos fechas
La función DATEDIFF calcula la diferencia entre dos fechas en términos de días, meses o años.
SELECT DATEDIFF(DAY, '2025-03-01', '2025-03-20') AS diferencia_dias;
Este comando devuelve la diferencia en días entre el 1 de marzo y el 20 de marzo de 2025.
Funciones avanzadas de SQL
Las funciones avanzadas de SQL permiten realizar operaciones complejas de manipulación de datos, agrupación, combinación y transformación de resultados. Estas funciones son esenciales para crear informes detallados, combinar múltiples conjuntos de datos y realizar cálculos avanzados. A continuación, se explican las funciones avanzadas más importantes en SQL:
DATEPART – Extraer una parte específica de una fecha
La función DATEPART permite extraer una parte específica de una fecha (como año, mes, día, hora, minuto o segundo).
SELECT DATEPART(YEAR, '2025-03-20') AS año;
Este comando devuelve el valor “2025” al extraer el año de la fecha proporcionada.
GETDATE – Devolver la fecha y hora actual
La función GETDATE devuelve la fecha y hora actual del sistema. Es similar a la función CURRENT_TIMESTAMP.
SELECT GETDATE() AS fecha_hora_actual;
Este comando devuelve la fecha y hora actuales del sistema.
GROUPING SETS – Especificar múltiples agrupaciones para agregación
La función GROUPING SETS permite definir múltiples conjuntos de agrupación en una única consulta.
SELECT departamento, cargo, SUM(salario) AS total_salario
FROM empleados
GROUP BY GROUPING SETS (
(departamento),
(cargo),
(departamento, cargo)
);
Este comando devuelve la suma de los salarios agrupados por departamento, por cargo y por ambos valores.
CUBE – Generar todas las combinaciones posibles de conjuntos de agrupación
La función CUBE genera todas las combinaciones posibles de valores en una agrupación para obtener subtotales detallados.
SELECT departamento, cargo, SUM(salario) AS total_salario
FROM empleados
GROUP BY CUBE (departamento, cargo);
Este comando devuelve la suma de los salarios para cada combinación de departamento y cargo, además de los subtotales por separado.
ROLLUP – Generar valores de subtotales en una jerarquía
La función ROLLUP genera subtotales para una jerarquía de valores definida en la agrupación.
SELECT departamento, cargo, SUM(salario) AS total_salario
FROM empleados
GROUP BY ROLLUP (departamento, cargo);
Este comando devuelve subtotales por cargo dentro de cada departamento, así como un total general.
INTERSECT – Devolver la intersección de dos conjuntos de resultados
El operador INTERSECT devuelve solo los registros que están presentes en ambos conjuntos de resultados.
SELECT nombre FROM empleados
INTERSECT
SELECT nombre FROM clientes;
Este comando devuelve los nombres que están presentes tanto en la tabla empleados como en la tabla clientes.
EXCEPT – Devolver la diferencia entre dos conjuntos de resultados
El operador EXCEPT devuelve los registros que están en el primer conjunto de resultados pero no en el segundo.
SELECT nombre FROM empleados
EXCEPT
SELECT nombre FROM clientes;
Este comando devuelve los nombres que están en la tabla empleados pero no en la tabla clientes.
MERGE – Insertar, actualizar o eliminar registros en función de otra tabla
El comando MERGE permite combinar datos de dos tablas, realizando inserciones, actualizaciones o eliminaciones en función de coincidencias.
MERGE INTO empleados AS destino
USING nuevos_empleados AS fuente
ON destino.id = fuente.id
WHEN MATCHED THEN
UPDATE SET destino.salario = fuente.salario
WHEN NOT MATCHED THEN
INSERT (id, nombre, salario) VALUES (fuente.id, fuente.nombre, fuente.salario)
WHEN NOT MATCHED BY SOURCE THEN
DELETE;
Este comando actualiza, inserta o elimina registros en la tabla empleados en función de los datos de la tabla nuevos_empleados.
CROSS APPLY – Ejecutar una subconsulta correlacionada
El operador CROSS APPLY ejecuta una subconsulta para cada fila en la tabla externa y devuelve solo las filas coincidentes.
SELECT e.nombre, p.total
FROM empleados e
CROSS APPLY (
SELECT SUM(total) AS total FROM pedidos WHERE pedidos.cliente_id = e.id
) AS p;
Este comando devuelve los empleados y la suma total de sus pedidos si existen coincidencias.
OUTER APPLY – Ejecutar una subconsulta y devolver resultados incluso sin coincidencias
El operador OUTER APPLY funciona como CROSS APPLY, pero también devuelve las filas de la tabla externa sin coincidencias.
SELECT e.nombre, ISNULL(p.total, 0) AS total
FROM empleados e
OUTER APPLY (
SELECT SUM(total) AS total FROM pedidos WHERE pedidos.cliente_id = e.id
) AS p;
Este comando devuelve todos los empleados, incluyendo aquellos que no tienen pedidos.
PIVOT – Rotar datos de una columna en múltiples columnas
El operador PIVOT permite transformar valores únicos de una columna en múltiples columnas para resumir datos de manera estructurada.
SELECT departamento, [Ventas], [Marketing], [Finanzas]
FROM (
SELECT departamento, cargo, salario
FROM empleados
) AS fuente
PIVOT (
SUM(salario)
FOR cargo IN ([Ventas], [Marketing], [Finanzas])
) AS tabla_pivot;
Este comando rota los valores de la columna cargo en columnas separadas y resume los salarios por departamento.
Funciones de manipulación de datos en SQL
Las funciones de manipulación de datos en SQL permiten transformar, combinar y analizar datos dentro de las consultas. Estas funciones son esenciales para el procesamiento de cadenas de texto, la conversión de valores y la manipulación de datos numéricos. A continuación, se explican las funciones de manipulación de datos más importantes en SQL:
UNPIVOT – Convertir múltiples columnas en filas únicas
La función UNPIVOT convierte múltiples columnas de una tabla en filas, lo que facilita la reorganización y el análisis de datos.
SELECT nombre, tipo, valor
FROM (
SELECT nombre, ventas, marketing, finanzas
FROM empleados
) AS fuente
UNPIVOT (
valor FOR tipo IN (ventas, marketing, finanzas)
) AS resultado;
Este comando convierte las columnas ventas, marketing y finanzas en filas únicas para cada nombre.
COALESCE – Devolver el primer valor no nulo
La función COALESCE devuelve el primer valor no nulo de una lista de valores.
SELECT COALESCE(NULL, NULL, 'Valor por defecto') AS resultado;
Este comando devuelve el valor 'Valor por defecto' porque es el primer valor no nulo en la lista.
NULLIF – Devolver NULL si dos valores son iguales
La función NULLIF devuelve NULL si los dos valores especificados son iguales; de lo contrario, devuelve el primer valor.
SELECT NULLIF(100, 100) AS resultado;
Este comando devuelve NULL porque ambos valores son iguales.
IIF – Evaluar una condición y devolver uno de dos valores
La función IIF evalúa una expresión booleana y devuelve un valor dependiendo de si la condición es verdadera o falsa.
SELECT IIF(5 > 3, 'Verdadero', 'Falso') AS resultado;
Este comando devuelve 'Verdadero' porque 5 es mayor que 3.
CONCAT – Concatenar dos o más cadenas de texto
La función CONCAT une dos o más cadenas de texto en una única cadena.
SELECT CONCAT('Hola', ' ', 'Mundo') AS resultado;
Este comando devuelve 'Hola Mundo'.
SUBSTRING – Extraer una subcadena de una cadena
La función SUBSTRING devuelve una parte específica de una cadena de texto.
SELECT SUBSTRING('SQL Server', 1, 3) AS resultado;
Este comando devuelve 'SQL' porque extrae los primeros tres caracteres de la cadena.
CHARINDEX – Encontrar la posición de una subcadena
La función CHARINDEX devuelve la posición de la primera aparición de una subcadena dentro de una cadena de texto.
SELECT CHARINDEX('S', 'SQL Server') AS resultado;
Este comando devuelve 1 porque la letra 'S' aparece en la primera posición de la cadena.
REPLACE – Reemplazar una subcadena en una cadena de texto
La función REPLACE sustituye todas las apariciones de una subcadena específica dentro de una cadena de texto.
SELECT REPLACE('Hola Mundo', 'Mundo', 'SQL') AS resultado;
Este comando devuelve 'Hola SQL' porque reemplaza la palabra 'Mundo' por 'SQL'.
LEN – Devolver la longitud de una cadena de texto
La función LEN devuelve el número de caracteres de una cadena de texto.
SELECT LEN('SQL Server') AS resultado;
Este comando devuelve 10 porque la cadena tiene 10 caracteres (incluyendo el espacio).
UPPER – Convertir una cadena a mayúsculas
La función UPPER convierte todos los caracteres de una cadena a mayúsculas.
SELECT UPPER('sql server') AS resultado;
Este comando devuelve 'SQL SERVER'.
LOWER – Convertir una cadena a minúsculas
La función LOWER convierte todos los caracteres de una cadena a minúsculas.
SELECT LOWER('SQL SERVER') AS resultado;
Este comando devuelve 'sql server'.
TRIM – Eliminar espacios al inicio y al final de una cadena
La función TRIM elimina los espacios en blanco al principio y al final de una cadena de texto.
SELECT TRIM(' Hola Mundo ') AS resultado;
Este comando devuelve 'Hola Mundo' sin los espacios adicionales.
ROUND – Redondear un valor numérico a un número específico de decimales
La función ROUND redondea un valor numérico al número de decimales especificado.
SELECT ROUND(123.45678, 2) AS resultado;
Este comando devuelve 123.46 porque redondea el valor a dos decimales.
Preguntas frecuentes
- ¿Qué es SQL y para qué se usa?
- SQL es un lenguaje que permite gestionar y manipular bases de datos relacionales.
- ¿Cuáles son los comandos básicos de SQL?
- SELECT, INSERT, UPDATE y DELETE son algunos de los comandos básicos de SQL.
- ¿Qué diferencia hay entre INNER JOIN y LEFT JOIN?
- INNER JOIN devuelve solo las filas coincidentes, mientras que LEFT JOIN devuelve todas las filas de la tabla izquierda.
- ¿Qué es una clave primaria en SQL?
- Es un valor único que identifica cada registro en una tabla.
- ¿Cómo se ordenan los resultados en SQL?
- Mediante el comando ORDER BY.
Conclusión
Dominar los comandos SQL es fundamental para gestionar y manipular bases de datos de manera eficiente. Los comandos básicos permiten realizar tareas esenciales como insertar, actualizar, eliminar y consultar datos, mientras que los comandos avanzados facilitan la creación de relaciones entre tablas, la optimización de consultas y el análisis de datos complejos. SQL es una herramienta clave para desarrolladores, analistas de datos y administradores de bases de datos, ya que permite estructurar y organizar grandes volúmenes de información de manera precisa. Con esta guía completa, tendrás el conocimiento necesario para aplicar eficazmente SQL en tus proyectos y mejorar tu rendimiento.
- El SEO No Está Muerto: Perspectiva Real En La Era De La IA
- Evolución del SEO: De Los Primeros Buscadores A La Era De La IA
- Google Elimina Los 100 Resultados Por Página: Impacto En SEO Y Métricas
- Dominar CSS Es Mucho Más Que Memorizar Propiedades
- Por Qué Usar Rem En CSS Mejora La Accesibilidad Y El Diseño Web
- Analítica Web
- API
- Chat GPT
- Ciberseguridad
- CMS
- CRM
- CSS
- Desarrollo Web
- Diseño Gráfico
- Diseño Web
- Elementor
- Email Marketing
- Emmet
- Figma
- Funnel De Ventas
- Gemini
- General
- GEO
- Git
- Google Ads
- Google Analytics 4
- Google Business
- Google Merchant
- Google Search Console
- HTML
- Inteligencia Artificial
- Internet
- Javascript
- Link Building
- Marketing
- Marketing Digital
- NPM
- NPX
- Optimización Web
- PHP
- Prestashop
- Prompts
- Reddit Answers
- Redes
- Redes Sociales
- Semrush
- SEO
- Software
- Sora
- SQL
- Tiendas Online
- TikTok
- Tipografías
- Typescript
- UX/UI
- Webflow
- Wordpress
- Todas
- Funnel De Ventas
- Diseño Web
- SEO
- Analítica Web
- Internet
- CSS
- Marketing
- Marketing Digital
- UX/UI
- Inteligencia Artificial
- Tiendas Online