1.
COMANDOS DDL (Data Definition Language)
CREATE DATABASE
Crea una nueva base de datos.
CREATE DATABASE nombre_base_datos;
CREATE TABLE
Crea una nueva tabla con columnas y restricciones.
CREATE TABLE nombre_tabla (
columna1 tipo_dato [restricciones],
columna2 tipo_dato [restricciones],
...
[CONSTRAINT nombre_restriccion tipo_restriccion]
);
Tipos de datos comunes:
INT , INTEGER - Números enteros
VARCHAR(n) - Cadenas de texto variable hasta n caracteres
CHAR(n) - Cadenas de texto fijo de n caracteres
TEXT - Texto largo
DATE - Fechas (YYYY-MM-DD)
DATETIME , TIMESTAMP - Fecha y hora
DECIMAL(p,s) - Números decimales con p dígitos y s decimales
BOOLEAN - Verdadero/Falso
Restricciones:
PRIMARY KEY - Clave primaria
FOREIGN KEY - Clave foránea
NOT NULL - No permite valores nulos
UNIQUE - Valores únicos
CHECK - Condición que debe cumplirse
DEFAULT - Valor por defecto
ALTER TABLE
Modifica la estructura de una tabla existente.
-- Agregar columna
ALTER TABLE nombre_tabla ADD COLUMN nueva_columna tipo_dato;
-- Modificar columna
ALTER TABLE nombre_tabla MODIFY COLUMN columna nuevo_tipo;
-- Eliminar columna
ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;
-- Agregar restricción
ALTER TABLE nombre_tabla ADD CONSTRAINT nombre_restriccion tipo_restriccion;
DROP
Elimina objetos de la base de datos.
DROP DATABASE nombre_base_datos; -- Elimina base de datos
DROP TABLE nombre_tabla; -- Elimina tabla
DROP INDEX nombre_indice; -- Elimina índice
TRUNCATE
Elimina todos los registros de una tabla pero mantiene su estructura.
TRUNCATE TABLE nombre_tabla;
2. COMANDOS DML (Data Manipulation Language)
SELECT
Consulta datos de una o más tablas.
SELECT columna1, columna2, ...
FROM nombre_tabla
[WHERE condición]
[GROUP BY columna]
[HAVING condición]
[ORDER BY columna [ASC|DESC]]
[LIMIT número];
Variaciones del SELECT:
-- Seleccionar todas las columnas
SELECT * FROM tabla;
-- Seleccionar con alias
SELECT columna AS alias FROM tabla;
-- Seleccionar valores únicos
SELECT DISTINCT columna FROM tabla;
-- Contar registros
SELECT COUNT(*) FROM tabla;
INSERT
Inserta nuevos registros en una tabla.
-- Insertar valores específicos
INSERT INTO nombre_tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);
-- Insertar múltiples registros
INSERT INTO nombre_tabla (columna1, columna2)
VALUES
(valor1a, valor2a),
(valor1b, valor2b),
(valor1c, valor2c);
-- Insertar desde otra tabla
INSERT INTO tabla_destino (columna1, columna2)
SELECT columna1, columna2 FROM tabla_origen WHERE condición;
UPDATE
Modifica registros existentes.
UPDATE nombre_tabla
SET columna1 = nuevo_valor1,
columna2 = nuevo_valor2
WHERE condición;
DELETE
Elimina registros de una tabla.
DELETE FROM nombre_tabla
WHERE condición;
3. JOINS - Combinación de Tablas
INNER JOIN
Devuelve solo los registros que tienen coincidencias en ambas tablas.
SELECT columnas
FROM tabla1
INNER JOIN tabla2 ON tabla1.columna = tabla2.columna;
LEFT JOIN (LEFT OUTER JOIN)
Devuelve todos los registros de la tabla izquierda y los coincidentes de la derecha.
SELECT columnas
FROM tabla1
LEFT JOIN tabla2 ON tabla1.columna = tabla2.columna;
RIGHT JOIN (RIGHT OUTER JOIN)
Devuelve todos los registros de la tabla derecha y los coincidentes de la izquierda.
SELECT columnas
FROM tabla1
RIGHT JOIN tabla2 ON tabla1.columna = tabla2.columna;
FULL OUTER JOIN
Devuelve todos los registros cuando hay coincidencia en cualquiera de las tablas.
SELECT columnas
FROM tabla1
FULL OUTER JOIN tabla2 ON tabla1.columna = tabla2.columna;
CROSS JOIN
Producto cartesiano entre dos tablas.
SELECT columnas
FROM tabla1
CROSS JOIN tabla2;
4. OPERADORES Y CONDICIONES
Operadores de Comparación
= -- Igual
<> -- Diferente (también !=)
< -- Menor que
> -- Mayor que
<= -- Menor o igual
>= -- Mayor o igual
Operadores Lógicos
AND -- Y lógico
OR -- O lógico
NOT -- Negación
Operadores Especiales
-- Rangos
BETWEEN valor1 AND valor2
-- Listas de valores
IN (valor1, valor2, valor3)
-- Patrones de texto
LIKE 'patrón'
-- % representa cualquier secuencia de caracteres
-- _ representa un solo carácter
-- Valores nulos
IS NULL
IS NOT NULL
-- Existe
EXISTS (subconsulta)
5. FUNCIONES AGREGADAS
COUNT(columna) -- Cuenta registros
SUM(columna) -- Suma valores
AVG(columna) -- Promedio
MIN(columna) -- Valor mínimo
MAX(columna) -- Valor máximo
6. SUBCONSULTAS
Subconsulta en WHERE
SELECT columnas
FROM tabla1
WHERE columna IN (SELECT columna FROM tabla2 WHERE condición);
Subconsulta en FROM
SELECT columnas
FROM (SELECT columnas FROM tabla WHERE condición) AS subconsulta;
Subconsulta en SELECT
SELECT columna1,
(SELECT columna FROM tabla2 WHERE condición) AS columna_calculada
FROM tabla1;
7. OPERACIONES DE CONJUNTO
UNION
Combina resultados de dos consultas (sin duplicados).
SELECT columnas FROM tabla1
UNION
SELECT columnas FROM tabla2;
UNION ALL
Combina resultados incluyendo duplicados.
SELECT columnas FROM tabla1
UNION ALL
SELECT columnas FROM tabla2;
INTERSECT
Devuelve registros comunes entre dos consultas.
SELECT columnas FROM tabla1
INTERSECT
SELECT columnas FROM tabla2;
EXCEPT (MINUS)
Devuelve registros de la primera consulta que no están en la segunda.
SELECT columnas FROM tabla1
EXCEPT
SELECT columnas FROM tabla2;
8. COMANDOS DCL (Data Control Language)
GRANT
Otorga permisos a usuarios.
GRANT SELECT, INSERT ON tabla TO usuario;
GRANT ALL PRIVILEGES ON base_datos.* TO usuario;
REVOKE
Revoca permisos de usuarios.
REVOKE SELECT ON tabla FROM usuario;
REVOKE ALL PRIVILEGES ON base_datos.* FROM usuario;
9. COMANDOS TCL (Transaction Control Language)
COMMIT
Confirma los cambios realizados en una transacción.
COMMIT;
ROLLBACK
Deshace los cambios no confirmados.
ROLLBACK;
SAVEPOINT
Crea un punto de guardado en una transacción.
SAVEPOINT nombre_savepoint;
10. ÍNDICES
CREATE INDEX
Crea un índice para mejorar el rendimiento de las consultas.
CREATE INDEX nombre_indice ON tabla (columna1, columna2);
-- Índice único
CREATE UNIQUE INDEX nombre_indice ON tabla (columna);
11. VISTAS
CREATE VIEW
Crea una vista (tabla virtual).
CREATE VIEW nombre_vista AS
SELECT columnas
FROM tabla
WHERE condición;
DROP VIEW
Elimina una vista.
DROP VIEW nombre_vista;
12. PROCEDIMIENTOS ALMACENADOS
CREATE PROCEDURE
Crea un procedimiento almacenado.
CREATE PROCEDURE nombre_procedimiento(parámetros)
BEGIN
-- Código SQL
END;
Llamar un procedimiento
CALL nombre_procedimiento(valores);
13. FUNCIONES DE CADENA
CONCAT(cadena1, cadena2) -- Concatena cadenas
LENGTH(cadena) -- Longitud de cadena
UPPER(cadena) -- Convierte a mayúsculas
LOWER(cadena) -- Convierte a minúsculas
TRIM(cadena) -- Elimina espacios
SUBSTRING(cadena, inicio, longitud) -- Extrae subcadena
14. FUNCIONES DE FECHA
NOW() -- Fecha y hora actual
CURDATE() -- Fecha actual
CURTIME() -- Hora actual
DATE(fecha_hora) -- Extrae solo la fecha
YEAR(fecha) -- Extrae el año
MONTH(fecha) -- Extrae el mes
DAY(fecha) -- Extrae el día
DATEDIFF(fecha1, fecha2) -- Diferencia entre fechas
15. CONTROL DE FLUJO
CASE
Estructura condicional.
SELECT columna,
CASE
WHEN condición1 THEN resultado1
WHEN condición2 THEN resultado2
ELSE resultado_por_defecto
END AS nueva_columna
FROM tabla;
IF-ELSE (en procedimientos)
IF condición THEN
-- código si es verdadero
ELSE
-- código si es falso
END IF;
Ejemplo Completo de Uso
-- Crear base de datos
CREATE DATABASE tienda;
-- Usar la base de datos
USE tienda;
-- Crear tabla clientes
CREATE TABLE clientes (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
fecha_registro DATE DEFAULT CURRENT_DATE
);
-- Crear tabla productos
CREATE TABLE productos (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10,2) NOT NULL,
categoria VARCHAR(50)
);
-- Crear tabla pedidos
CREATE TABLE pedidos (
id INT PRIMARY KEY AUTO_INCREMENT,
cliente_id INT,
producto_id INT,
cantidad INT NOT NULL,
fecha_pedido DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (cliente_id) REFERENCES clientes(id),
FOREIGN KEY (producto_id) REFERENCES productos(id)
);
-- Insertar datos de ejemplo
INSERT INTO clientes (nombre, email) VALUES
('Juan Pérez', '
[email protected]'),
('María García', '
[email protected]');
INSERT INTO productos (nombre, precio, categoria) VALUES
('Laptop', 999.99, 'Electrónicos'),
('Mouse', 25.50, 'Electrónicos');
-- Consulta con JOIN
SELECT c.nombre, p.nombre, pd.cantidad, pd.fecha_pedido
FROM clientes c
INNER JOIN pedidos pd ON c.id = pd.cliente_id
INNER JOIN productos p ON pd.producto_id = p.id
WHERE pd.fecha_pedido >= '2024-01-01'
ORDER BY pd.fecha_pedido DESC;