Lenguajes de Consulta Bases de Datos (FCEyN-UBA) Lic. Gerardo Rossel Ejercitación sobre SQL , AR y CRT Ejercicio SQL Dada la siguiente Base de Datos: Obtener mediante SQL el nombre del club y la cantidad de partidos que jugó ese club como local para aquellos clubes que tienen al menos un hincha que asistió a todos los partidos que jugó su club. Cantidad Partidos que jugaron como local SELECT Club.Nombre , COUNT(*) AS CantidadLocal FROM Club,Partido WHERE Club.ClubId = Partido.ClubIdLocal GROUP BY Club.Nombre Bases de Datos - Depto Computación FCEyN UBA 3 No todos los clubes... SELECT Club.Nombre, COUNT(*) AS CantidadLocal FROM Club, Partido WHERE Club.ClubId = Partido.ClubIdLocal AND ClubId del club que tiene al menos un hincha que fue a todos los partidos GROUP BY Club.Nombre SELECT Club.ClubId FROM Club, Hincha WHERE Club.ClubId = Hincha.ClubId AND el hincha que fue a todos los partidos SELECT Hincha.ClubId FROM Hincha WHERE el hincha fue a todos los partidos de su club Bases de Datos - Depto Computación FCEyN UBA 4 Clubs que tiene al menos un Hincha que asistió a todos los partidos Las consultas de este tipo son equivalentes a la división del algebra relacional. La idea es que decir todas las tuplas que cumplen una condición es lo mismo que decir que no hay ninguna tupla que no la cumpla (el conjunto de los que no cumplen la propiedad está vacío) Bases de Datos - Depto Computación FCEyN UBA 5 Hinchas que asistieron a todos los partidos Bases de Datos - Depto Computación FCEyN UBA 6 Pero nos interesa de SU CLUB SELECT * FROM Hincha WHERE NOT EXISTS (SELECT * FROM Partido WHERE (Partido.ClubIdVisitante = Hincha.ClubId OR Partido.ClubIdLocal = Hincha.ClubId) AND NOT EXISTS(SELECT * FROM Asistencia WHERE Asistencia.HinchaDNI = Hincha.DNI AND Asistencia.PartidoId = Partido.PartidoId )) Bases de Datos - Depto Computación FCEyN UBA 7 Nos queda.. SELECT Hincha.ClubId FROM Hincha WHERE el hincha fue a todos los partidos de su club Bases de Datos - Depto Computación FCEyN UBA 8 Ahora reemplazando en el orginal SELECT Club.Nombre, COUNT(*) AS CantidadLocal FROM Club, Partido WHERE Club.ClubId = Partido.ClubIdLocal AND ClubId del club que tiene al menos un hincha que fue a todos los partidos GROUP BY Club.Nombre Bases de Datos - Depto Computación FCEyN UBA 9 Algebra Relacional • Usando AR y CRT obtener el nombre de jugador, nombre de club y edad para los jugadores más veteranos de cada equipo, de aquellos equipos que están invictos en el torneo. Bases de Datos - Depto Computación FCEyN UBA 10 ¿Equipos invictos? • Podemos obtener los que perdieron alguna vez y hacer una resta. Bases de Datos - Depto Computación FCEyN UBA 11 ¿Jugadores más veteranos? Bases de Datos - Depto Computación FCEyN UBA 12 Unimos todo Bases de Datos - Depto Computación FCEyN UBA 13 CRT Bases de Datos - Depto Computación FCEyN UBA 14 CRT Bases de Datos - Depto Computación FCEyN UBA 15