¿Qué es SQL y las Bases de Datos Relacionales?
Entiende SQL, bases de datos relacionales, tablas, filas, columnas, claves primarias y RDBMS populares como MySQL, PostgreSQL y SQLite
¿Qué es SQL y las Bases de Datos Relacionales?
SQL (Structured Query Language) es el lenguaje estándar para gestionar y consultar datos en sistemas de gestión de bases de datos relacionales (RDBMS). Permite crear, leer, actualizar y eliminar datos — a menudo llamadas operaciones CRUD.
¿Qué es una Base de Datos Relacional?
Una base de datos relacional organiza datos en tablas (como hojas de cálculo) donde cada tabla almacena información sobre un tema. Las tablas se relacionan entre sí mediante claves, eliminando redundancia mientras mantienen los datos conectados.
El modelo relacional fue inventado por Edgar F. Codd en IBM en 1970. Revolucionó la forma en que almacenamos y consultamos datos al separar la estructura lógica del almacenamiento físico.
Conceptos Principales
Tablas
Una tabla es una colección de datos relacionados organizados en filas y columnas.
users
| id | name | email | age |
|----|--------|--------------------|-----|
| 1 | Alice | alice@example.com | 30 |
| 2 | Bob | bob@example.com | 25 |
| 3 | Carol | carol@example.com | 28 |
Filas y Columnas
- Columna: Un solo campo (atributo) de datos, como
nameoemail. Las columnas tienen un tipo de dato (texto, número, fecha, etc.). - Fila: Un único registro en una tabla, que representa una entidad (un usuario, un producto, etc.).
Clave Primaria
Una clave primaria identifica de forma única cada fila en una tabla. Toda tabla debería tener una.
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT,
email TEXT
);Una buena clave primaria es única, nunca es nula y nunca cambia. Los enteros autoincrementables son la opción más común.
Clave Foránea
Una clave foránea vincula filas entre tablas, creando relaciones.
CREATE TABLE orders (
id INTEGER PRIMARY KEY,
user_id INTEGER,
total DECIMAL,
FOREIGN KEY (user_id) REFERENCES users(id)
);Sistemas RDBMS Populares
| RDBMS | Tipo | Mejor Para | Licencia |
|---|---|---|---|
| PostgreSQL | Objeto-relacional | Funcionalidades avanzadas, integridad de datos | Open Source |
| MySQL | Relacional | Aplicaciones web, amplio soporte de hosting | Open Source |
| SQLite | Embebido | Apps móviles, almacenamiento local, prototipado | Dominio Público |
| SQL Server | Relacional | Ecosistemas Windows empresariales | Comercial |
| Oracle DB | Relacional | Empresas de gran escala | Comercial |
Cuándo Elegir Cada Uno
- SQLite: Tu proyecto necesita una base de datos ligera y sin servidor (apps móviles, sitios pequeños, desarrollo/pruebas).
- PostgreSQL: Necesitas funciones avanzadas (JSON, búsqueda de texto completo, tipos personalizados, escrituras concurrentes).
- MySQL: Quieres una base de datos web ampliamente alojada y probada (WordPress, e-commerce).
- SQL Server / Oracle: Trabajas en un entorno empresarial con licencias existentes.
Aunque SQL está estandarizado, cada RDBMS tiene su propio dialecto. LIMIT en MySQL/PostgreSQL es TOP en SQL Server y ROWNUM en Oracle. Usa SQL ANSI cuando sea posible.
Tu Primera Consulta SQL
SELECT '¡Hola, Mundo SQL!' AS greeting;Esto devuelve:
| greeting |
|---|
| ¡Hola, Mundo SQL! |
Cómo Fluyen los Datos en un RDBMS
- El cliente envía una consulta SQL (vía app, CLI o GUI).
- El analizador verifica la sintaxis y construye un árbol de análisis.
- El optimizador elige el plan de ejecución más eficiente.
- El ejecutor ejecuta el plan y obtiene/actualiza datos.
- Los resultados se envían de vuelta al cliente.
Caso de Uso Real: Base de Datos de Comercio Electrónico
Una tienda online podría tener tablas como:
customers— quién compraproducts— qué compranorders— cuándo compranorder_items— qué productos en cada pedidocategories— agrupación de productos
En lugar de almacenar el nombre del cliente en cada pedido, cada fila de orders contiene una clave foránea customer_id. Esto evita la duplicación y facilita las actualizaciones — cambia la dirección en un solo lugar.
-- Encuentra todos los pedidos de la cliente Alice
SELECT o.id, o.order_date, o.total
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE c.name = 'Alice';Categorías de Instrucciones SQL
| Categoría | Propósito | Ejemplos |
|---|---|---|
| DDL | Definir estructura | CREATE, ALTER, DROP |
| DML | Manipular datos | SELECT, INSERT, UPDATE, DELETE |
| DCL | Controlar acceso | GRANT, REVOKE |
| TCL | Gestionar transacciones | COMMIT, ROLLBACK, SAVEPOINT |
A lo largo de este curso, usarás DML con más frecuencia. SELECT por sí solo representa ~80% de todo el SQL escrito.
¿Por qué Aprender SQL?
- Universal: Toda empresa tecnológica usa una base de datos. SQL es la puerta de entrada.
- Estable: SQL fue inventado en los años 1970 y sigue siendo el lenguaje de datos nº 1.
- Alto impacto: Una sola consulta puede analizar millones de filas en milisegundos.
- Transferible: Las habilidades se aplican a MySQL, PostgreSQL, SQLite, BigQuery, Snowflake y más.
SQL no es solo para ingenieros. Analistas de datos, gerentes de producto, especialistas en marketing y diseñadores se benefician al consultar datos directamente.
SQL en el Mundo Real
SQL no es solo para ingenieros de backend. Así es como diferentes roles lo usan:
| Rol | Qué Consultan | Por qué |
|---|---|---|
| Analista de Datos | Ventas, comportamiento de usuarios, embudos | Generar informes y paneles |
| Gerente de Producto | Adopción de funciones, retención | Tomar decisiones de producto basadas en datos |
| Marketing | Rendimiento de campañas, segmentos | Optimizar gasto en anuncios y segmentación |
| Ingeniero | Datos de aplicación, logs, métricas | Construir funciones y depurar problemas |
| Finanzas | Ingresos, costos, pronósticos | Cerrar balances y planificar presupuestos |
Ejemplo: Consulta de Marketing
-- Encuentra los 5 principales canales de marketing por tasa de conversión
SELECT
channel,
COUNT(DISTINCT user_id) AS visitors,
COUNT(DISTINCT CASE WHEN purchased THEN user_id END) AS buyers,
ROUND(COUNT(DISTINCT CASE WHEN purchased THEN user_id END) * 100.0 /
COUNT(DISTINCT user_id), 2) AS conversion_pct
FROM campaign_data
WHERE campaign_date >= '2024-01-01'
GROUP BY channel
ORDER BY conversion_pct DESC
LIMIT 5;Configurando Tu Entorno
Para practicar SQL localmente, elige una opción:
- SQLite (más fácil): Instala
sqlite3y abre un archivo.db. - PostgreSQL: Instala, ejecuta
psql, crea una base de datos. - MySQL: Instala, ejecuta
mysql -u root -p. - Online: Usa SQLFiddle, DB Fiddle o SQLite Online.
# SQLite — sin configuración requerida
sqlite3 test.db-- Crea una tabla y consúltala inmediatamente
CREATE TABLE hello (message TEXT);
INSERT INTO hello VALUES ('¡SQL funciona!');
SELECT * FROM hello;Errores Comunes de Principiantes en SQL
- Olvidar el punto y coma: Las instrucciones SQL necesitan un
;al final - Usar
=en lugar deIS NULL:WHERE name = NULLnunca funciona - Mezclar comillas simples y dobles: SQL usa comillas simples para strings
- Omitir WHERE en DELETE/UPDATE: Eliminación masiva accidental
- **SELECT ***: Devuelve datos innecesarios y se rompe con cambios de esquema
Siempre prueba tus consultas en una copia de los datos primero. Un UPDATE o DELETE descontrolado en datos de producción puede causar daños irreversibles.
Preguntas de Práctica
- ¿Qué significa la sigla SQL?
- Nombra tres sistemas RDBMS populares y un caso de uso para cada uno.
- ¿Cuál es la diferencia entre una clave primaria y una clave foránea?
- En la tabla
employees(id, name, department_id, salary), ¿qué columna es probablemente la clave primaria? ¿Cuál es una clave foránea? - ¿Cuáles son las cuatro categorías de instrucciones SQL?
- ¿Por qué se considera SQLite "sin servidor"?
- Verdadero o Falso: SQL es idéntico en todos los sistemas de base de datos.
- ¿Por qué una base de datos de comercio electrónico debería usar claves foráneas en lugar de almacenar nombres de clientes en cada fila de pedido?
- ¿Qué hace el optimizador SQL?
- Enumera cinco industrias o roles donde las habilidades en SQL son valiosas.