50% OFF Plus
--:--:--
¡Obtener!

Curso SQL

SQL
SQL
Actualizado: 11/06/2025

¡Desbloquea el curso completo!

IA
Ejercicios
Certificado
Entrar

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.

Progreso guardado
Asistente IA
Ejercicios
Iniciar sesión gratis

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() y MIN(): 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

⭐⭐⭐⭐⭐
4.9/5 valoración