Saltar al contenido
introduccion.sql · devschool

¿Qué es SQL?

Lección 1 de 22 · 11 min de lectura · Actualizado el

En esta lección
  1. Base de datos y SGBD
  2. El modelo relacional
  3. Las tablas del curso
  4. Claves primarias y foráneas
  5. Así se crean estas tablas
  6. SQL y sus sublenguajes
  7. Sistemas gestores más usados
  8. Cómo practicar
  9. Reglas de escritura
  10. Errores frecuentes
  11. Resumen

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

idnombreciudadedad
1Ana GarcíaSantander34
2Luis PérezBilbao22
3Marta RuizSantander45
4Pablo DíazMadrid17
5Eva MartínMadrid29

pedidos

idcliente_idfechaimporte
112026-09-0145.00
232026-09-03120.50
312026-09-1012.99
422026-09-1260.00
552026-09-1533.25

Claves primarias y foráneas

  • La columna id de 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_id de pedidos es 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 su cliente_id es 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);
  • INT es 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 NULL obliga 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 forma FOREIGN 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';
nombreedad
Ana García34
Marta Ruiz45

Las instrucciones de SQL se agrupan en cinco familias según para qué sirven:

SublenguajePara qué sirveInstruccionesLección
DQL (Data Query Language)Consultar datosSELECTSELECT
DML (Data Manipulation Language)Añadir, cambiar y borrar filasINSERT, UPDATE, DELETEINSERT, UPDATE y DELETE
DDL (Data Definition Language)Crear y cambiar la estructuraCREATE, ALTER, DROP, TRUNCATECREATE TABLE
DCL (Data Control Language)Dar y quitar permisosGRANT, REVOKEUsuarios y permisos
TCL (Transaction Control Language)Confirmar o deshacer cambiosCOMMIT, ROLLBACK, SAVEPOINTTransacciones

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:

SistemaTipoDónde lo encontrarás
MySQLLibre (de Oracle)Webs y aplicaciones PHP, WordPress, hosting compartido
MariaDBLibreUna copia de MySQL casi idéntica; viene en XAMPP y en muchas distribuciones Linux
PostgreSQLLibreAplicaciones modernas, datos complejos, empresas y startups
SQLiteLibreUn solo archivo, sin servidor: móviles, navegadores, programas de escritorio
SQL ServerComercial (Microsoft)Empresas que trabajan con tecnologías de Microsoft
Oracle DatabaseComercialBancos, 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 clientes funciona 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

ConceptoQué es
Base de datosConjunto de datos organizados y relacionados
SGBDEl programa que los gestiona: MySQL, PostgreSQL, SQLite…
Tabla, fila, columnaDónde se guardan los datos, cada registro y cada dato
Clave primariaColumna que identifica cada fila de forma única (id)
Clave foráneaColumna que apunta a la clave primaria de otra tabla (cliente_id)
DQL, DML, DDL, DCL, TCLConsultar, modificar datos, estructura, permisos y transacciones
Reglas de escrituraPalabras 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

[SQL] ¿A qué sublenguaje de SQL pertenecen GRANT y REVOKE?

[SQL] En la tabla pedidos, ¿qué papel tiene la columna cliente_id?
CREATE TABLE pedidos (
  id INT PRIMARY KEY,
  cliente_id INT,
  fecha DATE,
  importe DECIMAL(10, 2),
  FOREIGN KEY (cliente_id) REFERENCES clientes(id)
);

¿Te ha quedado claro? Márcala y verás tu progreso en el explorador.