Citation preview

Universidad de El Salvador Facultad Multidisciplinaria Paracentral Departamento de informática.

Temática: Tarea 3 SQL server, consultas Presentado por: Boris Ricardo Miranda Ayala Carnet: MA14049 Romario Abelardo Villalobos Rivas Carnet: VR14022 Juan Carlos Moz Alfaro Carnet: MA14031

Docente: Ing. Herbert Monge

TAREA SQL 1-Crear una base de datos con nombre NBA y dentro de esta crear las tablas estadísticas, jugadores, equipos, partidos como lo muestra el siguiente script. USE master GO if exists (select * from sysdatabases where name='nba') drop database nba go EXECUTE (N'CREATE DATABASE nba') go if object_id('estadisticas') is not null drop table estadisticas ;

if object_id('partidos') is not null drop table partidos ; go if object_id('jugadores') is not null drop table jugadores ; if object_id('equipos') is not null drop table equipos ; go use nba go create table estadisticas ( temporada varchar(5) NOT NULL, jugador int NOT NULL, Puntos_por_partido float NULL, Asistencias_por_partido float NULL, Tapones_por_partido float NULL, Rebotes_por_partido float NULL, primary key (temporada, jugador) ) go create table jugadores ( codigo int NOT NULL, Nombre varchar(30) NULL, Procedencia varchar(20) NULL, Altura varchar(4) NULL, Peso int NULL, Posicion varchar(5) NULL, Nombre_equipo varchar(20) NULL, primary key (codigo)

) go create table equipos ( Nombre varchar(20) NOT NULL, Ciudad varchar(20) NULL, Conferencia varchar(4) NULL, Divicion varchar(9) NULL, primary key (Nombre) ) go create table partidos ( codigo int NULL, equipo_local varchar(20) NULL, equipo_visitante varchar(20) NULL, puntos_local int NULL, puntos_visitante int NULL, temporada varchar(5) NULL constraint fk_equipo_local foreign key (equipo_local) references equipos (Nombre), constraint fk_equipo_visitante foreign key (equipo_visitante) references equipos (Nombre) on update cascade ) go alter table jugadores add constraint fkjugador_equipo foreign key (Nombre_equipo) references equipos (Nombre) on update cascade go alter table estadisticas add constraint fk_estadistica_jugador foreign key (jugador) references jugadores (codigo) on update cascade on delete cascade go

2-Obtener los primeros 100 jugadores que pesan más que la media de peso de todos los jugadores españoles y ordenados por el peso. select top 100 Nombre,peso,Procedencia from jugadores where peso>(select avg(peso) from jugadores where Procedencia like '%spain') order by peso go

3- Obtener la suma de los puntos por partido de Pau Gasol en toda su carrera. SELECT SUM(Puntos_por_partido) AS PUNTOS_PAU from estadisticas where jugador = (select codigo from jugadores where Nombre LIKE ('Pau Gasol'))

4- Obtener los puntos por partido y el número de asistencias de los jugadores de los Cavaliers en la temporada 2007/2008 no utilice INNER. select sum(Puntos_por_partido),sum(Asistencias_por_partido) from estadisticas where jugador in ( SELECT distinct (codigo) From jugadores where Nombre_equipo in ('cavaliers') ) and temporada = '07/08'

5- Obtener los puntos máximos y mínimos de los jugadores de la conferencia este. select max(e.Puntos_por_partido) as puntosMax,min(e.Puntos_por_partidos) as puntosMin from estadisticas as e inner join jugadores as j on e.jugador=j.codigo inner join equipos as eq on eq.Nombre=j.Nombre_equipo where eq.Conferencia='East' go

6- Obtener la media de puntos por partido de Marko Jaric en las temporadas del 2003/2004 al 2005/2006. SELECT ROUND (avg(Puntos_por_partido),2) as media from estadisticas where jugador = (SELECT codigo FROM jugadores where Nombre = 'Marko Jaric') and temporada = '03/04' or temporada = '05/06'

