¿Qué es SQL?
En esta lección
SQL (Structured Query Language, “lenguaje de consultas estructurado”) es el lenguaje para trabajar con bases de datos relacionales. Casi todas las aplicaciones guardan sus datos en una: los usuarios de una red social, los productos de una tienda, las notas de un instituto o los préstamos de una biblioteca. En esta lección verás qué es exactamente una base de datos, cómo se organizan los datos en tablas, qué partes tiene SQL y cómo preparar tu ordenador para practicar.
Con SQL puedes:
- Consultar datos: “dame los clientes de Santander”.
- Añadir, cambiar y borrar datos.
- Crear tablas y definir cómo se relacionan.
- Controlar quién puede ver o cambiar cada cosa.
Base de datos y SGBD
Una base de datos es un conjunto de datos organizados y relacionados entre sí: todos los clientes, pedidos y productos de una tienda, por ejemplo. Podrías guardar eso en un archivo de texto o en una hoja de cálculo, pero en cuanto crece aparecen problemas. ¿Qué pasa si dos personas cambian el mismo dato a la vez? ¿Cómo buscas un cliente entre un millón sin leerlos todos? ¿Cómo evitas que alguien escriba “veinte” en la columna de la edad?
De todo eso se encarga el SGBD (sistema gestor de bases de datos, en inglés DBMS): el programa que guarda los datos en disco, los protege, los busca rápido y atiende a muchos usuarios a la vez. MySQL, PostgreSQL o SQLite son SGBD. Tú no tocas los archivos directamente: le envías instrucciones en SQL y el SGBD hace el trabajo.
Tu aplicación o tú ──SQL──▶ SGBD (MySQL, PostgreSQL...) ──▶ archivos en disco
◀─filas──
El modelo relacional
Hay varias formas de organizar datos. La más usada desde hace más de cuarenta años es el modelo relacional, que guarda todo en tablas, parecidas a una hoja de cálculo:
- Cada columna es un dato con un tipo concreto:
nombre(texto),edad(número entero),fecha(fecha)… - Cada fila (o registro) es un elemento: un cliente, un pedido.
- Cada tabla tiene un nombre y guarda un solo tipo de cosa: los clientes en una, los pedidos en otra.
Las tablas se relacionan entre sí mediante columnas que comparten valores, como verás enseguida. De ahí el nombre.
Las tablas del curso
En todas las lecciones usaremos estas dos tablas de una tienda online.
clientes
| id | nombre | ciudad | edad |
|---|---|---|---|
| 1 | Ana García | Santander | 34 |
| 2 | Luis Pérez | Bilbao | 22 |
| 3 | Marta Ruiz | Santander | 45 |
| 4 | Pablo Díaz | Madrid | 17 |
| 5 | Eva Martín | Madrid | 29 |
pedidos
| id | cliente_id | fecha | importe |
|---|---|---|---|
| 1 | 1 | 2026-09-01 | 45.00 |
| 2 | 3 | 2026-09-03 | 120.50 |
| 3 | 1 | 2026-09-10 | 12.99 |
| 4 | 2 | 2026-09-12 | 60.00 |
| 5 | 5 | 2026-09-15 | 33.25 |
Claves primarias y foráneas
- La columna
idde cada tabla es la clave primaria (primary key): un número único que identifica cada fila. No puede haber dos clientes con el mismo id. - La columna
cliente_iddepedidoses una clave foránea (foreign key): guarda el id del cliente que hizo el pedido. Así se relacionan las dos tablas. El pedido 2 es de Marta, porque sucliente_ides 3.
En lugar de copiar el nombre y la ciudad del cliente en cada pedido, se guarda solo su id. Si Marta cambia de ciudad, se cambia en un único sitio y todos sus pedidos siguen siendo correctos. Esta idea de no repetir datos es la base del buen diseño de bases de datos.
Además, la clave foránea protege los datos: la base de datos no te dejará guardar un pedido con cliente_id = 99 si no existe el cliente 99. Lo verás en claves y restricciones.
Así se crean estas tablas
Lo verás con calma en CREATE TABLE, pero aquí tienes el script completo. Cópialo en tu herramienta para tener las mismas tablas que en el curso:
CREATE TABLE clientes (
id INT PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
ciudad VARCHAR(50),
edad INT
);
CREATE TABLE pedidos (
id INT PRIMARY KEY,
cliente_id INT,
fecha DATE,
importe DECIMAL(10, 2),
FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);
INSERT INTO clientes (id, nombre, ciudad, edad) VALUES
(1, 'Ana García', 'Santander', 34),
(2, 'Luis Pérez', 'Bilbao', 22),
(3, 'Marta Ruiz', 'Santander', 45),
(4, 'Pablo Díaz', 'Madrid', 17),
(5, 'Eva Martín', 'Madrid', 29);
INSERT INTO pedidos (id, cliente_id, fecha, importe) VALUES
(1, 1, '2026-09-01', 45.00),
(2, 3, '2026-09-03', 120.50),
(3, 1, '2026-09-10', 12.99),
(4, 2, '2026-09-12', 60.00),
(5, 5, '2026-09-15', 33.25);
INTes un número entero;VARCHAR(100), un texto de hasta 100 caracteres;DATE, una fecha;DECIMAL(10, 2), un número exacto con dos decimales, ideal para dinero.NOT NULLobliga a que el nombre tenga valor.FOREIGN KEY (cliente_id) REFERENCES clientes(id)declara la relación entre las tablas.
Nota: la clave foránea también se puede escribir dentro de la columna:
cliente_id INT REFERENCES clientes(id). Es SQL estándar y funciona en PostgreSQL y SQLite, pero MySQL 8 la acepta sin aplicarla: no da error y tampoco comprueba nada (MySQL 9 ya la aplica). Por eso aquí usamos la formaFOREIGN KEY (...)al final de la tabla, que funciona en todos.
Si quieres volver a empezar después de hacer pruebas que cambian los datos, borra las tablas (DROP TABLE pedidos; DROP TABLE clientes;, en ese orden) y vuelve a ejecutar el script.
SQL y sus sublenguajes
SQL es un lenguaje declarativo: dices qué quieres, no cómo conseguirlo. No escribes bucles para recorrer filas; escribes “dame los clientes de Santander” y el SGBD decide la forma más rápida de buscarlos.
SELECT nombre, edad
FROM clientes
WHERE ciudad = 'Santander';
| nombre | edad |
|---|---|
| Ana García | 34 |
| Marta Ruiz | 45 |
Las instrucciones de SQL se agrupan en cinco familias según para qué sirven:
| Sublenguaje | Para qué sirve | Instrucciones | Lección |
|---|---|---|---|
| DQL (Data Query Language) | Consultar datos | SELECT | SELECT |
| DML (Data Manipulation Language) | Añadir, cambiar y borrar filas | INSERT, UPDATE, DELETE | INSERT, UPDATE y DELETE |
| DDL (Data Definition Language) | Crear y cambiar la estructura | CREATE, ALTER, DROP, TRUNCATE | CREATE TABLE |
| DCL (Data Control Language) | Dar y quitar permisos | GRANT, REVOKE | Usuarios y permisos |
| TCL (Transaction Control Language) | Confirmar o deshacer cambios | COMMIT, ROLLBACK, SAVEPOINT | Transacciones |
Algunos libros meten SELECT dentro del DML. No importa mucho: lo útil es distinguir qué instrucciones leen, cuáles cambian datos y cuáles cambian la estructura.
Sistemas gestores más usados
SQL es un estándar (ISO), pero cada SGBD añade sus propias funciones y tiene pequeñas diferencias. Los más conocidos:
| Sistema | Tipo | Dónde lo encontrarás |
|---|---|---|
| MySQL | Libre (de Oracle) | Webs y aplicaciones PHP, WordPress, hosting compartido |
| MariaDB | Libre | Una copia de MySQL casi idéntica; viene en XAMPP y en muchas distribuciones Linux |
| PostgreSQL | Libre | Aplicaciones modernas, datos complejos, empresas y startups |
| SQLite | Libre | Un solo archivo, sin servidor: móviles, navegadores, programas de escritorio |
| SQL Server | Comercial (Microsoft) | Empresas que trabajan con tecnologías de Microsoft |
| Oracle Database | Comercial | Bancos, administraciones y grandes empresas |
¿Cuál aprender? Si estudias Desarrollo de Aplicaciones Web o empiezas desde cero, MySQL (o MariaDB) es la mejor opción: es gratis, es el más usado en la web y es el que suelen pedir en los ciclos formativos. Este curso usa SQL estándar que funciona en MySQL y MariaDB, y cuando algo cambia en PostgreSQL o SQLite te lo indicamos en una nota. Lo que aprendas sirve para todos: pasar de uno a otro es cuestión de días.
Cómo practicar
Aprender SQL es escribir consultas. Tienes varias opciones:
- XAMPP: instala MariaDB (compatible con MySQL) junto con Apache y PHP, e incluye phpMyAdmin, una web para gestionar la base de datos. Es lo habitual en clase.
- MySQL Community Server + MySQL Workbench: la instalación oficial de MySQL y su programa gráfico para escribir consultas y ver tablas.
- DBeaver: un cliente gratuito que se conecta a MySQL, PostgreSQL, SQLite y casi cualquier otro. Muy práctico si trabajas con varios.
- SQLite + DB Browser for SQLite: sin servidor ni contraseñas. Creas un archivo y a practicar.
- Webs online, sin instalar nada: sqliteonline.com o db-fiddle.com. Pegas el script de arriba y escribes tus consultas.
Consejo: para las primeras lecciones, una web online es suficiente. Cuando llegues a usuarios y permisos o transacciones, te conviene un MySQL instalado de verdad.
Reglas de escritura
SQL es bastante flexible, pero hay unas cuantas reglas y costumbres que conviene aprender desde el principio:
-- Nombre y ciudad de los clientes de Santander
SELECT nombre, ciudad
FROM clientes
WHERE ciudad = 'Santander'; /* los textos van
entre comillas simples */
- Mayúsculas por costumbre. Las palabras de SQL (
SELECT,FROM,WHERE) no distinguen mayúsculas:select nombre from clientesfunciona igual. Aun así, se escriben en MAYÚSCULAS y los nombres de tablas y columnas en minúsculas para que la consulta se lea de un vistazo. - Punto y coma al final. El
;marca dónde termina cada instrucción. Si ejecutas varias seguidas es obligatorio, así que acostúmbrate a ponerlo siempre. - Espacios y saltos de línea libres. Puedes escribir la consulta en una línea o repartirla en varias. Lo habitual es poner cada parte (
SELECT,FROM,WHERE) en su línea. - Comillas simples para textos y fechas:
'Santander','2026-09-01'. Los números van sin comillas:edad > 30. Las comillas dobles se reservan para nombres de columnas en el estándar, y MySQL las acepta para textos, pero no es portable. - Comentarios:
--comenta hasta el final de la línea (en MySQL, detrás de--debe ir un espacio) y/* ... */comenta varias líneas.
Cuidado: aunque las palabras clave no distinguen mayúsculas, los datos sí pueden hacerlo.
WHERE ciudad = 'santander'puede no encontrar nada, según el sistema y su configuración: en MySQL normalmente encuentra a Ana y Marta, pero en PostgreSQL y SQLite no devuelve ninguna fila.
Errores frecuentes
- Usar comillas en los números:
edad > '30'a veces funciona por conversión automática, pero compara de forma poco fiable. Números sin comillas. - Olvidar el
;al ejecutar varias instrucciones: el SGBD las junta y da un error de sintaxis. - Confundir la base de datos con la tabla: una base de datos (
tienda) contiene muchas tablas (clientes,pedidos). - Guardar datos repetidos en lugar de relacionar tablas: copiar el nombre del cliente en cada pedido acaba con datos contradictorios.
Resumen
| Concepto | Qué es |
|---|---|
| Base de datos | Conjunto de datos organizados y relacionados |
| SGBD | El programa que los gestiona: MySQL, PostgreSQL, SQLite… |
| Tabla, fila, columna | Dónde se guardan los datos, cada registro y cada dato |
| Clave primaria | Columna que identifica cada fila de forma única (id) |
| Clave foránea | Columna que apunta a la clave primaria de otra tabla (cliente_id) |
| DQL, DML, DDL, DCL, TCL | Consultar, modificar datos, estructura, permisos y transacciones |
| Reglas de escritura | Palabras clave en mayúsculas, ; al final, comillas simples, -- y /* */ |
En la siguiente lección escribirás tu primera consulta de verdad con SELECT.
Pon a prueba lo que has aprendido
¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.