DC - FCEyN - UBA BBDD - 2C - 2017
Temario Intro Introducción: breve repaso de la notación de. Una guía de 6 ejercicios que vamos a ir resolviendo. En, luego en y luego en.
Operadores Binarios Unión compatible Unión: R S Intersección: R S Resta: R S Producto Cartesiano:R S División: R S Juntas Inner Join: R c S R S Operadores Unarios Renombra atributos: ρ (a1 a2, b1 b2, R) Renombra una relación: ρ (S, R R) Selección: σ c R Proyección: π atributo R OuterJoin: R S R S R S
Esquema de Relaciones Intro Actor(idActor, nombreactor, edad) Serie(idSerie, nombreserie, idgé.... nero,.... añoinicio, añofin) Género(idGénero, nombregénero) Canal(idCanal, nombrecanal) Participa En( idactor,......... idserie)...... Transmite( idcanal,......... idserie).......
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends. ρ(actor SERIE, PTICIPA EN ACTOR SERIE) ρ(friends MAY 30, σ nombreserie= Friends edad>30(actor SERIE)) ρ(resultado, π nombreactor (FRIENDS MAY 30))
Listar los nombres de los canales que transmiten todas las series de comedia. ρ(id SERIE COMEDIA, π idserie (σ nombregenero=comedia (SERIE GENERO))) ρ(id CANAL TODAS COMEDIAS, TRANSMITE ID SERIE COMEDIA ρ(resultado, π nombrecanal (ID CANAL TODAS COMEDIAS CANAL)
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además participaron alguna vez en series que comenzaron luego del año 2000. ρ(id ACTOR FR MAY 30, π idactor (σ nombreserie= Friends edad>30 (PTICIPA EN ACTOR SERIE))) ρ(id ACTOR DESP 2000, π idactor (σ añoinicio>2000 (PTICIPA EN SERIE)) ρ(id ACTOR 1 Y 2, ID ACTOR FR MAY 30 ID ACTOR DESP 2000) ρ(resultado, π nombreactor (ID ACTOR 1 Y 2 ACTOR))
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además nunca participaron en series que comenzaron luego del año 2000. Reutilizaremos la relación ID ACTOR FR MAY 30 del ejercicio anterior. Obtendremos un conjunto con los actores que sí participaron en series que se iniciaron luego del 2000 y luego al conjunto de todos los actores le restaremos este conjunto. ρ(id ACTOR DESP 2000, π idactor (σ añoinicio>200 (PTICIPA EN SERIE))) ρ(id ACTOR NO DESP 2000, π idactor (ACTOR) ID ACTOR DESP 2000)) ρ(id ACTOR 1 Y 2, ID ACTOR FR MAY 30 ID ACTOR NO DESP 2000) ρ(resultado, π nombreactor (ID ACTOR 1 Y 2 ACTOR))
Listar los ids de las series que comenzaron más recientemente. ρ(serie1, SERIE) ρ(serie2, SERIE) Obtenemos series que no son mas recientes y luego restamos ρ(id SERIE INICIO NO MAS RECIENTE, π SERIE1.idSerie ( σ SERIE1.añoInicio<SERIE2.añoInicio (SERIE1 SERIE2)) ρ(resultado, π idserie (SERIE) ID SERIE INICIO NO MAS RECIENTE)
Listar los ids de los actores que participaron en al menos 2 series. ρ(p1, PTICIPA EN) ρ(p2, PTICIPA EN) ρ(resultado, π idactor (σ P1.idActor=P2.idActor P1.idSerie P2.idSerie (P1 P2))
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends. {t/ a, s, p(a ACTOR a.edad > 30 s SERIE s.nombreserie = Friends p PTICIPA EN p.idactor = a.idactor p.idserie = s.idserie t.nombreactor = a.nombreactor)}
Listar los nombres de los canales que transmiten todas las series de comedia. {t/ c(c CANAL t.nombrecanal = c.nombrecanal s (esseriecomedia(s) = tra(tra TRANSMITE tra.idcanal = c.idcanal tra.idserie = s.ideserie))} Definimos esseriecomedia como: esseriecomedia(s) = s SERIE g(g GENERO g.idgenero = s.idgenero g.nombregenero = Comedia )
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además participaron alguna vez en series que comenzaron luego del año 2000. {t/ a(a ACTOR mayorde30yenfriends(a) actuodesp2000(a) t.nombreactor = a.nombreactor)} mayorde30yenfriends(a) = a.edad > 30 s, p(s SERIE s.nombreserie = Friends p PATICIPA EN p.idactor = a.idactor p.idserie = s.idserie) actuodesp2000(a) = s, p(s SERIE s.añoinicio > 2000 p PTICIPA EN p.idactor = a.idactor p.idserie = s.idserie)
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además nunca participaron en series que comenzaron luego del año 2000. {t/ a(a ACTOR mayorde30yenfriends(a) nuncaenseriedesp2000(a) t.nombreactor = a.nombreactor)} nuncaenseriedesp2000(a) = s(s SERIE s.añoinicio > 2000 p(p PTICIPA EN p.idactor = a.idactor p.idserie = s.idserie)
Listar los ids de las series que comenzaron más recientemente. {t/ s(s Serie t.idserie = s.idserie iniciomasreciente(s))} Inicio más reciente indica que son aquellas tales que no haya otra que comenzó después. iniciomasreciente(s) = s (s SERIE s.añoinicio>s.añoinicio)
Listar los ids de los actores que participaron en al menos 2 series. {t/ a(a ACTOR t.idactor = a.idactor partenalmenosdosseries(a))} Debería haber 2 tuplas diferentes en PTICIPA EN para el mismo actor partenalmenosdosseries(a) = p, p (p PTICIPA EN p PTICIPA EN p p p.idactor = a.idactor p.idactor = a.idactor)
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends. 1 SELECT a.nombreactor 2 FROM actor a 3 INNER JOIN participa_en p ON a.idactor = p.idactor 4 INNER JOIN serie s ON p.idserie = s.idserie 5 WHERE a.edad > 30; 6 AND s.nombreserie = "Friends";
Listar los nombres de los canales que transmiten todas las series de comedia. A simpler (and better) approach to relational division. Q0: 1 SELECT c.nombrecanal FROM canal c WHERE c.idcanal IN ( 2 SELECT t.idcanal 3 FROM Transmite t 4 INNER JOIN Serie s ON t.idserie = s. idserie 5 INNER JOIN Genero g ON g.idgenero = s.idgenero 6 WHERE g.nombregenero = Comedia 7 GROUP BY t.idcanal 8 HAVING COUNT( ) = 9 ( SELECT count( ) 10 FROM serie s 11 INNER JOIN Genero g ON g.idgenero = s.idgenero 12 WHERE g.nombregenero = Comedia ));
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además participaron alguna vez en series que comenzaron luego del año 2000. 1 SELECT a.nombreactor 2 FROM actor a 3 INNER JOIN participa_en pe ON pe.idactor = a.idactor 4 INNER JOIN serie s ON s.idserie = pe.idserie 5 WHERE s.nombreserie = "Friends" 6 AND a.edad > 30 7 AND EXISTS (SELECT aa.idactor FROM actor aa 8 INNER JOIN participa_en ppe ON ppe.idactor = aa.idactor 9 INNER JOIN serie s ON se.idserie = ppe.idserie 10 WHERE aa.idactor = a.idactor 11 AND se.anoinicio > 2000);
Listar los nombres de los actores mayores de 30 años que participan en la serie Friends y que además nunca participaron en series que comenzaron luego del año 2000. 1 SELECT a.nombreactor 2 FROM actor a 3 INNER JOIN participa_en pe ON pe.idactor = a.idactor 4 INNER JOIN serie s ON s.idserie = pe.idserie 5 WHERE s.nombreserie = "Friends" 6 AND a.edad > 30 7 AND NOT EXISTS (SELECT aa.idactor FROM actor aa 8 INNER JOIN participa_en ppe ON ppe.idactor = aa.idactor 9 INNER JOIN serie s ON se.idserie = ppe.idserie 10 WHERE aa.idactor = a.idactor 11 AND se.anoinicio > 2000);
Listar los ids de las series que comenzaron más recientemente. 1 SELECT s.idserie from serie s 2 WHERE s.anoinicio = (Select MAX(anoInicio) from serie);
Listar los ids de los actores que participaron en al menos 2 series. 1 SELECT pe.idactor 2 FROM participa_en pe 3 GROUP BY pe.idactor 4 HAVING COUNT(pe.idSerie) >= 2;