Curso de programación con SQL
Aprende SQL y domina el lenguaje de consulta para gestionar y manipular bases de datos. Optimiza tus habilidades de bases de datos con 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.
Tutoriales de SQL
Aprende SQL con tutoriales de programación en SQL.
Introducción A Sql
Introducción Y Entorno
Ddl Y Dml
Introducción Y Entorno
Instalación De Mysql
Introducción Y Entorno
Instalación De Postgresql
Introducción Y Entorno
Tipos De Datos
Introducción Y Entorno
Bases De Datos Y Tablas
Introducción Y Entorno
Creación De Bases De Datos Y Tablas: Create Database, Create Table
Operaciones Básicas
Consultas Básicas De Selección: Select Y Where
Operaciones Básicas
Inserción De Datos: Insert Into
Operaciones Básicas
Actualización De Datos: Update
Operaciones Básicas
Eliminación De Datos: Delete
Operaciones Básicas
Clasificación De Resultados Con Order By
Filtros Y Clasificación
Filtrado De Valores Únicos Con Distinct
Filtros Y Clasificación
Uso De Funciones Agregadas: Count, Sum, Avg, Max, Min
Funciones Agregadas Y Agrupaciones
Agrupación De Resultados Con Group By
Funciones Agregadas Y Agrupaciones
Filtrado De Grupos De Resultados Con Having
Funciones Agregadas Y Agrupaciones
Relaciones Entre Tablas
Joins Y Subqueries
Uso De Inner Join, Left Join, Right Join, Full Join
Joins Y Subqueries
Creación Y Uso De Subqueries
Joins Y Subqueries
Alterar La Estructura De Tablas Existentes: Alter Table
Manipulación De Tablas Y Datos
Renombrar Tablas Y Bases De Datos: Rename
Manipulación De Tablas Y Datos
Vaciar Tablas Y Bases De Datos: Drop
Manipulación De Tablas Y Datos
Creación Y Uso De Funciones
Funciones Y Procedimientos Almacenados
Creación Y Uso De Procedimientos Almacenados
Funciones Y Procedimientos Almacenados
Creación Y Manejo De Usuarios Y Roles
Seguridad Y Administración De Bases De Datos Sql
Asignación Y Gestión De Permisos
Seguridad Y Administración De Bases De Datos Sql
Copias De Seguridad Y Restauración De Bases De Datos
Seguridad Y Administración De Bases De Datos Sql
Optimización De Consultas
Sintaxis Avanzada
Uso De Índices Y Particiones
Sintaxis Avanzada
Uso De Vistas
Sintaxis Avanzada
Triggers Y Eventos
Sintaxis Avanzada
Ejercicios de programación de SQL
Evalúa tus conocimientos en SQL con ejercicios de programación SQL de tipo Test, Puzzle, Código y Proyecto con VSCode.
Tipos de datos
Uso de vistas
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN
Instalación de MySQL
Relaciones entre tablas
Eliminación de datos: DELETE
Creación y uso de funciones
Filtrado de valores únicos con DISTINCT
Alterar la estructura de tablas existentes: ALTER TABLE
Creación de tablas e inserción de datos con SQL
Introducción a SQL
Triggers y eventos
Agrupación de resultados con GROUP BY
Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE
Bases de datos y tablas
Consultas básicas de selección SELECT y WHERE
Relaciones entre tablas
Actualización de datos: UPDATE
Creación y uso de procedimientos almacenados
Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN
Uso de índices y particiones
Sentencias INSERT
Creación y uso de subqueries
Clasificación de resultados con ORDER BY
Creación y manejo de usuarios y roles
Vaciar tablas y bases de datos: DROP
Consultas básicas de selección: SELECT y WHERE
Creación de bases de datos y tablas
Asignación y gestión de permisos
Optimización de consultas
Copias de seguridad y restauración de bases de datos
Filtrado de grupos de resultados con HAVING
Eliminación de datos: DELETE
Inserción de datos: INSERT INTO
Instalación de PostgreSQL
Actualización de datos: UPDATE
Renombrar tablas y bases de datos: RENAME
Tipo de tecnología
Lenguaje
Categoría laboral
Administración de bases de datos
Año de lanzamiento
1974
Developers
Donald D. Chamberlin y Raymond F. Boyce
Todos los módulos de SQL
SQL
Introducción y entorno
SQL
Operaciones básicas
SQL
Filtros y clasificación
SQL
Funciones agregadas y agrupaciones
SQL
Joins y subqueries
SQL
Manipulación de tablas y datos
SQL
Funciones y procedimientos almacenados
SQL
Seguridad y administración de bases de datos SQL
SQL
Sintaxis avanzada
Otras tecnologías
Vuejs
Vuejs
Frontend
Framework de JS progresivo para construir interfaces de usuario reactivas y modulares.
Selenium
Selenium
Testing / QA (Quality Assurance)
Suite de herramientas open-source para automatizar navegadores web y pruebas de software de interfaz de usuario.
TypeScript
TypeScript
Full Stack
Superconjunto de JavaScript con tipado estático.
Java
Java
Backend
Lenguaje de programación versátil y multiplataforma.
Seaborn
Seaborn
Ciencia de Datos e Inteligencia artificial
Biblioteca de visualización de datos para Python.
CSharp
CSharp
Backend
Lenguaje de programación de Microsoft para aplicaciones robustas.
SpringBoot
SpringBoot
Backend
Framework para desarrollo rápido de aplicaciones Java.
Nest
Nest
Backend
Framework Node.js para crear aplicaciones escalables y eficientes.
Git
Git
DevOps
Sistema de control de versiones distribuido.
React
React
Frontend
Librería framework para frontend interfaces de usuario.
Docker
Docker
DevOps
Plataforma de contenedores para aplicaciones portátiles.
Go
Go
Backend
Lenguaje de programación eficiente y concurrente creado por Google.
TailwindCSS
TailwindCSS
Frontend
Framework de utilidades CSS para diseños rápidos y personalizables.
Kotlin
Kotlin
Backend
Lenguaje de programación moderno y seguro para aplicaciones Android.
HTML
HTML
Frontend
Lenguaje de marcado para estructurar contenido web.
Numpy
Numpy
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para computación científica y matrices.
Bash
Bash
Administración de sistemas
Intérprete de comandos para sistemas Unix y Linux.
Matplotlib
Matplotlib
Ciencia de Datos e Inteligencia artificial
Biblioteca Python para crear gráficos y visualizaciones.