Tema 3 · 3 · SQL con la tabla de estudiantes (carga, CRUD, administración y ejercicios 1 y 2)
Presentación del Tema 3: «CREATE = INSERT», «READ = SELECT» y «UPDATE»; «Carga de BD en SGBD», «Manipulación de datos en SGBD», «Administración de bases de datos desde Adminer» y «Administración de tablas desde Adminer» y «Ejercicio 1» y «Ejercicio 2». Duración: 10 a 15 minutos de carga y comprobaciones, más lo que dediques a los ejercicios. Coste: ninguno propio (usas la RDS y el Adminer que ya tienes encendidos).
Qué vas a hacer
Vas a cargar en tu RDS la base universidad (tabla estudiantes, 48 alumnos) con Adminer y a hacer sobre ella las prácticas de SQL de las diapositivas: altas, consultas, cambios y bajas, administración de bases y tablas, y los ejercicios 1, 2 y 2B. Esta guía no resuelve los ejercicios: explica cómo montar el entorno y cómo comprobar que tus resultados son los esperados (cada bloque de ejercicios.txt trae el resultado esperado en comentarios), pero no las sentencias que debes escribir.
tema3_estudiantes.sql ──(SQL command / Import en Adminer)──> RDS: base universidad, tabla estudiantes (48 filas)
ejercicios.txt ────────(copiar y pegar bloque a bloque)────> prácticas CRUD, administración, ejercicios 1, 2 y 2B
Qué se crea en AWS: nada. Todo ocurre dentro de la RDS que ya tienes (bases universidad, y temporalmente prueba).
Qué contiene esta carpeta
| Fichero | Para qué sirve | En qué paso se usa |
|---|---|---|
tema3_estudiantes.sql |
Crea la base universidad y la tabla estudiantes (columnas id, nombre, apellidos, grupo, num_convocatoria y derecho_a_examen) con 48 registros |
Paso 1 |
ejercicios.txt |
SQL para copiar y pegar si los bloques de las diapositivas dan error, con el resultado esperado en comentarios: CRUD, administración, columna nota, ejercicios 1, 2 y 2B. Su primera línea explica que PowerPoint mete caracteres no imprimibles |
Pasos 3 a 7 |
README.md |
Esta guía | Siempre |
Antes de empezar
- [ ] La RDS MariaDB en estado
Available(03.01). - [ ] Adminer desplegado y conectado a tu RDS (03.02). Si lo apagó el autoapagado, arráncalo de nuevo (la IP habrá cambiado).
- [ ] Los ficheros
.sqly.txtestán en tu PC (no en CloudShell): ábrelos con un editor de texto (Bloc de notas, VS Code...), no con Word ni con Excel.
Cómo llevar los ficheros a donde toque
No hace falta CloudShell. Abre cada fichero en tu PC con un editor de texto, copia el contenido y pégalo en Adminer (SQL command), o súbelo con Import (para .sql). Los ficheros no se ejecutan en tu PC.
Paso a paso
Paso 1. Cargar tema3_estudiantes.sql.
- En el menú de la izquierda de Adminer, pulsa SQL command.
- Abre
tema3_estudiantes.sqlen tu PC, copia todo el contenido, pégalo en el cuadro y pulsa Execute. Alternativa: Import > elige el fichero > Execute.
El fichero crea la base universidad (si no existe), la tabla estudiantes e inserta los registros.
Qué verás: la ejecución termina sin mensajes de error en rojo. Comprueba que está cargado: abre el desplegable de bases de datos, elige universidad (en minúscula), pulsa la tabla estudiantes y luego select data: deben salir 48 registros. O lanza:
USE universidad;
SELECT COUNT(*) FROM estudiantes;
Debe devolver 48. Si lo ejecutas dos veces, el fichero no borra nada antes de insertar, así que tendrás los registros duplicados (96, con ids nuevos). Si quieres volver a empezar de cero, elimina la base y vuelve a cargar el fichero (perderás los cambios que hayas hecho): DROP DATABASE universidad;.
Paso 2. Cómo usar ejercicios.txt. Está en el orden de las diapositivas. Pega los bloques de uno en uno en SQL command y pulsa Execute; lee qué hace cada sentencia antes de lanzarla. Todas las sentencias terminan en ; (si pegas dos sentencias seguidas sin ; entre ellas, MariaDB las lee como una sola y da Error 1064). Las líneas que empiezan por -- o # son comentarios y se pueden pegar. Cada bloque trae en comentarios el resultado esperado: cifras que debes obtener. Si tras pegar desde la diapositiva sale un error raro, copia el bloque de este fichero en su lugar. Si te saltas un ejercicio, salta también lo que depende de él.
Paso 3. Ejemplos CRUD. En Adminer puedes editar filas con la interfaz (select data > edit) o lanzar SQL. El SQL de apoyo está en el bloque Ejemplos CRUD de ejercicios.txt (INSERT, SELECT, UPDATE, DELETE).
Qué verás (según el propio fichero): 49 filas tras el INSERT (Ana tiene el id 49), 4 con apellido Ruiz y, al final, 48 filas (A 14, B 15, C 19). Si el INSERT con id 70 te dio curiosidad: dejaría el AUTO_INCREMENT en 71 (los ids siguientes serían 71, 72...); no hace falta para ningún ejercicio.
Paso 4. Administración de bases de datos y tablas. Bloque Administracion de ejercicios.txt (en Adminer, SQL command): crea y borra una base de prueba sin tocar universidad, y añade y quita una columna y una tabla de prueba.
Qué verás: en la lista de bases de datos, la columna Collation de prueba pasa de latin1_swedish_ci (el valor por defecto de la RDS) a utf8mb4_general_ci; SELECT COUNT(*), COUNT(correo) FROM estudiantes; da 48 y 0 (correo es NULL en todas las filas); al terminar, estudiantes sigue con 48 filas y sus 6 columnas (id, nombre, apellidos, grupo, num_convocatoria, derecho_a_examen). Estas sentencias no se pueden deshacer con ROLLBACK. No borres universidad: la usan los ejercicios siguientes.
Paso 5. Columna nota y ejemplos de CRUD. Los ejemplos de INSERT, SELECT y UPDATE de la presentación (apartados «CREATE = INSERT», «READ = SELECT» y «UPDATE») usan una columna nota que no existe en tema3_estudiantes.sql: sin ella dan Error (1054): Unknown column 'nota'. La crea el ALTER TABLE de la presentación (ALTER TABLE estudiantes ADD nota int(2) NULL DEFAULT 5;). Ejecútalo primero, una sola vez (si lo repites da 1060 Duplicate column name, inofensivo). Está en el bloque Columna nota de ejercicios.txt.
Ojo: esos tres ejemplos cambian datos de verdad. Si los ejecutas tal cual, el INSERT deja una fila más (Elena Fernández) y el UPDATE sube 14 notas, y las comprobaciones de después (50 filas tras el ejercicio 3, A 14 / B 13 / C 23) ya no cuadran. Por eso ejercicios.txt trae los tres ejemplos dentro de START TRANSACTION ... ROLLBACK, para no cambiar tus datos: pruébalos así, o ejecuta el ROLLBACK tú mismo (las diapositivas ya lo avisan en el cuadro amarillo). El bloque entero debe ir en una sola ejecución de Adminer.
Qué verás (tras el CRUD del paso 3): el SELECT de la presentación devuelve 10 filas (todas con nota 5: empates) y el UPDATE cambia 14 filas si ya has hecho el INSERT y 13 si no (Ana Domingo, la del INSERT, tiene derecho_a_examen vacío y no entra). Tras el ROLLBACK, todo queda como estaba (nota = 5 en todas las filas, 48 alumnos).
Paso 6. Ejercicio 1. Bloque Ejercicio 1: escribe tu consulta (el enunciado está en la diapositiva) y compara.
Qué verás: 4 filas: Carlos, Hugo, Mario y Paula. Si no sale ninguna, comprueba que has elegido la base universidad; también vale ... WHERE apellidos LIKE 'Ru%' ORDER BY nombre;.
Paso 7. Ejercicio 2. Primero comprueba cuántas filas vas a tocar y solo entonces modifica.
Qué verás: el SELECT previo da 7 filas; el UPDATE informa 4 rows affected (y no 7: el motor solo cuenta las filas que cambian de verdad; los David que ya estaban en el grupo C no se cuentan, 7 − 4 = 3); la comprobación final por grupos da A 12, B 13, C 23.
Paso 8. Ejercicio 2B (contar, agrupar y relacionar). Bloque Ejercicio 2B: COUNT, GROUP BY, HAVING, subconsulta con NOT IN y JOIN.
Qué verás (cifras «tras los ejercicios 1 y 2», antes del ejercicio 3 de 03.04): COUNT(*) 48; A 12, B 13, C 23; HAVING > 3: Molina 5, Dominguez 4, Fernandez 4, Ruiz 4; NOT IN: Carlos, Lucia, Luis, Mario, Pablo. Si ya has hecho el ejercicio 3 (dos altas en el grupo A) saldrán 50 filas, A 14 y, en el NOT IN, 7 nombres (los 5 anteriores más los de tus dos alumnos nuevos): es lo correcto, no un error. El JOIN necesita la base paises del ejercicio 4 (actividad 03.05): va comentado en el fichero; quita los -- cuando hayas hecho ese ejercicio. Resultado esperado: Spain Sur, Italy Norte, France Centro, Greece Sur, Austria Centro.
Errores frecuentes
| Síntoma | Causa | Solución |
|---|---|---|
| Error al pegar un bloque desde el PowerPoint | PowerPoint mete caracteres no imprimibles | Copia el bloque de ejercicios.txt |
Error al pegar dos sentencias seguidas (Error 1064) |
Falta algún ; entre ellas |
Termina cada sentencia con ; o lánzalas de una en una |
Registros duplicados (96) tras cargar tema3_estudiantes.sql dos veces |
El fichero no borra antes de insertar | DROP DATABASE universidad; y carga el fichero una sola vez |
Error (1054): Unknown column 'nota' al probar la presentación |
La columna nota no existe hasta el ALTER TABLE de la presentación |
Ejecuta ese ALTER TABLE primero (paso 5) |
1060 Duplicate column name 'nota' |
Ya habías creado la columna y repites el ALTER TABLE |
Inofensivo: la columna ya está |
El SELECT del ejercicio 1 no devuelve filas |
Elegiste otra base de datos | USE universidad; (en minúscula) |
| Los números de los ejercicios no cuadran (por ejemplo, A 14 en vez de A 12) | Ejecutaste la presentación sin ROLLBACK, o repetiste un INSERT |
Si no puedes arreglarlo a mano, DROP DATABASE universidad; y vuelve a cargar el fichero |
Adminer rechaza el fichero por tamaño (Maximum allowed file size) |
Adminer con los límites de PHP por defecto | Ver «Errores frecuentes» de 03.02 (estos ficheros pesan unos KB, así que no debería pasar con los scripts actuales) |
Limpieza
En esta actividad no hay nada que borrar en AWS: todo es SQL dentro de tu RDS. No borres universidad: la necesitan las actividades 03.04 y 03.06. Si quieres empezar de cero, DROP DATABASE universidad; y vuelve a cargar tema3_estudiantes.sql.
La RDS y Adminer se borran al final del tema: Adminer en la limpieza de 03.02 y la RDS en la de 03.01, después de la última actividad que las use (03.09).
Cómo sabes que has terminado
- [ ]
tema3_estudiantes.sqlcargado: la baseuniversidadtiene la tablaestudiantescon 48 registros al empezar. - [ ] Has hecho las prácticas de la presentación:
universidad.estudiantessigue con 48 filas y sin la columnacorreo, y la basepruebaya no existe. - [ ] La tabla tiene la columna
nota(valor por defecto 5) y los ejemplos de la presentación los probaste conROLLBACK. - [ ] Ejercicio 1: 4 filas. Ejercicio 2:
4 rows affectedy grupos A 12 / B 13 / C 23. - [ ] (Opcional) Ejercicio 2B con las cifras indicadas.
Anterior: 03.02 · Adminer · Siguiente: 03.04 · Web app propia y ejercicio 3 (exportar e importar)