TEORÍA SQL
Base de datos = carpeta con documentos.
Tabla = uno de esos documentos con datos organizados en filas y columnas.
SQL lenguaje de programación.
SQL Server, MySQL,… programas que ejecutan SQL.
1. DDL
Existen 3 tipos de comandos en SQL 2. DML
3. DCL
[Link] definen la estructura de la base de datos: crear (CREATE),
modificar (ALTER) o eliminar tablas (DROP).
1. CREATE DATABASE
Crea una nueva base de datos.
Sintaxis: CREATE DATABASE nombre_base;
2. USE
Selecciona la base de datos con la que vas a trabajar (varía según el gestor).
Sintaxis: USE nombre_base;
3. CREATE TABLE
Crea una tabla con columnas, tipos de datos y restricciones.
Sintaxis: CREATE TABLE nombre_tabla ( columna1 tipo_dato restricciones,
columna2 tipo_dato restricciones, ... );
EJEMPLO
CREATE TABLE Libros ( id_libro INT PRIMARY KEY, titulo VARCHAR(100) NOT
NULL, autor VARCHAR(100), anio_publicacion INT, paginas INT, fecha_ingreso
DATE );
4. ALTER TABLE
Modifica una tabla existente (añadir o eliminar columnas).
Sintaxis: ALTER TABLE nombre_tabla ADD nueva_columna tipo;
ALTER TABLE nombre_tabla DROP COLUMN nombre_columna;
5. DROP TABLE
Elimina completamente una tabla (estructura + datos).
Sintaxis: DROP TABLE nombre_tabla;
Tipos de datos más usados Restricciones comunes
TIPO DESCRIPCIÓN RESTRICCIÓN SIGNIFICADO
INT Número entero PRIMARY KEY Identificador único
FLOAT Número decimal NOT NULL No se puede quedar vacío
VARCHAR(n) Texto de hasta n caracteres UNIQUE No se repite
DATE Fecha (YYYY-MM-DD) DEFAULT valor Valor por defecto si no se indica otro
[Link] manipula los datos dentro de las tablas: insertar (INSERT INTO),
actualizar (UPDATE), borrar (DELETE), consultas (SELECT).
1. INSERT INTO
Añade nuevos registros (filas) a una tabla
Sintaxis: INSERT INTO nombre_tabla (columna1, columna2, ...)
VALUES (valor1, valor2, ...);
Se puede insertar varias filas a la vez separándolas por comas.
EJEMPLO
INSERT INTO Estudiantes (id, nombre, edad)
VALUES (1, 'Lucía', 21),
(2, 'Carlos', 22);
2. SELECT
Consulta o visualiza datos almacenados
Sintaxis: SELECT columna1, columna2
FROM nombre_tabla
WHERE condición;
EJEMPLO
SELECT * FROM Estudiantes;
SELECT nombre FROM Estudiantes WHERE edad > 21;
3. UPDATE
Modifica valores existentes
Sintaxis: UPDATE nombre_tabla
SET columna1 = nuevo_valor1, columna2 = nuevo_valor2
WHERE condición;
¡OJO! Siempre con WHERE, si no actualizará todas las filas.
UPDATE Estudiantes
SET edad = 23
WHERE id = 2;
4. DELETE
Elimina registros (filas) de la tabla
Sintaxis: DELETE FROM nombre_tabla
WHERE condición;
¡OJO! También requiere WHERE si no quieres borrar toda la tabla
EJEMPLO
DELETE FROM Estudiantes
WHERE id = 1;
Cláusulas
Las cláusulas son condiciones de modificación utilizadas para definir los datos
que desea seleccionar o manipular.
1. FROM
¿Qué hace?
Indica de qué tabla se van a extraer los datos.
EJEMPLO
SELECT nombre FROM empleados;
→ Selecciona la columna nombre de la tabla empleados.
2. WHERE
¿Qué hace?
Filtra los registros según una condición. Solo devuelve los que cumplen
esa condición.
EJEMPLO:
SELECT * FROM empleados WHERE edad > 30;
→ Devuelve solo los empleados mayores de 30 años.
3. GROUP BY
¿Qué hace?
Agrupa los datos que tienen el mismo valor en una o más columnas,
generalmente para usar funciones de agregación (COUNT, SUM, AVG,
etc.).
EJEMPLO
SELECT departamento, COUNT(*)
FROM empleados
GROUP BY departamento;
→ Agrupa por departamento y cuenta cuántos empleados hay en cada
uno.
4. HAVING
¿Qué hace?
Filtra los grupos creados por GROUP BY.
(No se usa para filas individuales; eso lo hace WHERE).
EJEMPLO
SELECT departamento, COUNT(*)
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 5;
→ Muestra solo los departamentos con más de 5 empleados.
5. ORDER BY
¿Qué hace?
Ordena los resultados.
Por defecto es ascendente (ASC), pero puedes usar descendente (DESC).
EJEMPLO
SELECT nombre, edad
FROM empleados
ORDER BY edad DESC;
→ Muestra los empleados ordenados por edad, de mayor a menor.
Resumen del orden típico de las cláusulas
SELECT columnas
FROM tabla
WHERE condición
GROUP BY columnas
HAVING condición_agregada
COMANDOS (SIEMPRE VAN DENTRO DE SELECT)
1. AVG() — Promedio
Calcula el valor medio (promedio) de una columna numérica.
EJEMPLO
SELECT AVG(salario) FROM empleados;
→ Devuelve el salario promedio de todos los empleados.
2. MAX() — Valor máximo
Devuelve el valor más alto de una columna.
EJEMPLO
SELECT MAX(edad) FROM empleados;
→ Devuelve la edad del empleado más mayor.
3. MIN() — Valor mínimo
Devuelve el valor más bajo de una columna.
EJEMPLO
SELECT MIN(edad) FROM empleados;
→ Devuelve la edad del empleado más joven.
4. COUNT() — Contar registros
Cuenta cuántas filas hay en total o cuántos valores no nulos tiene una columna.
EJEMPLO
SELECT COUNT(*) FROM empleados;
→ Cuenta todos los empleados.
EJEMPLO
SELECT COUNT(salario) FROM empleados;
→ Cuenta cuántos empleados tienen salario no nulo.
5. SUM() — Suma total
Suma todos los valores de una columna numérica.
EJEMPLO
SELECT SUM(salario) FROM empleados;
→ Devuelve la suma total de todos los salarios.
💡 Regla clave:
Cuando use funciones de agregación (MAX, MIN, AVG, COUNT, etc.), cualquier otra
columna que quiera mostrar debe ir en GROUP BY o usar una subconsulta / ORDER BY
con LIMIT.
OPERADORES
AND: es y. Evalúa dos condiciones y devuelve un valor de verdad sólo si ambas son
ciertas.
OR: es o. Evalúa dos condiciones y devuelve un valor de verdad si alguna de las dos es
cierta.
NOT: negación lógica. Devuelve el valor contrario de la expresión.
< Menor que >= Mayor o igual
> Mayor que BETWEEN Intervalo
<> Distinto de LIKE Comparación
<= Menor o igual que In Especificar
MANEJO DE VARIAS TABLAS
1. JOINS
JOIN DESCRIPCIÓN SINTAXIS
INNER Devuelve solo las filas que tienen SELECT * FROM A INNER
JOIN coincidencia en ambas tablas. JOIN B ON [Link] = B.a_id;
LEFT Devuelve todas las filas de la tabla SELECT * FROM A LEFT
JOIN izquierda y las que coinciden de la JOIN B ON [Link] = B.a_id;
derecha
RIGHT Devuelve todas las filas de la tabla SELECT * FROM A RIGHT
JOIN derecha y las que coinciden de la JOIN B ON [Link] = B.a_id;
izquierda
FULL Devuelve filas coincidentes y no SELECT * FROM A FULL
JOIN coincidentes de ambas tablas JOIN B ON [Link] = B.a_id;`
SINTAXIS GENERAL DEL JOIN
SELECT columnas
FROM tabla1
[INNER|LEFT|RIGHT|FULL] JOIN tabla2
ON [Link] = [Link];
Ejemplo práctico con dos tablas
Tablas:
empleados (id, nombre, departamento_id)
departamentos (id, nombre)
Consulta para obtener el nombre del empleado junto con su departamento:
SELECT [Link], [Link] AS departamento
FROM empleados
INNER JOIN departamentos ON empleados.departamento_id =
[Link];
¿Y si quiero combinar más tablas?
Solo agregas más JOIN:
SELECT [Link], [Link] AS departamento, [Link] AS proyecto
FROM empleados e
INNER JOIN departamentos d ON e.departamento_id = [Link]
INNER JOIN proyectos p ON e.proyecto_id = [Link];
Puedes usar alias para abreviar nombres de tablas y que las consultas sean más
claras:
SELECT [Link], [Link]
FROM empleados AS e
JOIN departamentos AS d ON e.departamento_id = [Link];
2. UNION y UNION ALL
¿Qué hacen?
Ambas combinan los resultados de dos o más consultas SELECT en una sola
tabla
Se usan cuando quieres juntar filas de distintas consultas que tienen el mismo
número y tipo de columnas.
Diferencias principales
Comando ¿Qué hace con filas duplicadas?
UNION Elimina filas duplicadas, dejando solo filas únicas.
UNION ALL Devuelve todas las filas, incluidas las duplicadas.
Requisitos para usar UNION o UNION ALL
Las consultas deben tener el mismo número de columnas.
Las columnas deben ser del mismo tipo o compatibles en orden.
Sintaxis básica
SELECT columna1, columna2 FROM tabla1
UNION [ALL]
SELECT columna1, columna2 FROM tabla2;
Ejemplos
Usando UNION (sin duplicados)
SELECT nombre FROM empleados
UNION
SELECT nombre FROM clientes;
→ Devuelve la lista de nombres únicos que están en empleados o en clientes.
Usando UNION ALL (con duplicados)
SELECT nombre FROM empleados
UNION ALL
SELECT nombre FROM clientes;
→ Devuelve todos los nombres, incluso si se repiten entre empleados y clientes.
¿Cuándo usar cada uno?
Usa UNION si quieres evitar duplicados y te interesa solo valores únicos.
Usa UNION ALL si quieres todos los datos, y no te importa que haya duplicados
(es más rápido que UNION).
DIREFENCIAS ENTRE JOINS Y UNION/UNION ALL (TODOS MANEJAN VARIAS TABLAS)
Característica | JOIN | UNION / UNION ALL
¿Qué hace? | Combina **columnas** de dos o más tablas, uniendo filas relacionadas. |
Combina **filas** de dos o más resultados `SELECT`. |
| 🧩 ¿Cómo se combinan? | Horizontalmente (añade columnas) |
Verticalmente (añade filas) |
¿Requiere relación? | Sí, normalmente por una clave común (`ON columna = columna`) |
No necesariamente. |
¿Filas duplicadas? | Las puede mostrar si están relacionadas. | `UNION`:
elimina duplicados.<br>`UNION ALL`: los conserva. |
¿Columnas iguales? | No. Cada tabla puede tener columnas distintas. | Sí. Todas
las consultas deben tener **el mismo número y tipo de columnas**. |
¿Ejemplo típico? | Mostrar datos combinados de empleados y sus departamentos. |
Unir listas de empleados y de clientes en una lista común.
✅ ¿Qué es DB Fiddle?
Es una plataforma online para escribir y ejecutar código SQL. Puedes:
Crear bases de datos.
Crear tablas.
Insertar datos.
Hacer consultas.
Ver resultados inmediatamente.
¿Cómo está organizada la pantalla?
Cuando entras en [Link]:
🔹 Parte izquierda: Schema SQL
Aquí escribes:
CREATE DATABASE (si lo necesitas)
CREATE TABLE
INSERT INTO
Es decir, todo lo necesario para preparar tus datos.
🔸 Ejemplo:
sql
CopiarEditar
CREATE TABLE alumnos (
id INT,
nombre VARCHAR(50)
);
INSERT INTO alumnos VALUES (1, 'Ana'), (2, 'Luis');
🔹 Parte derecha: Query SQL
Aquí escribes las consultas que quieres probar.
SELECT, UPDATE, DELETE, JOIN, etc.
🔸 Ejemplo:
sql
CopiarEditar
SELECT * FROM alumnos;
▶️¿Cómo ejecutar el código?
1. Escribe el código en los dos paneles (izquierda: estructuras / derecha: consultas).
2. Haz clic en el botón “Run” (arriba a la derecha).
3. Abajo verás los resultados de tu consulta.
💡 Consejos útiles
Puedes cambiar el tipo de base de datos (MySQL, PostgreSQL, etc.) arriba a la
izquierda.
Puedes guardar tu trabajo con el botón Save (crea un enlace que puedes
compartir o volver a usar). Se muestra en la barra del navegador y lo copio y lo
guardo donde quiera. Para volver a usarlo lo pego en el navegador.
Si haces cambios en el panel izquierdo, debes pulsar Run otra vez para que se
actualicen las tablas antes de consultar.
🧠 Ejemplo completo para probar
Schema SQL (izquierda):
CREATE TABLE estudiantes (
id INT,
nombre VARCHAR(50),
edad INT
);
INSERT INTO estudiantes VALUES
(1, 'Ana', 21),
(2, 'Luis', 22),
(3, 'María', 20);
Query SQL (derecha):
SELECT * FROM estudiantes WHERE edad > 20;
|