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.

Aprende SQL GRATIS y certifícate

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() 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.
Aprende SQL GRATIS online

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

Test

Uso de vistas

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Test

Uso de INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN

Código

Instalación de MySQL

Test

Relaciones entre tablas

Código

Eliminación de datos: DELETE

Código

Creación y uso de funciones

Test

Filtrado de valores únicos con DISTINCT

Test

Alterar la estructura de tablas existentes: ALTER TABLE

Test

Creación de tablas e inserción de datos con SQL

Proyecto

Introducción a SQL

Test

Triggers y eventos

Test

Agrupación de resultados con GROUP BY

Test

Creación de bases de datos y tablas: CREATE DATABASE, CREATE TABLE

Test

Bases de datos y tablas

Test

Consultas básicas de selección SELECT y WHERE

Código

Relaciones entre tablas

Test

Actualización de datos: UPDATE

Código

Creación y uso de procedimientos almacenados

Test

Uso de funciones agregadas: COUNT, SUM, AVG, MAX, MIN

Test

Uso de índices y particiones

Test

Sentencias INSERT

Código

Creación y uso de subqueries

Test

Clasificación de resultados con ORDER BY

Test

Creación y manejo de usuarios y roles

Test

Vaciar tablas y bases de datos: DROP

Test

Consultas básicas de selección: SELECT y WHERE

Test

Creación de bases de datos y tablas

Código

Asignación y gestión de permisos

Test

Optimización de consultas

Test

Copias de seguridad y restauración de bases de datos

Test

Filtrado de grupos de resultados con HAVING

Test

Eliminación de datos: DELETE

Test

Inserción de datos: INSERT INTO

Test

Instalación de PostgreSQL

Test

Actualización de datos: UPDATE

Test

Renombrar tablas y bases de datos: RENAME

Test

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

Ver todos los módulos de SQL

Otras tecnologías

Vue.js
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

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.

Spring Boot
SpringBoot

SpringBoot

Backend

Framework para desarrollo rápido de aplicaciones Java.

NestJS
Nest

Nest

Backend

Framework Node.js para crear aplicaciones escalables y eficientes.

Git
Git

Git

DevOps

Sistema de control de versiones distribuido.

React
React

React

Frontend

Librería framework para frontend interfaces de usuario.

Docker
Docker

Docker

DevOps

Plataforma de contenedores para aplicaciones portátiles.

Go
Go

Go

Backend

Lenguaje de programación eficiente y concurrente creado por Google.

Tailwind CSS
TailwindCSS

TailwindCSS

Frontend

Framework de utilidades CSS para diseños rápidos y personalizables.

Kotlin
Kotlin

Kotlin

Backend

Lenguaje de programación moderno y seguro para aplicaciones Android.

HTML5
HTML

HTML

Frontend

Lenguaje de marcado para estructurar contenido web.

NumPy
Numpy

Numpy

Ciencia de Datos e Inteligencia artificial

Biblioteca Python para computación científica y matrices.

GNU Bash
Bash

Bash

Administración de sistemas

Intérprete de comandos para sistemas Unix y Linux.

2022-09-27T22:26:51.030457 image/svg+xml Matplotlib v3.6.0, https://matplotlib.org/
Matplotlib

Matplotlib

Ciencia de Datos e Inteligencia artificial

Biblioteca Python para crear gráficos y visualizaciones.

Acceder a todas las tecnologías