13

Click here to load reader

Repaso programación

  • Upload
    vlexxx

  • View
    321

  • Download
    3

Embed Size (px)

Citation preview

Page 1: Repaso programación

Repaso

Programación.

Alejandro Alonso Taratiel. 1º ASIR.

Base de datos. Prof.: Santiago Blanco.

.

Page 2: Repaso programación

Página - 1 - de 13

ÍNDICE

Repaso programación. ...............................................................................................- 2 - Tablas. ..................................................................................................................- 2 -

Ejercicio_1 ............................................................................................................- 4 - Ejercicio_2 ............................................................................................................- 6 -

Ejercicio_3 ............................................................................................................- 8 - Ejercicio_4 .......................................................................................................... - 10 -

Ejercicio_5 .......................................................................................................... - 11 -

Page 3: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 2 - de 13

Repaso programación.

Tablas.

/*CREACCIÓN DE LA BASE DE DATOS*/

CREATE DATABASE Repasoprogramacion

ON (NAME =Tiendas,FILENAME = 'C:\Program Files (x86)\Microsoft SQL

Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\

Repasoprogramacion.mdf')

LOG ON(NAME=Tiendas_log, FILENAME='C:\Program Files (x86)\Microsoft

SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\

Repasoprogramacion.ldf')

/*TABLA Equipos*/

CREATE TABLE Equipos (CodEquipo VARCHAR(4),

Nombre VARCHAR(30) NOT NULL,

Localidad VARCHAR(15), CONSTRAINT

PK_Equipos PRIMARY KEY (CodEquipo))

/*TABLA Partidos*/

CREATE TABLE Partidos( CodPartido VARCHAR(4),

CodEquipoLocal VARCHAR(4),

CodEquipoVisitante VARCHAR(4),

Fecha DATE,

Jornada VARCHAR(20),

Gol_Local INT,

Gol_Visitante INT,

CONSTRAINT PK_Partidos PRIMARY KEY

(CodPartido),

CONSTRAINT FK_Partidos_EquiposL FOREIGN

KEY (CodEquipoLocal) REFERENCES

Equipos(CodEquipo),

CONSTRAINT FK_Partidos_EquiposV

FOREIGN KEY (CodEquipoVisitante)

REFERENCES Equipos(CodEquipo),

CONSTRAINT CK_Fecha CHECK

(MONTH(FECHA) NOT IN (7,8)))

Page 4: Repaso programación

Página - 3 - de 13

/*INSERTAR DATOS*/

/*TABLA Equipos*/

INSERT INTO EQUIPOS

VALUES (01, 'Athletic Club', 'Bilbao')

INSERT INTO EQUIPOS

VALUES (02, 'Club Atlético de Madrid', 'Madrid')

INSERT INTO EQUIPOS

VALUES (03, 'Club Atlético Osasuna', 'Pamplona')

INSERT INTO EQUIPOS

VALUES (04, 'Fútbol Club Barcelona', 'Barcelona')

INSERT INTO EQUIPOS

VALUES (05, 'Getafe Club de Fútbol', 'Getafe')

INSERT INTO EQUIPOS

VALUES (06, 'Granada Club de Fútbol', 'Granada')

INSERT INTO EQUIPOS

VALUES (07, 'Levante Unión Deportiva', 'Valencia')

INSERT INTO EQUIPOS

VALUES (08, 'Málaga Club de Fútbol', 'Málaga')

INSERT INTO EQUIPOS

VALUES (09, 'Rayo Vallecano de Madrid', 'Madrid')

INSERT INTO EQUIPOS

VALUES (10, 'Real Betis Balompié', 'Sevilla')

/*TABLA Partidos*/

INSERT INTO Partidos

VALUES (01,01,02,'04/02/2012',1,1,2)

INSERT INTO Partidos

VALUES (02,03,04,'04/02/2012',1,3,4)

INSERT INTO Partidos

VALUES (03,05,06,'04/02/2012',1,2,2)

INSERT INTO Partidos

VALUES (04,07,08,'04/02/2012',1,0,0)

INSERT INTO Partidos

VALUES (05,09,10,'04/02/2012',1,3,2)

INSERT INTO Partidos

VALUES (06,01,06,'07/02/2012',2,4,2)

INSERT INTO Partidos

VALUES (07,02,07,'11/02/2012',2,2,5)

INSERT INTO Partidos

VALUES (08,03,08,'11/02/2012',2,1,1)

INSERT INTO Partidos

VALUES (09,04,09,'11/02/2012',2,6,2)

INSERT INTO Partidos

VALUES (10,05,10,'11/02/2012',2,5,0)

Page 5: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 4 - de 13

Ejercicio_1

1. Crea una función DevolverNombreEquipo que reciba un código de equipo y

devuelva el nombre del mismo. Si el equipo no existe devuelve la cadena

“Error en código”.

Comandos:

CREATE FUNCTION Equipo (@Codigo AS INT )

RETURNS VARCHAR(30)

AS

BEGIN

DECLARE @Nombre VARCHAR(30)

IF @Codigo NOT IN (SELECT CodEquipo FROM Equipos)

SET @Nombre = 'ERROR EN CODIGO'

ELSE

BEGIN

SET @Nombre = (SELECT Nombre FROM Equipos WHERE

CodEquipo = @Codigo)

END

RETURN @Nombre

END

Resultados:

Command(s) completed successfully.

Page 6: Repaso programación

Página - 5 - de 13

Y ahora lo comprobamos.

Comandos:

SELECT dbo.equipo (04) AS [Nombre equipo]

Resultados:

Fútbol Club Barcelona

Page 7: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 6 - de 13

Ejercicio_2

2. Crea una función DevolverGolesEquipo que reciba el código de un equipo y

devuelva el total de goles a favor y total de goles en contra. Contempla las

excepciones oportunas.

Comandos:

CREATE FUNCTION DevolverGolesEquipo (@codigo AS INT )

RETURNS @goles TABLE ([Goles a favor] INT,[Goles en contra] INT)

AS

BEGIN

DECLARE @afavor INT

DECLARE @encontra INT

SET @afavor =

((SELECT SUM(Gol_Local) FROM Partidos WHERE CodEquipoLocal

= @codigo GROUP BY CodEquipoLocal)

+ (SELECT SUM(Gol_Visitante) FROM Partidos WHERE

CodEquipoVisitante = @codigo GROUP BY CodEquipoLocal))

SET @encontra =

((SELECT SUM(Gol_Visitante) FROM Partidos WHERE

CodEquipoLocal = @codigo GROUP BY CodEquipoLocal)

+ (SELECT SUM(Gol_Local) FROM Partidos WHERE

CodEquipoVisitante = @codigo GROUP BY CodEquipoLocal))

INSERT INTO @goles VALUES (@afavor,@encontra)

RETURN

END

Resultados:

Command(s) completed successfully.

Page 8: Repaso programación

Página - 7 - de 13

Y ahora lo comprobamos.

Comandos:

SELECT *

FROM dbo.DevolverGolesEquipo (4)

Resultados:

10 5

Page 9: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 8 - de 13

Ejercicio_3

3. Crea un procedimiento DevolverResultadosEquipo que reciba el código de

un equipo y devuelva el número de partidos que ha ganado, el número de

partidos que ha perdido y el número de partidos que ha

empatado.Contempla las excepciones oportunas.

Comandos:

CREATE PROCEDURE DevolverResultadosEquipo (@codigo AS INT)

AS

BEGIN

DECLARE @victorias INT

DECLARE @empates INT

DECLARE @derrotas INT

SET @victorias = ISNULL((SELECT COUNT(*) FROM Partidos

WHERE Gol_Local > Gol_Visitante

GROUP BY CodEquipoLocal HAVING CodEquipoLocal = @codigo),0)

SET @victorias = @victorias + ISNULL((SELECT COUNT(*) FROM

Partidos WHERE Gol_Local < Gol_Visitante

GROUP BY CodEquipoVisitante HAVING CodEquipoVisitante =

@codigo),0)

SET @empates = ISNULL((SELECT COUNT(*) FROM Partidos

WHERE Gol_Local = Gol_Visitante

GROUP BY CodEquipoLocal HAVING CodEquipoLocal = @codigo),0)

SET @empates = @empates + ISNULL((SELECT COUNT(*) FROM

Partidos WHERE Gol_Local = Gol_Visitante

GROUP BY CodEquipoVisitante HAVING CodEquipoVisitante =

@codigo),0)

SET @derrotas = ISNULL((SELECT COUNT(*) FROM Partidos

WHERE Gol_Local < Gol_Visitante

GROUP BY CodEquipoLocal HAVING CodEquipoLocal = @codigo),0)

SET @derrotas = @derrotas + ISNULL((SELECT COUNT(*) FROM

Partidos WHERE Gol_Local > Gol_Visitante

GROUP BY CodEquipoVisitante HAVING CodEquipoVisitante =

@codigo),0)

SELECT @victorias [Victorias],@empates [empates],@derrotas

[Derrotas]

END

Resultados:

Command(s) completed successfully.

Page 10: Repaso programación

Página - 9 - de 13

Y ahora lo comprobamos.

Comandos:

EXEC DevolverResultadosEquipo 4

Resultados:

2 0 0

Page 11: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 10 - de 13

Ejercicio_4

4. Crea la tabla “Clasificación_liga” con la siguiente estructura:

Realiza un procedimiento ActualizarClasificacion que haga lo siguiente:

·Borra todos los registros de la tabla “Clasificación_liga”.

·A partir de la tabla partidos, rellena la tabla “Clasificación_liga”, la

información la obtiene sólo de los partidos de “liga”, para calcular los

puntos debes considerar 3 puntos las victorias y 1 punto los empates.

·Para terminar muestra la clasificación de los equipos, ordenados por

puntos, y mostrando el nombre del equipo, en vez del código, todos los

datos anteriores.

Comandos:

Resultados:

Page 12: Repaso programación

Página - 11 - de 13

Ejercicio_5

5. Crear un procedimiento MostrarQuinielaJornada que reciba una jornada y

muestre la quiniela de dicha jornada de la liga según los partidos jugados.

El resultado debe ser de la siguiente manera:

Nombre equipo1 – Nombre equipo2 (1, X o 2)

El 1 será cuando el equipo1 (Local) haya ganado, la X cuando sea un

empate y un 2 cuando el equipo 2 (visitante) haya ganado.

Se deben tratar las siguientes excepciones:

a) Tabla Equipos vacía

b) Tabla Partidos vacía.

