Descripción del curso SQL
SQL (Structured Query Language) es un lenguaje de programación diseñado para gestionar y manipular bases de datos relacionales. Permite realizar operaciones como consultar, insertar, actualizar y eliminar datos almacenados en sistemas de gestión de bases de datos (SGBD) como MySQL, PostgreSQL, Oracle y SQL Server.
Fundamentos de las bases de datos relacionales
Las bases de datos relacionales almacenan información en tablas compuestas por filas y columnas. Cada tabla representa una entidad, y las relaciones entre tablas se establecen mediante claves primarias y foráneas. Este modelo facilita la organización y acceso eficiente a los datos.
Operaciones básicas en SQL
Consultas con SELECT
La sentencia SELECT
se utiliza para recuperar datos de una o varias tablas.
SELECT nombre, edad FROM usuarios;
Este comando obtiene los campos nombre
y edad
de la tabla usuarios
.
Filtrado de datos con WHERE
La cláusula WHERE
permite filtrar registros según condiciones específicas.
SELECT * FROM usuarios WHERE edad > 30;
Recupera todos los usuarios cuya edad es mayor de 30 años.
Ordenamiento con ORDER BY
Para ordenar los resultados, se utiliza ORDER BY
.
SELECT nombre, edad FROM usuarios ORDER BY edad DESC;
Muestra los usuarios ordenados por edad de mayor a menor.
Limitación de resultados con LIMIT
Es posible limitar el número de registros devueltos.
SELECT * FROM usuarios LIMIT 10;
Obtiene los primeros 10 registros de la tabla usuarios
.
Manipulación de datos
Inserción de datos con INSERT
La sentencia INSERT
añade nuevos registros a una tabla.
INSERT INTO usuarios (nombre, edad, correo) VALUES ('Ana', 28, 'ana@example.com');
Agrega un nuevo usuario con los datos proporcionados.
Actualización de datos con UPDATE
UPDATE
modifica registros existentes.
UPDATE usuarios SET correo = 'ana.nuevo@example.com' WHERE nombre = 'Ana';
Actualiza el correo de la usuaria llamada Ana.
Eliminación de datos con DELETE
DELETE
elimina registros de una tabla.
DELETE FROM usuarios WHERE edad < 18;
Elimina todos los usuarios menores de 18 años.
Creación y modificación de estructuras
Creación de tablas con CREATE TABLE
Para crear una nueva tabla:
CREATE TABLE productos (
id INT PRIMARY KEY AUTO_INCREMENT,
nombre VARCHAR(100) NOT NULL,
precio DECIMAL(10, 2) NOT NULL,
stock INT DEFAULT 0
);
Esta sentencia crea la tabla productos
con los campos especificados.
Modificación de tablas con ALTER TABLE
Permite añadir, modificar o eliminar columnas.
Agregar una columna:
ALTER TABLE productos ADD COLUMN descripcion TEXT;
Eliminar una columna:
ALTER TABLE productos DROP COLUMN stock;
Eliminación de tablas con DROP TABLE
Para eliminar una tabla completa:
DROP TABLE productos;
Claves y restricciones
Clave primaria (PRIMARY KEY)
Identifica de manera única cada registro en una tabla.
id INT PRIMARY KEY AUTO_INCREMENT
Clave foránea (FOREIGN KEY)
Establece relaciones entre tablas.
CREATE TABLE pedidos (
id INT PRIMARY KEY AUTO_INCREMENT,
usuario_id INT,
fecha DATE,
FOREIGN KEY (usuario_id) REFERENCES usuarios(id)
);
Restricciones de integridad
NOT NULL
: La columna no puede contener valores nulos.UNIQUE
: El valor debe ser único en la columna.CHECK
: Impone una condición que los datos deben cumplir.DEFAULT
: Establece un valor por defecto.
Ejemplo:
precio DECIMAL(10, 2) NOT NULL CHECK (precio > 0)
Funciones agregadas y agrupamiento
Funciones agregadas
COUNT()
: Cuenta el número de registros.SUM()
: Suma los valores de una columna.AVG()
: Calcula el promedio.MAX()
yMIN()
: Obtienen el valor máximo y mínimo.
Ejemplo:
SELECT COUNT(*) FROM usuarios;
Agrupamiento con GROUP BY
Permite agrupar registros y aplicar funciones agregadas.
SELECT edad, COUNT(*) FROM usuarios GROUP BY edad;
Cuenta cuántos usuarios hay de cada edad.
Filtrado de grupos con HAVING
Similar a WHERE
, pero para grupos.
SELECT edad, COUNT(*) FROM usuarios GROUP BY edad HAVING COUNT(*) > 1;
Muestra solo las edades que tienen más de un usuario.
Subconsultas y uniones
Subconsultas
Consultas anidadas dentro de otra consulta.
SELECT nombre FROM usuarios WHERE id IN (SELECT usuario_id FROM pedidos);
Obtiene los nombres de usuarios que tienen pedidos.
Uniones (JOIN)
Permiten combinar registros de dos o más tablas.
INNER JOIN
Combina filas cuando hay coincidencias en ambas tablas.
SELECT usuarios.nombre, pedidos.fecha
FROM usuarios
INNER JOIN pedidos ON usuarios.id = pedidos.usuario_id;
LEFT JOIN
Incluye todas las filas de la tabla izquierda, con coincidencias de la derecha si existen.
SELECT usuarios.nombre, pedidos.fecha
FROM usuarios
LEFT JOIN pedidos ON usuarios.id = pedidos.usuario_id;
Vistas y procedimientos almacenados
Vistas
Una vista es una consulta almacenada que se puede tratar como una tabla virtual.
Crear una vista:
CREATE VIEW vista_usuarios_activos AS
SELECT nombre, correo FROM usuarios WHERE activo = 1;
Usar la vista:
SELECT * FROM vista_usuarios_activos;
Procedimientos almacenados
Permiten encapsular código SQL para reutilizarlo.
Crear un procedimiento:
CREATE PROCEDURE actualizar_stock(IN producto_id INT, IN cantidad INT)
BEGIN
UPDATE productos SET stock = stock + cantidad WHERE id = producto_id;
END;
Ejecutar el procedimiento:
CALL actualizar_stock(5, 10);
Transacciones
Las transacciones garantizan la integridad de los datos mediante operaciones atómicas.
START TRANSACTION;
UPDATE cuentas SET saldo = saldo - 100 WHERE id = 1;
UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2;
COMMIT;
Si ocurre un error, se puede deshacer:
ROLLBACK;
Índices y optimización
Índices
Mejoran el rendimiento de las consultas.
Crear un índice:
CREATE INDEX idx_nombre ON usuarios(nombre);
Consideraciones de optimización
- Evitar el uso excesivo de subconsultas anidadas.
- Utilizar índices en columnas frecuentemente consultadas.
- Normalizar las tablas para reducir la redundancia.
Seguridad y permisos
Gestión de usuarios
Crear un usuario:
CREATE USER 'nuevo_usuario'@'localhost' IDENTIFIED BY 'contraseña_segura';
Asignar permisos:
GRANT SELECT, INSERT ON base_de_datos.* TO 'nuevo_usuario'@'localhost';
Revocar permisos:
REVOKE INSERT ON base_de_datos.* FROM 'nuevo_usuario'@'localhost';
Eliminar un usuario:
DROP USER 'nuevo_usuario'@'localhost';
Conexión desde aplicaciones
Las aplicaciones se conectan a la base de datos mediante controladores específicos. Por ejemplo, en Python se puede utilizar psycopg2
para PostgreSQL o PyMySQL
para MySQL.
Ejemplo en Python:
import pymysql
conexion = pymysql.connect(
host='localhost',
user='usuario',
password='contraseña',
db='base_de_datos'
)
cursor = conexion.cursor()
cursor.execute("SELECT * FROM usuarios")
resultados = cursor.fetchall()
for fila in resultados:
print(fila)
conexion.close()
Herramientas y recursos adicionales
- SGBD populares: MySQL, PostgreSQL, Oracle, SQL Server.
- Clientes gráficos GUI: phpMyAdmin, pgAdmin, MySQL Workbench.
- Documentación oficial: Consultar la documentación del SGBD utilizado para detalles específicos.
Lecciones y tutoriales de SQL
Ejercicios de programación de SQL
Módulos del curso
Explora todos los módulos disponibles en este curso de SQL
Explorar más tecnologías
Descubre más tecnologías de programación y desarrollo de software

Alan Sastre
Ingeniero de Software y formador, CEO en CertiDevs
Ingeniero de software especializado en Full Stack y en Inteligencia Artificial. Como CEO de CertiDevs, SQL es una de sus áreas de expertise. Con más de 15 años programando, 6K seguidores en LinkedIn y experiencia como formador, Alan se dedica a crear contenido educativo de calidad para desarrolladores de todos los niveles.