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
Guarda tu progreso
Inicia sesión para no perder tu progreso y accede a miles de tutoriales, ejercicios prácticos y nuestro asistente de IA.
Más de 25.000 desarrolladores ya confían en CertiDevs
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.
Completa este curso de SQL y certifícate
Únete a nuestra plataforma de cursos de programación y accede a miles de tutoriales, ejercicios prácticos, proyectos reales y nuestro asistente de IA personalizado para acelerar tu aprendizaje.
Asistente IA
Resuelve dudas al instante
Ejercicios
Practica con proyectos reales
Certificados
Valida tus conocimientos
Más de 25.000 desarrolladores ya se han certificado con CertiDevs