// referencia · 2025 SQL Reference v 2.0

SQL
Key
words

Guía completa con sintaxis y ejemplos prácticos

DDL — Definición DQL — Consulta DCL — Control DML — Manipulación

Selecciona una palabra clave

DDL

CREATE

Data Definition Language — Creación de objetos

Crea nuevos objetos en la base de datos: tablas, vistas, índices, procedimientos almacenados, bases de datos o esquemas. Es la instrucción fundamental para definir la estructura de los datos.

Sintaxis
CREATE TABLE nombre_tabla (
  columna1 tipo_dato CONSTRAINT,
  columna2 tipo_dato,
  ...
);
Ejemplo práctico
SQL
-- Crear tabla de empleados CREATE TABLE empleados ( id INT PRIMARY KEY AUTO_INCREMENT, nombre VARCHAR(80) NOT NULL, departamento VARCHAR(50), salario DECIMAL(10,2) DEFAULT 0.00, fecha_ingreso DATE );
✓ Table 'empleados' created successfully.
Notas importantes
  • Si la tabla ya existe se lanzará un error; usa CREATE TABLE IF NOT EXISTS para evitarlo.
  • Se pueden crear bases de datos completas con CREATE DATABASE nombre.
  • Las vistas se crean con CREATE VIEW nombre AS SELECT ....
DDL

ALTER

Data Definition Language — Modificación de estructura

Modifica la estructura de un objeto existente: agrega, elimina o cambia columnas; agrega o elimina restricciones; renombra columnas.

Sintaxis
ALTER TABLE tabla
  ADD COLUMN    col tipo       -- agregar
  DROP COLUMN   col             -- eliminar
  MODIFY COLUMN col nuevo_tipo  -- cambiar tipo
  RENAME COLUMN viejo TO nuevo;
Ejemplo práctico
SQL
-- Agregar columna email a la tabla empleados ALTER TABLE empleados ADD COLUMN email VARCHAR(120) UNIQUE; -- Cambiar el tipo de dato de salario ALTER TABLE empleados MODIFY COLUMN salario DECIMAL(12,2);
✓ Column 'email' added. Type of 'salario' modified.
Notas importantes
  • Al eliminar una columna con datos, la información se pierde permanentemente.
  • Cambiar el tipo de una columna con datos puede causar errores de conversión.
DDL

DROP

Data Definition Language — Eliminación de objetos

Elimina de forma permanente e irreversible un objeto de la base de datos: tablas, vistas, índices, bases de datos o procedimientos.

Sintaxis
DROP TABLE    nombre_tabla;
DROP DATABASE nombre_bd;
DROP VIEW     nombre_vista;
DROP INDEX    nombre_indice ON tabla;
Ejemplo práctico
SQL
-- Eliminar tabla si existe DROP TABLE IF EXISTS empleados_temp; -- Eliminar la base de datos de pruebas DROP DATABASE test_db;
✓ Table 'empleados_temp' dropped successfully.
Notas importantes
  • ⚠ Operación irreversible: no hay UNDO. Haz un backup antes.
  • Usa IF EXISTS para evitar errores si el objeto no existe.
  • Las tablas con FOREIGN KEY activas no pueden eliminarse sin antes borrar o desactivar las restricciones.
DDL

TRUNCATE

Data Definition Language — Vaciado de tabla

Elimina todos los registros de una tabla de forma rápida, sin activar triggers de DELETE y restableciendo los contadores AUTO_INCREMENT. La estructura de la tabla se mantiene intacta.

Sintaxis
TRUNCATE TABLE nombre_tabla;
Ejemplo práctico
SQL
-- Vaciar la tabla de logs para el nuevo periodo TRUNCATE TABLE logs_acceso; -- Comparación: DELETE vs TRUNCATE DELETE FROM logs_acceso; -- lento, activa triggers TRUNCATE TABLE logs_acceso; -- rápido, sin triggers
✓ 0 rows in set. Table truncated.
Notas importantes
  • Más rápido que DELETE para grandes volúmenes de datos.
  • No se puede usar en tablas con FOREIGN KEY referenciadas.
  • En MySQL, no activa triggers; en PostgreSQL sí puede activarlos.