7- Obtener el nombre de equipos los jugadores Nuggets y las conferencias que pertenece sin usar INNER JOIN select a.equipo,a.jugador,a.conferencia from (select j.Nombre as jugador,j.Nombre_equipo as equipo, (select conferencia from equipos where Nombre like 'Nuggets') as conferencia from jugadores as j where j.Nombre_equipo in(select Nombre from equipos as eq where eq.Nombre like 'Nuggets') )a go

8- Obtener el nombre y peso de los jugadores de la NBA que hayan hecho una media de más de 25 puntos por partido en alguna temporada. select Nombre,Peso from jugadores where codigo in(select distinct (jugador) from estadisticas where Puntos_por_partidos>25) order by Nombre

9- Obtener el nombre, la altura y el peso de los jugadores que juegan en la ciudad de Los Ángeles y su lugar de procedencia comience con S. select nombre,Altura from jugadores where Nombre_equipo in (select nombre from equipos where ciudad = 'Los Angeles' ) and Procedencia like 'S%'

10- Obtener la media de puntos por temporada de los jugadores que se llamen Steve y pesen entre 150 y 300 libras no usar join. select temporada, Puntos_por_partido,jugador from estadisticas where jugador in ( select codigo from jugadores where nombre like 'Steve_%' and Peso between 150 and 300) order by jugador

11- ¿Cuántas letras tiene el equipo con el nombre más largo de la NBA?. Obtener también el nombre del equipo y la ciudad de donde procede. (Usar la función LENGTH, aunque en realidad esta función lo que nos dice es el nº de caracteres que ocupa el nombre del equipo en la BBDD incluido los espacios en blanco, no su número de letras, pero haremos una excepción). select max(Len(Nombre)) as cantidad,Nombre,Ciudad from equipos group by Nombre,Ciudad having LEN(Nombre)>=all (select (Len(Nombre)) from equipos)

12- Obtener la ciudad con el equipo cuya media de altura de los jugadores sea la más baja. select Nombre, Ciudad

from equipos where Nombre = (select top 1 Nombre_equipo from jugadores as j group by Nombre_equipo order by avg(CONVERT (decimal(6,2), REPLACE(j.altura,'-','.'))))

13- Obtener el número de jugadores que tiene cada equipo de la Conferencia Oeste. select Nombre_equipo,count(*) from jugadores where Nombre_equipo in (select Nombre from equipos where Conferencia = 'West') group by Nombre_equipo order by count(*)

14- seleccione los equipos cuya ciudad es Toronto y su procedencia es española select e.Nombre, e.Ciudad,j.Procedencia from equipos as e inner join jugadores as j on j.Nombre_equipo=e.Nombre where e.Ciudad='Toronto' and j.Procedencia='Spain'; go

15- Obtener las asistencias por partido y los tapones por partido de los jugadores de los Chicago Bulls en la temporada 2005/2006 (Utilice procedimientos). create procedure AsistenciaTApobesBulls as select sum (Asistencias_por_partido) AS asistencias, sum (Tapones_por_partido) as tapones ,temporada from estadisticas where jugador in( select codigo from jugadores where Nombre_equipo = 'Bulls') and temporada = '05/06' group by temporada go execute AsistenciaTApobesBulls go

16- Obtener la media de puntos por partido y la media de asistencias por partido de los Warriors en todas las temporadas (Utilice procedimientos) create procedure puntos_warrios as select p.temporada, (select avg(puntos_visitante)from partidos p2 where equipo_visitante = 'Warriors' and p.temporada = p2.temporada) as punto_visitante , (select avg(puntos_local)from partidos p3 where equipo_local = 'Warriors' and p.temporada = p3.temporada) as punto_local from partidos as p group by temporada order by p.temporada

go execute puntos_warrios go

