Hola a todos, hoy os dejo una serie de ejercicios sobre la base de datos de nba en oracle.
Todos los ejercicios que proponemos están resueltos en este mismo post, intenta hacerlo por ti mismo y si te quedas atascado puedes mirar la solución. Recuerda, que no tiene por que estar igual tu solución con la del post, el objetivo es que aprendas no que me copies la solución.
Aquí te dejo la base de datos de nba que debes importar.
Si no tienes instalado oracle database XE, os dejo algunos manuales:
Como instalar Oracle Database XE en Windows
Como instalar SQL Developer en Windows
También puedes usar Oracle Live.
Como utilizar Oracle Live
Al final de cada ejercicio, os indico el resultado esperado de la consulta. Si hay muchos datos, indico el numero de filas.
Os dejo el modelo Entidad – Relación de la base de datos:

1. Mostrar el nombre de todos los jugadores ordenados alfabéticamente.
Spoiler Inside |
SelectShow> |
select nombre
from jugadores
order by nombre;
|
Debe devolver 432 registros.
2. Mostrar el nombre de los jugadores que sean pivots con mas de 200 libras
Spoiler Inside |
SelectShow> |
select nombre
from jugadores
where posicion like '%C%' and peso>200
order by nombre;
|
Debe devolver 116 registros.
3. Mostrar el nombre de todos los equipos ordenados alfabeticamente.
Spoiler Inside |
SelectShow> |
select nombre
from equipos
order by nombre;
|

4. Mostrar el nombre de los equipos del este.
Spoiler Inside |
SelectShow> |
select nombre
from equipos
where lower(conferencia) = 'east'
order by nombre;
|

5. Mostrar los equipos donde su ciudad empieza por c.
Spoiler Inside |
SelectShow> |
select nombre
from equipos
where lower(ciudad) like 'c%'
order by nombre;
|

6. Mostrar todos los jugadores y su equipo ordenado por nombre del equipo.
Spoiler Inside |
SelectShow> |
--opcion 1
select j.nombre as jugador, e.nombre as equipo
from jugadores j, equipos e
where j.nombre_equipo = e.nombre
order by e.nombre, j.nombre;
--opcion 2
select j.nombre, j.nombre_equipo
from jugadores j
order by j.nombre_equipo,j.nombre;
|
Debe devolver 432 registros.
7. Mostrar todos los jugadores del equipo «Raptors».
Spoiler Inside |
SelectShow> |
--Opcion 1
select j.nombre as jugador, e.nombre as equipo
from jugadores j, equipos e
where j.nombre_equipo = e.nombre
and lower(e.nombre) = 'raptors'
order by e.nombre, j.nombre;
--Opcion 2
select j.nombre, j.nombre_equipo
from jugadores j
where lower(j.nombre_equipo) = 'raptors'
order by j.nombre_equipo,j.nombre;
|

8. Mostrar los puntos por partido de ‘Pau Gasol’.
Spoiler Inside |
SelectShow> |
select puntos_por_partido
from estadisticas e, jugadores j
where e.jugador = j.codigo
and lower(j.nombre) = 'pau gasol'
|

9. Mostrar los puntos por partido de ‘Pau Gasol’ en la temporada ’04/05′.
Spoiler Inside |
SelectShow> |
select puntos_por_partido
from estadisticas e, jugadores j
where e.jugador = j.codigo
and lower(j.nombre) = 'pau gasol'
and temporada = '04/05'
|

10. Mostrar el numero de puntos de cada jugador en toda su carrera.
Spoiler Inside |
SelectShow> |
select j.nombre, sum(e.puntos_por_partido) as puntos
from jugadores j, estadisticas e
where j.CODIGO = e.jugador
group by j.nombre
order by j.nombre;
|
Debe devolver 424 registros.
11. Mostrar el número de jugadores de cada equipo.
Spoiler Inside |
SelectShow> |
--opcion 1
select j.nombre_equipo, count(*)
from jugadores j
group by j.nombre_equipo;
--opcion 2
select e.nombre, count(*)
from jugadores j, equipos e
where j.nombre_equipo = e.nombre
group by e.nombre;
|