DDL

RENAME

Data Definition Language — Renombrar objetos

Cambia el nombre de una tabla u objeto de la base de datos sin alterar su contenido ni estructura.

Sintaxis
-- MySQL
RENAME TABLE nombre_viejo TO nombre_nuevo;

-- Oracle / PostgreSQL
ALTER TABLE nombre_viejo RENAME TO nombre_nuevo;
Ejemplo práctico
SQL
RENAME TABLE empleados TO staff;
✓ Table renamed from 'empleados' to 'staff'.
DQL

SELECT

Data Query Language — Consulta de datos

El comando más usado en SQL. Recupera datos de una o más tablas y puede combinarse con filtros, ordenamientos, funciones de agregación y subconsultas.

Sintaxis completa
SELECT   columna1, columna2, ...
FROM     tabla
WHERE    condición
GROUP BY columna
HAVING   condición_grupo
ORDER BY columna ASC|DESC
LIMIT    n;
Ejemplo práctico
SQL
-- Top 3 departamentos con mayor salario promedio SELECT departamento, COUNT(*) AS total_emp, AVG(salario) AS salario_promedio FROM empleados WHERE salario > 30000 GROUP BY departamento HAVING AVG(salario) > 50000 ORDER BY salario_promedio DESC LIMIT 3;
departamento | total_emp | salario_promedio --------------+-----------+---------------- Ingeniería | 12 | 75000.00 Finanzas | 8 | 68500.00 Producto | 6 | 62000.00
Notas importantes
  • Usa SELECT * solo en desarrollo; en producción especifica columnas.
  • SELECT DISTINCT elimina filas duplicadas en el resultado.
  • El orden de las cláusulas es estricto: SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT.
DQL

WHERE

Data Query Language — Filtrado de filas

Filtra las filas devueltas por SELECT, UPDATE o DELETE según una condición booleana. Soporta operadores de comparación, lógicos, BETWEEN, IN, LIKE y NULL.

Operadores disponibles
=  !=  <  >  <=  >=            -- comparación
AND  OR  NOT                    -- lógicos
BETWEEN val1 AND val2           -- rango
IN (val1, val2, ...)           -- lista
LIKE '%patron%'                 -- patrón texto
IS NULL  /  IS NOT NULL         -- nulos
Ejemplo práctico
SQL
SELECT nombre, salario, departamento FROM empleados WHERE departamento IN ('Ingeniería', 'Producto') AND salario BETWEEN 40000 AND 80000 AND nombre LIKE 'A%';
nombre | salario | departamento ----------+----------+------------- Ana López | 55000.0 | Ingeniería Alicia V. | 47500.0 | Producto
DQL

JOIN

Data Query Language — Combinación de tablas

Combina filas de dos o más tablas basándose en una condición de relación (normalmente una clave foránea). Existen varios tipos: INNER, LEFT, RIGHT y FULL OUTER.

Tipos de JOIN
INNER JOIN      -- solo filas que coinciden en ambas
LEFT  JOIN      -- todas de la izquierda + coincidencias
RIGHT JOIN      -- todas de la derecha + coincidencias
FULL OUTER JOIN -- todas de ambas tablas
Ejemplo práctico
SQL
-- Empleados con su departamento y ciudad SELECT e.nombre, d.nombre_depto, o.ciudad FROM empleados e INNER JOIN departamentos d ON e.depto_id = d.id LEFT JOIN oficinas o ON d.oficina_id = o.id;
nombre | nombre_depto | ciudad -----------+--------------+---------- Ana López | Ingeniería | Madrid Luis Pérez | Finanzas | NULL
DQL

GROUP BY

Data Query Language — Agrupación de resultados

Agrupa filas con los mismos valores en una o más columnas. Permite aplicar funciones de agregación (COUNT, SUM, AVG, MAX, MIN) a cada grupo.

