Repaso
Programación.
Alejandro Alonso Taratiel. 1º ASIR.
Base de datos. Prof.: Santiago Blanco.
.
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 -
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)))
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)
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.
Página - 5 - de 13
Y ahora lo comprobamos.
Comandos:
SELECT dbo.equipo (04) AS [Nombre equipo]
Resultados:
Fútbol Club Barcelona
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.
Página - 7 - de 13
Y ahora lo comprobamos.
Comandos:
SELECT *
FROM dbo.DevolverGolesEquipo (4)
Resultados:
10 5
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.
Página - 9 - de 13
Y ahora lo comprobamos.
Comandos:
EXEC DevolverResultadosEquipo 4
Resultados:
2 0 0
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:
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.
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
Top Related