c) No hay partidos de esa jornada.

Comandos:

CREATE PROCEDURE MostrarQuinielaJornada (@jornada AS INT)

AS

BEGIN

DECLARE @error VARCHAR(300)

DECLARE @error2 VARCHAR(300)

DECLARE @error3 VARCHAR(300)

IF @Jornada NOT IN (SELECT Jornada FROM Partidos)

SET @error = 'No se ha disputado dicha jornada'

IF (SELECT COUNT(*) FROM Partidos) = 0

SET @error2 = 'La Tabla Partidos se encuentra vacía'

IF (SELECT COUNT(*) FROM Equipos) = 0

SET @error3 = 'La tabla Equipos se encuentra vacía'

ELSE

SELECT dbo.equipo(CodEquipoLocal) [Equipo local],

dbo.equipo(CodEquipoVisitante) [Equipo visitante],

CASE WHEN Gol_Local > Gol_Visitante THEN '1'

WHEN Gol_Local < Gol_Visitante THEN '2'

WHEN Gol_Local = Gol_Visitante THEN 'X'

END Resultado

FROM Partidos

WHERE Jornada = @jornada

SELECT @error,@error2,@error3

END

Resultados:

Command(s) completed successfully.

Page 13: Repaso programación

Bases de Datos. Alejandro Alonso Taratiel 02/06/2012

Página - 12 - de 13

Y ahora lo comprobamos.

Comandos:

EXEC MostrarQuinielaJornada 1

Resultados:

Athletic Club Club Atlético de Madrid 2

Club Atlético Osasuna Fútbol Club Barcelona 2

Getafe Club de Fútbol Granada Club de Fútbol X

Levante Unión Deportiva Málaga Club de Fútbol X

Rayo Vallecano de Madrid Real Betis Balompié 1