Ejemplo práctico
SQL
SELECT departamento, COUNT(*) AS empleados, SUM(salario) AS total_nomina, MAX(salario) AS salario_max FROM empleados GROUP BY departamento;
departamento | empleados | total_nomina | salario_max -------------+-----------+--------------+------------ Ingeniería | 12 | 900000.00 | 95000.00 Finanzas | 8 | 548000.00 | 78000.00
DQL

ORDER BY

Data Query Language — Ordenamiento de resultados

Ordena el conjunto de resultados en forma ascendente (ASC) o descendente (DESC). Puede ordenar por múltiples columnas con prioridades distintas.

Ejemplo práctico
SQL
-- Ordenar por departamento ASC y salario DESC SELECT nombre, departamento, salario FROM empleados ORDER BY departamento ASC, salario DESC;
nombre | departamento | salario -----------+--------------+--------- Ana López | Finanzas | 78000.0 Luis Pérez | Finanzas | 55000.0 Carmen R. | Ingeniería | 95000.0
DQL

HAVING

Data Query Language — Filtrado de grupos

Funciona igual que WHERE pero se aplica después de GROUP BY, sobre resultados de funciones de agregación. WHERE filtra filas individuales; HAVING filtra grupos.

Ejemplo práctico
SQL
-- Departamentos con más de 5 empleados SELECT departamento, COUNT(*) AS total FROM empleados GROUP BY departamento HAVING COUNT(*) > 5;
departamento | total -------------+------ Ingeniería | 12 Ventas | 9
DQL

SUBQUERY

Data Query Language — Consulta anidada

Una consulta SELECT dentro de otra consulta (en WHERE, FROM o SELECT). Permite resolver problemas complejos dividiendo la lógica en pasos.

Ejemplo práctico
SQL
-- Empleados con salario mayor al promedio general SELECT nombre, salario FROM empleados WHERE salario > ( SELECT AVG(salario) FROM empleados );
nombre | salario ----------+--------- Carmen R. | 95000.0 Pedro M. | 85000.0
DCL

GRANT

Data Control Language — Concesión de permisos

Otorga privilegios de acceso o manipulación sobre objetos de la base de datos a usuarios o roles. Es la forma principal de gestionar la seguridad en SQL.

Sintaxis
GRANT privilegio
  ON objeto
  TO usuario | rol
  [WITH GRANT OPTION];
Ejemplo práctico
SQL
-- Permisos de lectura y escritura al analista GRANT SELECT, INSERT, UPDATE ON empleados TO 'analista01'@'localhost'; -- Permiso total sobre toda la BD GRANT ALL PRIVILEGES ON empresa.* TO 'admin'@'%' WITH GRANT OPTION;
✓ Query OK. Privileges granted to 'analista01'.
Privilegios disponibles
  • SELECT, INSERT, UPDATE, DELETE — operaciones sobre datos.
  • CREATE, DROP, ALTER — gestión de estructura.
  • ALL PRIVILEGES — todos los permisos disponibles.
  • WITH GRANT OPTION — permite que el usuario ceda sus permisos a otros.
DCL

REVOKE

Data Control Language — Revocación de permisos

Retira privilegios previamente concedidos mediante GRANT. Puede revocar permisos específicos o todos los permisos de un usuario sobre un objeto.

Ejemplo práctico
SQL
-- Quitar permiso de borrado al analista REVOKE DELETE ON empleados FROM 'analista01'@'localhost'; -- Quitar todos los permisos REVOKE ALL PRIVILEGES ON empresa.* FROM 'analista01'@'localhost';
✓ Privileges revoked from 'analista01'.
DCL

DENY

Data Control Language — Denegación de permisos

Niega explícitamente un permiso a un usuario o rol, incluso si ese permiso fue heredado por un rol. Disponible principalmente en SQL Server. Tiene precedencia sobre GRANT.

Ejemplo práctico
SQL — SQL Server
-- Negar acceso a la columna salario DENY SELECT ON empleados(salario) TO practicante_rol;
✓ The requested permissions have been denied.
DML

INSERT

Data Manipulation Language — Inserción de datos

Agrega una o más filas nuevas a una tabla. Puede insertar valores literales, resultados de un SELECT, o múltiples filas en una sola instrucción.

Sintaxis
INSERT INTO tabla (col1, col2)
VALUES (val1, val2);

