Saltar a contenido

CHULETA DE SQL

Comandos Básicos (CRUD)

  • SELECT: consulta datos
  • INSERT INTO: añade registros
  • UPDATE: modifica registros
  • DELETE: elimina registros

CREATE TABLE

CREATE TABLE empleados (
  id INT PRIMARY KEY,
  nombre VARCHAR(50),
  salario DECIMAL(10,2),
  fecha_ingreso DATE,
  departamento_id INT
);
CREATE TABLE empleados_altos
AS
SELECT id, nombre, salario
FROM empleados
WHERE salario > 3000;


SELECT

SELECT nombre FROM empleados;
SELECT * FROM empleados WHERE salario > 2000 ORDER BY salario DESC;
SELECT DISTINCT departamento_id FROM empleados;

INSERT

INSERT INTO empleados (id, nombre, salario, fecha_ingreso, departamento_id) 
VALUES (1, 'Ana', 2500.00, '2022-01-10', 2);

UPDATE

UPDATE empleados 
SET salario = salario + 200 
WHERE departamento_id = 2;

DELETE

DELETE FROM empleados 
WHERE salario < 1000;

Funciones de Agregación

  • COUNT(*), SUM(col), AVG(col), MAX(col), MIN(col)
    SELECT AVG(salario) FROM empleados;
    SELECT departamento_id, COUNT(*) FROM empleados GROUP BY departamento_id;
    

GROUP BY / HAVING

SELECT departamento_id, AVG(salario) AS promedio_salario 
FROM empleados 
GROUP BY departamento_id 
HAVING AVG(salario) > 2000;

JOINS

SELECT e.nombre, d.nombre AS departamento
FROM empleados e
JOIN departamentos d ON e.departamento_id = d.id;

SELECT e.nombre, d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON e.departamento_id = d.id;

Subconsultas

SELECT nombre FROM empleados 
WHERE salario > (SELECT AVG(salario) FROM empleados);

SELECT * FROM empleados 
WHERE departamento_id IN (SELECT id FROM departamentos WHERE sede = 'Madrid');

Vistas

CREATE VIEW empleados_altos AS 
SELECT * FROM empleados WHERE salario > 3000;

SELECT * FROM empleados_altos;

Índices

CREATE INDEX idx_salario ON empleados(salario);

Transacciones

START TRANSACTION;

UPDATE empleados SET salario = salario * 1.1 
WHERE departamento_id = 3;

-- COMMIT para guardar cambios
-- ROLLBACK para deshacer si hay error

COMMIT;

TRIGGERS (Disparadores)

Crear tabla de log

CREATE TABLE log_salarios (
  empleado_id INT,
  salario_anterior DECIMAL(10,2),
  salario_nuevo DECIMAL(10,2),
  fecha_cambio TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Crear trigger

DELIMITER //

CREATE TRIGGER trg_actualiza_salario
BEFORE UPDATE ON empleados
FOR EACH ROW
BEGIN
  IF NEW.salario != OLD.salario THEN
    INSERT INTO log_salarios (empleado_id, salario_anterior, salario_nuevo)
    VALUES (OLD.id, OLD.salario, NEW.salario);
  END IF;
END;
//

DELIMITER ;

Otro ejemplo: trigger AFTER INSERT

DELIMITER //

CREATE TRIGGER trg_bienvenida_empleado
AFTER INSERT ON empleados
FOR EACH ROW
BEGIN
  INSERT INTO mensajes (mensaje)
  VALUES (CONCAT('Bienvenido ', NEW.nombre, ' al equipo!'));
END;
//

DELIMITER ;

Comentarios

-- Esto es un comentario de una línea

/* 
  Esto es un comentario 
  de múltiples líneas 
*/