Comandos SQL: Guía Completa Para Principiantes Y Expertos

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?

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Fonsi
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.