-- Múltiples filas
INSERT INTO tabla (col1, col2)
VALUES (a1,b1), (a2,b2);
Ejemplo práctico
SQL
-- Insertar un empleado INSERT INTO empleados (nombre, departamento, salario, fecha_ingreso) VALUES ('María García', 'Ingeniería', 62000.00, '2025-06-01'); -- Insertar múltiples empleados de una vez INSERT INTO empleados (nombre, departamento, salario) VALUES ('Juan Torres', 'Ventas', 45000.00), ('Lucía Ruiz', 'Finanzas', 58000.00), ('Carlos Vega', 'Ingeniería', 71000.00);
✓ 1 row affected. ✓ 3 rows affected.
DML

UPDATE

Data Manipulation Language — Actualización de datos

Modifica los valores de una o más columnas en filas existentes de una tabla. Siempre debe usarse con WHERE para evitar actualizar toda la tabla.

Ejemplo práctico
SQL
-- Aumento de sueldo al departamento de Ingeniería UPDATE empleados SET salario = salario * 1.10 WHERE departamento = 'Ingeniería'; -- Actualizar múltiples columnas UPDATE empleados SET departamento = 'Producto', salario = 67000 WHERE id = 42;
✓ 12 rows affected. ✓ 1 row affected.
Notas importantes
  • ⚠ Sin WHERE, se actualizan TODAS las filas de la tabla.
  • Usa SELECT primero con el mismo WHERE para verificar qué filas se van a afectar.
DML

DELETE

Data Manipulation Language — Eliminación de filas

Elimina una o más filas de una tabla. A diferencia de TRUNCATE, activa triggers, permite usar WHERE para eliminar selectivamente y puede revertirse con ROLLBACK.

Ejemplo práctico
SQL
-- Eliminar empleados sin salario asignado DELETE FROM empleados WHERE salario IS NULL OR salario = 0; -- Eliminar con subquery DELETE FROM empleados WHERE depto_id NOT IN ( SELECT id FROM departamentos );
✓ 3 rows deleted.
DML

MERGE

Data Manipulation Language — Sincronización UPSERT

Combina INSERT y UPDATE en una sola operación: si el registro existe lo actualiza; si no existe lo inserta. Ideal para sincronización de datos entre tablas.

Ejemplo práctico
SQL — SQL Server / Oracle
MERGE INTO empleados AS destino USING nuevos_datos AS origen ON destino.id = origen.id WHEN MATCHED THEN UPDATE SET salario = origen.salario WHEN NOT MATCHED THEN INSERT (id, nombre, salario) VALUES (origen.id, origen.nombre, origen.salario);
✓ 5 rows merged (2 inserted, 3 updated).
DML

COMMIT

Data Manipulation Language — Confirmación de transacción

Confirma permanentemente todos los cambios realizados desde el último COMMIT o ROLLBACK. Una vez ejecutado, los cambios no pueden revertirse.

Ejemplo práctico
SQL
BEGIN; UPDATE cuentas SET saldo = saldo - 500 WHERE id = 1; -- débito UPDATE cuentas SET saldo = saldo + 500 WHERE id = 2; -- crédito COMMIT; -- confirma ambas operaciones como una unidad
✓ Transaction committed successfully.
DML

ROLLBACK

Data Manipulation Language — Reversión de transacción

Deshace todos los cambios realizados desde el último COMMIT o SAVEPOINT. Es el mecanismo de seguridad de las transacciones SQL.

Ejemplo práctico
SQL
BEGIN; DELETE FROM empleados WHERE departamento = 'Ventas'; -- Oops! borré más de lo esperado... ROLLBACK; -- ¡los datos vuelven! -- Con SAVEPOINT para mayor control SAVEPOINT punto1; DELETE FROM empleados WHERE id = 55; ROLLBACK TO punto1; -- revierte solo desde punto1
✓ Transaction rolled back. 0 rows affected.
Notas importantes
  • Solo funciona si la transacción está activa (no auto-commit).
  • Los DDL (CREATE, DROP, ALTER) no pueden revertirse en la mayoría de los motores.