SET SQL_SAFE_UPDATES=0;

/*************ACTUALIZACIONES EN TABLAS MÚLTIPLES***************/

/*Actualizando un dato que no es referencia*/
UPDATE uea SET creditos = 6 WHERE clave = '1151023';

/*Actualizar una llave foránea de una tabla dependiente*/
UPDATE alumno_uea SET uea_clave = '1000000'; -- Error por la relación con la llave foránea

/*Actualizar una llave foránea de una tabla dependiente*/
UPDATE alumno SET licenciatura_clave = '101112' WHERE matricula  = '10123'; -- Éxito por que el valor existe

/*Actualizar una llave que es referencia en una tabla dependiente*/
/*Como se tenía que al actualizar se presentaba un comportamiento en cascada, se actualiza en las tablas dependientes*/
SELECT * FROM alumno;
UPDATE licenciatura SET clave = '101121' WHERE clave = '101112';
SELECT * FROM alumno;

/*************ELIMINACIONES EN TABLAS MÚLTIPLES***************/

/*Eliminar una fila que tiene tiene una llave foránea*/
DELETE FROM licenciatura WHERE clave = '101121'; -- No se puede borrar la licenciatura
DELETE FROM alumno WHERE matricula = '89012'; -- Se puede borrar un alumno y la relación uea-alumno desaparece
DELETE FROM uea WHERE clave = '1151023'; -- No se puede borrar la uea, la relación uea-alumno la utiliza


/***************ACTUALIZACIÓN CON CLAÚSULA WHERE***********************/

/*Cambiar el nombre del alumno a "Calculo 2" de aquellos alumnos que están cursando Cálculo 2 (1110012) 
y que estudian Ingeniería en Computación (101121)*/

SELECT alumno.matricula,alumno.primer_apellido,alumno.segundo_apellido,alumno.nombre FROM alumno,alumno_uea
WHERE alumno_uea.uea_clave = '1110012' AND  alumno_uea.alumno_matricula=alumno.matricula 
AND alumno.licenciatura_clave  = '101121';


-- Error por que MySQL no permite actualizar una tabla que se encuentra dentro de una sentencia FROM
UPDATE alumno SET alumno.nombre = 'Cálculo 2' WHERE alumno.matricula IN 
(SELECT alumno.matricula FROM alumno,alumno_uea
 WHERE alumno.matricula = alumno_uea.alumno_matricula
 AND alumno_uea.uea_clave = '1110012'
AND alumno.licenciatura_clave = '101121');

-- Versión funcional por qué ya no se tiene la tabla alumno en el FROM
-- Se accede a ella a través de la llamada en el UPDATE
UPDATE alumno SET alumno.nombre = 'Cálculo 2' WHERE alumno.matricula = 
(SELECT alumno.matricula FROM alumno_uea
 WHERE alumno.matricula = alumno_uea.alumno_matricula
 AND alumno_uea.uea_clave = '1110012'
AND alumno.licenciatura_clave = '101121');

-- Versión funcional por qué ya no se tiene la tabla alumno en el FROM
-- Se accede a ella a través de la llamada en el UPDATE
-- Se usa IN en lugar de =
UPDATE alumno SET alumno.nombre = 'Cálculo 2' WHERE alumno.matricula IN 
(SELECT alumno.matricula FROM alumno_uea
 WHERE alumno.matricula = alumno_uea.alumno_matricula
 AND alumno_uea.uea_clave = '1110012'
AND alumno.licenciatura_clave = '101121');

/*EJERCICIO*/
/*CAMBIAR A 25 EL NÚMERO DE CRÉDITOS DE LAS UEAS QUE ESTÁN SIENDO CURSADAS POR 
ALGÚN ALUMNO DE INGENIERÍA EN COMPUTACIÓN (101121)*/


SELECT DISTINCT uea.nombre,uea.creditos FROM uea,alumno,alumno_uea WHERE
alumno_uea.uea_clave = uea.clave
AND alumno_uea.alumno_matricula = alumno.matricula
AND alumno.licenciatura_clave = '101121';



UPDATE uea SET uea.creditos = 25 WHERE uea.clave IN (
SELECT DISTINCT uea.clave FROM alumno,alumno_uea WHERE
alumno_uea.uea_clave = uea.clave
AND alumno_uea.alumno_matricula = alumno.matricula
AND alumno.licenciatura_clave = '101121'
);