17- Obtener la media de puntos por temporada de los jugadores que se llamen Steve y pesen más de 210 libras (Utilice funciones). create function dbo.mediaTempora() returns @mediaTempora table(nombre nvarchar(50),peso float,media numeric(9,2)) as begin insert @mediaTempora select j.Nombre,j.Peso,avg(e.Puntos_por_partido) from jugadores as j inner join estadisticas as e on e.jugador=j.codigo where j.Nombre like '%Steve%' and j.Peso>210 group by j.Nombre,j.Peso; return end go select*from dbo.mediaTempora() go

18-Obtener el nombre, la altura y el peso de los jugadores que juegan en la ciudad de Los Ángeles y que sean españoles (Utilice funciones). create function dbo.jugadorCiudadProcedencia(@ciudad nvarchar(20), @procedencia nvarchar (10)) returns @jugadorCiudadProcedencia TABLE (nombreJugador nvarchar (20) , altura nvarchar (10)) as begin insert @jugadorCiudadProcedencia

select Nombre,Altura from jugadores where Nombre_equipo in (select Nombre from equipos where Ciudad = @ciudad )and Procedencia = @procedencia returns END GO select * from dbo.jugador_ciudad_procedenci('los angeles', 'spain')

19-Obtener los puntos por partido de los jugadores de los Lakers en todas las temporadas, por temporada utilizando vistas. create view puntoslakers as select jugadores.Nombre, Puntos_por_partido, temporada from estadisticas join jugadores on jugadores.Nombre_equipo like '%Lakers' and jugadores.codigo = estadisticas.jugador group by Nombre, Puntos_por_partido, temporada go select * from puntoslakers go

20-Obtener el equipo y jugador que haya jugado más temporadas use UNION y vistas create view masTemporad as (select j.Nombre from jugadores as j where j.codigo=(select top 1 jugador from estadisticas group by jugador order by COUNT(*) desc)) union (select j.Nombre_equipo from jugadores as j where j.codigo=(select top 1 jugador from estadisticas group by jugador order by COUNT(*) desc)) union (select convert(varchar(12),count(temporada))from estadisticas where jugador=(select top 1 jugador from estadisticas group by jugador order by COUNT(*) desc)) go select*from masTemporad; go

21-seleccionar el nombre de equipo local, puntos equipo local, nombre equipo visitante, puntos equipo visitante, diferencia de puntos Opcion 1 select (select Nombre from equipos as e2 where e2.Nombre =p1.equipo_local ) equipo_local, puntos_local, (select Nombre from equipos as e3 where e3.Nombre = p1.equipo_visitante ) equipo_visitante, puntos_visitante, (puntos_local - puntos_visitante) as diferencia from partidos as p1 where temporada = '00/01'

opción 2 select equipo_local,puntos_local,equipo_visitante,puntos_visitante, (puntos_local - puntos_visitante) as diferencia from partidos where temporada = '00/01'

22-Optener para temporada 03-04 el número promedio de puntos que hace el jugador centro como visitante opcion 1 select avg(Puntos_por_partido) as puntos, jugadores.Nombre, Posicion, estadisticas.temporada, partidos.equipo_visitante from jugadores full join estadisticas on jugadores.codigo = estadisticas.jugador full join equipos on jugadores.Nombre_equipo = equipos.Nombre full join partidos on equipos.Nombre = partidos.equipo_visitante where estadisticas.temporada ='03/04' and jugadores.Posicion = 'C' and partidos.equipo_visitante = equipos.Nombre group by jugadores.Nombre, Posicion, estadisticas.temporada, partidos.equipo_visitante

opcion 2 select avg(Puntos_por_partido) as puntos, jugadores.Nombre, Posicion from jugadores full join estadisticas on jugadores.codigo = estadisticas.jugador where estadisticas.temporada ='03/04' and jugadores.Posicion = 'C' and jugadores.Nombre_equipo in(select Nombre from equipos join partidos on equipos.Nombre = partidos.equipo_visitante) group by jugadores.Nombre, Posicion

23-De la conferencia este verificar que jugador ha jugado en diferente equipo.