12. Mostrar el jugador que mas puntos ha realizado en toda su carrera.
Spoiler Inside |
SelectShow> |
select t.nombre
from ( select j.nombre, sum(e.puntos_por_partido) as puntos
from jugadores j, estadisticas e
where j.codigo = e.jugador
group by j.nombre
order by j.nombre) t
where t.puntos = (select max(t2.puntos) from (select j.nombre, sum(e.puntos_por_partido) as puntos
from jugadores j, estadisticas e
where j.codigo = e.jugador
group by j.nombre
order by j.nombre) t2)
|

13. Mostrar el nombre del equipo, conferencia y division del jugador mas alto de la NBA.
Spoiler Inside |
SelectShow> |
select j.nombre as jugador, e.nombre as equipo, e.conferencia, e.division
from equipos e, jugadores j
where e.nombre = j.nombre_equipo
and j.altura=(select max(altura)
from jugadores)
|

14. Mostrar la suma de los puntos por partido de todos los jugadores españoles donde el equipo donde juegan este en ‘Los Angeles’.
Spoiler Inside |
SelectShow> |
select sum(puntos_por_partido) as puntos
from estadisticas
where jugador = (select codigo
from jugadores
where lower(procedencia) = 'spain'
and nombre_equipo in (select nombre
from equipos
where lower(ciudad) = 'los angeles'))
|

15. Mostrar la media de puntos en partidos de los equipos de la division Pacific.
Spoiler Inside |
SelectShow> |
select avg(puntos)
from (select sum(puntos_local) as puntos
from PARTIDOS
where equipo_local in (select nombre
from equipos
where lower(DIVISION) = 'pacific')
union
select sum(puntos_visitante) as puntos
from PARTIDOS
where equipo_visitante in (select nombre
from equipos
where lower(DIVISION) = 'pacific')) t
|

16. Mostrar el partido o partidos (equipo_local, equipo_visitante y diferencia) con mayor diferencia de puntos.
Spoiler Inside |
SelectShow> |
select equipo_local, equipo_visitante, diferencia
from (select equipo_local,
equipo_visitante,
abs(puntos_local - puntos_visitante) as diferencia
from partidos)
where diferencia = (select max(abs(puntos_local - puntos_visitante))
from partidos)
|

17. Mostrar la media de puntos en partidos de los equipos de la división Pacific.
Spoiler Inside |
SelectShow> |
create or replace view DIFERENCIA_PUNTOS as
select equipo_local,
equipo_visitante,
abs(puntos_local - puntos_visitante) as diferencia
from partidos
order by diferencia DESC;
select equipo_local,
equipo_visitante,
diferencia
from DIFERENCIA_PUNTOS
where diferencia = (select max(diferencia) from DIFERENCIA_PUNTOS)
|
18. Mostrar los puntos de cada equipo en los partidos, tanto de local como de visitante. Usa una vista
Spoiler Inside |
SelectShow> |
create or replace view Puntos_equipo_partidos as
select t.equipo, sum(t.puntos) as puntos
from (select equipo_local as equipo,
sum(puntos_local) as puntos
from partidos
group by equipo_local
union all
select equipo_visitante as equipo,
sum(puntos_visitante) as puntos
from partidos
group by equipo_visitante ) t
group by t.equipo;
select * from Puntos_equipo_partidos;
|

19. Mostrar quien gana en cada partido (codigo, equipo_local, equipo_visitante, equipo_ganador), en caso de empate sera null.
Spoiler Inside |
SelectShow> |
create or replace view Equipos_ganadores as select codigo, equipo_local, equipo_visitante, case when p.puntos_local>p.puntos_visitante then equipo_local when p.puntos_local
|
Debe devolver 15660 registros.
Os dejo videos de nuestro canal de youtube, donde realizamos estas consultas:
Espero que os sea de ayuda. Si tenéis cualquier duda, no dudes en preguntar. Estamos para ayudarte.
Muchas gracias, fue de gran ayuda
Si por ejemplo yo necesitara este dato a consultar *Consultar la información de los equipos que tienen más cantidad de puntos anotados como local o visitante* ¿como seria la sentencia?
Alguien puede echarme una mano en este ejercicio
Haz un procedimiento que, dada una temporada y un equipo (ambos pasados como
parámetros de entrada) diga:
Cuántos partidos en total ha ganado ese equipo como local
Para cada partido: Decir cuántos puntos anotó.