Ejercicio SQLv2

Anuncio
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
Descargar