Está en la página 1de 17

--SYSDATE: Funci�n que manda la fecha actual.

--Agregar el equipo Terceras con los siguientes datos:


/*
Clave: 11
Nombre: TERCERAS
Uniforme: TECOS
Fecha de Registro: Fecha de hoy
Activo: S
Capit�n: 101
*/

INSERT INTO Equipo


VALUES (11,'TERCERAS','TECOS',SYSDATE,'S',101);

DELETE FROM Equipo WHERE IdEquipo = 11;

SELECT * FROM Equipo;

--Busca el equipo con clave 11.


--SELECT: permite consultar registro de una o varias tablas.
--FROM: es donde se establece el origen de donde se tomar� la informaci�n.
--WHERE: clausula usado para realizar filtro de registro.
--Solo se toman aquellos registros que cumplan las condiciones declaradas en �l.
/*
SELECT column1, column2, ...
FROM table_name
WHERE condition;
*/
SELECT *
FROM Equipo
WHERE Equipo.idEquipo = 11;

--Agregar tres jugadores al equipo 11.


--101,ALEJANDRO,FLORES,PACHECO,09/08/1995,811222091,alejandro@gmail.com,11
--102,ROSARIO,ROSAS,ROMERO,19/08/1995,811222092,alejandro@gmail.com,11
--103,SAMARIO,VILLAS,BLANCO,29/08/1995,811222093,alejandro@gmail.com,11

INSERT INTO Jugador( Jugador.idJugador, Jugador.nombre, Jugador.app, Jugador.apm,


Jugador.fecnac, Jugador.cel, Jugador.email, Jugador.idEquipo)
VALUES (101,'ALEJANDRO', 'FLORES', 'PACHECO', '09/08/1995', '811222091',
'alejandro@gmail.com',11);

INSERT INTO Jugador(idJugador, nombre, app, apm, fecnac, cel, email, idEquipo)
VALUES (102,'ROSARIO', 'ROSAS', 'ROMERO', '19/08/1995', '811222092',
'rosario@gmail.com',11);

INSERT INTO Jugador


VALUES (103,'SAMARIO', 'VILLAS', 'BLANCO', '29/08/1995', '811222093',
'samario@gmail.com',11);

--Buscar los jugadores que pertenezcan al equipo 11.


SELECT *
FROM Jugador
WHERE Jugador.idEquipo = 11;
SELECT *
FROM Jugador
WHERE Jugador.app = 'CANTU';

--Operadores de Comparaci�n
/*
> Mayor que
>= Mayor 0 igual que
< Menor que
<= Menor o igual que
= Igua que
!= Diferente que
*/
--Traer todos los datos de los jugadores que su equipo es mayor a 10
SELECT *
FROM Jugador
WHERE Jugador.idEquipo > 10;

--Traer todos los datos de los jugadores que su equipo es mayor o igual 10
SELECT *
FROM Jugador
WHERE Jugador.idEquipo >= 10;

--Traer todos los datos de los jugaores que nacieron antes de 1996.
SELECT *
FROM Jugador
WHERE Jugador.fecNac < '1/1/1996';

--Traer todos los datos de los arbitros que su folio es menor o igual a 3
SELECT *
FROM Arbitro
WHERE Arbitro.idArbitro <= 3;

--Traer a todos los arbitros excepto el 3


SELECT *
FROM Arbitro
WHERE Arbitro.idArbitro != 3;

--Traer los equipos activos y que su n�mero de equipo sea mayor a 5.


--AND: el operador muestra un registro si todas las condiciones separadas por AND
son VERDADERAS.
/*
SELECT column1, column2, ...
FROM table_name
WHERE condition1 AND condition2 AND condition3 ...;
*/
--AS
--En determinadas circunstancias es necesario asignar un nombre a alguna columna
determinada
--de un conjunto devuelto, otras veces por simple capricho o por otras
circunstancias. Para
--resolver todas ellas tenemos la palabra reservada AS que se encarga de asignar el
nombre que deseamos a la columna deseada.
--Alias para tablas: Equipo e
--Alias para campos: Equipo.Nombre AS NombreEquipo
--Alias para campos con espacio en nombre: Equipo.Nombre AS "Nombre Equipo"
SELECT e.*
FROM Equipo e
WHERE e.Activo = 'S' AND e.idEquipo > 5;
--Buscar los jugadores que pertenezcan al equipo 9 o 11.
--OR: operador que despliega un registro si cualquiera de las condiciones sepearas
por OR
--que tenga es verdadera.
--Es decir, con una que cumpla es tomada como TRUE.
/*
SELECT column1, column2, ...
FROM table_name
WHERE condition1 OR condition2 OR condition3 ...;
*/
SELECT *
FROM Jugador
WHERE Jugador.idEquipo = 11 OR Jugador.idEquipo = 9;

SELECT idJugador, nombre, app, apm, fecnac


FROM Jugador
WHERE (fecnac >= '1/1/1995' AND fecnac <= '30/6/1995') OR app = 'CANTU';

--Traer los jugadores que no sean del equipo 8.


--NOT: muestra un registro si la (s) condici�n (es) NO SON VERDADERAS.
/*
SELECT column1, column2, ...
FROM table_name
WHERE NOT condition;
*/
SELECT Jugador.*
FROM Jugador
WHERE NOT Jugador.idEquipo = 8;

SELECT Jugador.*
FROM Jugador
WHERE Jugador.idEquipo != 8;

select *
from jugador
where not idequipo = 9 and not idequipo = 11;

--Buscar los jugadores que pertenezcan al equipo de terceras


--Consulta Multitabla: llamadas as� porque est�n basadas en m�s de una tabla.
/*
SELECT Tabla1.Campo1, Tabla1.Campo2, Tabla2.Campo1, Tabla2.Campo2
FROM Tabla1, Tabla2
WHERE Tabla1.Campo1 = Tabla2.Campo1
*/

SELECT j.*,e.nombre AS Equipo


FROM Equipo e, Jugador j
WHERE e.idEquipo = j.idEquipo;

SELECT j.*,e.nombre AS Equipo


FROM Equipo e, Jugador j
WHERE e.idEquipo = j.idEquipo AND e.nombre = 'TERCERAS';
SELECT j.*, e.nombre AS "Nombre Equipo"
FROM Jugador j, Equipo e
WHERE j.idEquipo = e.IdEquipo AND e.Nombre = 'TERCERAS';

--Mandar idJugador, nombre, app y apm de los jugadores de los Mayas.


SELECT j.idJugador, j.nombre, j.app, j.apm
FROM Jugador j, Equipo e
WHERE j.idEquipo = e.IdEquipo AND e.Nombre = 'MAYAS';

--Mandar el nombre, app y apm, as� como la jornada, juego y los goles de todos los
juegos del torneo 1.
SELECT j.nombre, j.app, j.apm, ju.idJornada, g.idJuego, g.goles
FROM Jugador j, Juego ju, Gol g
WHERE j.idJugador = g.idJugador AND
ju.idJuego = g.idJuego AND
ju.idJornada < 200;

--Actualiza el uniforme del equipo TERCERAS ya que no es del TECOS sino de TOROS
NEZA.
UPDATE Equipo
SET Equipo.uniforme = 'TOROS NEZA'
WHERE Equipo.nombre = 'TERCERAS';

--Actualiza el apellido paterno del jugador 103 ya que es Villa y su fecha de


nacimiento es 28/08/1995.
UPDATE Jugador
SET app = 'VILLA', fecNac = '28/08/1995'
WHERE idJugador = 103;

--Traer los jugadores que est�n en los equipos 1, 5 u 8.


--Solo traer la clave del jugador, nombre completo concatenado y la clave del
equipo.
--IN: Permite especificar m�ltiples valores en una cl�usula WHERE.
--Es un atajo para multiples condiciones tipo OR.
--Este operador devuelve aquellos registros cuyo campo indicado coincide con alguno
de los en una lista.
/*
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1, value2, ...);
*/
--CONCAT (||): Devuelve una cadena resultante de la
--concatenaci�n, o la combinaci�n, de dos o m�s valores de cadena de una manera
integral.
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
j.idEquipo
FROM Jugador j
WHERE j.idEquipo IN(1,5,8);

--Traer los jugadores que est�n en los equipos MONOS y VAGOS.


--Solo traer la clave del jugador, nombre completo concatenado y nombre del equipo.
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
e.nombre
FROM Jugador j, Equipo e
WHERE j.idEquipo = e.idEquipo AND
e.nombre IN('VAGOS','MONOS');
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
e.nombre
FROM Jugador j, Equipo e
WHERE j.idEquipo = e.idEquipo AND
(e.nombre = 'VAGOS' OR e.Nombre = 'MONOS');

--Mandar el nombre del jugador concatenado, as� como la jornada, juego y los goles
--de todos los jugos del torneo 1 donde hayan anotado 1, 3 o 5 goles nada m�s.
SELECT j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
ju.idJornada,
g.idJuego,
g.goles
FROM Jugador j, Juego ju, Gol g
WHERE j.idJugador = g.idJugador AND
ju.idJuego = g.idJuego AND
ju.idJornada < 200 AND
g.goles IN (1,3,5);

--Obtener la edad de los jugadores


--Mandar #jugador, nombre concatenado y edad.
--ORDER BY
--Especifica el orden en que se desean recuperar los registros de las tablas
--por medio de uno o varios campos. En donde Lista de campos representa los campos
--a ordenar. Incluso se puede especificar el orden de los registros: ascendente
mediante
--la cla�sula (ASC -se toma este valor por defecto) o descendente (DESC).
--ROUND: Redondea una cantidada a ciertos decimales ROUND(cantidad,decimales)
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
ROUND((SYSDATE - j.fecNac) / 365,0) AS Edad
FROM Jugador j
ORDER BY Edad ASC;

--Traer el n�mero de equipo y el nombre y ordenarlos por nombre de forma


descendente.
SELECT e.idEquipo, e.Nombre
FROM equipo e
ORDER BY e.Nombre DESC;

--Obtener la fecha de nacimiento de los jugadores separados por dia, mes y a�o.
--TO_CHAR(campoFecha,'DD'): Devuelve un caract�r que representa el d�a (del mes)
del argumento DATE especificado.
--TO_CHAR(campoFecha,'MM'): Devuelve un caract�r que representa la parte del mes de
la fecha DATE especificada.
--TO_CHAR(campoFecha,'YYYY)': Devuelve un caract�r que representa la parte del a�o
del par�metro DATE especificado.
--Mandar #Jugadador, Nombre concatendao, d�a, mes y a�o.
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
TO_CHAR(j.fecNac,'DD') AS Dia,
TO_CHAR(j.fecNac,'MM') AS Mes,
TO_CHAR(j.fecNac,'YYYY') AS A�o
FROM Jugador j
ORDER BY A�o ASC, Mes ASC, Dia ASC;

--Traer los partidos de la jornada 207.


--Mandar n�mero de jornada, nombre equipo 1, nombre equipo 2 y nombre arbitro.
SELECT
ju.idJornada,
e1.Nombre || ' VS ' || e2.Nombre AS Partido,
a.nombre AS Arbitro
FROM Juego ju, Arbitro a, Equipo e1, Equipo e2
WHERE ju.idArbitro = a.idArbitro AND
ju.idEquipo1 = e1.idEquipo AND
ju.idEquipo2 = e2.idEquipo AND
ju.idJornada = 207;

--Traer los resultados de la jornada 201


SELECT
ju.idJornada,
e1.Nombre AS Equipo1,
ju.goles1,
e2.Nombre AS Equipo2,
ju.goles2,
a.nombre AS Arbitro
FROM Juego ju, Arbitro a, Equipo e1, Equipo e2
WHERE ju.idArbitro = a.idArbitro AND
ju.idEquipo1 = e1.idEquipo AND
ju.idEquipo2 = e2.idEquipo AND
ju.idJornada = 201;

--Traer los partidos del torneo 2 que hayan finalizado.


--En vez del folio del equipo se ocupo el nombre y en vez del folio del arbitro
--se ocupa el nombre concatenado.
SELECT ju.idJuego,
ju.idJornada,
ju.fecreg,
e1.Nombre AS Equipo1,
ju.goles1,
ju.puntos1,
e2.Nombre AS Equipo2,
ju.goles2,
ju.puntos2,
a.nombre || ' ' || a.app || ' ' || a.apm AS Arbitro,
ju.estatus,
ju.obser
FROM Juego ju, Equipo e1, Equipo e2, Arbitro a
WHERE ju.idArbitro = a.idArbitro AND
ju.idEquipo1 = e1.idEquipo AND
ju.idEquipo2 = e2.idEquipo AND
ju.idJornada > 200 AND
ju.estatus = 'F'
ORDER BY ju.idJornada, ju.idJuego;

--La funci�n MIN () devuelve el valor m�s peque�o de la columna seleccionada.


--La funci�n MAX () devuelve el valor m�s grande de la columna seleccionada.
/*
SELECT MIN(column_name)
FROM table_name
WHERE condition;

SELECT MAX(column_name)
FROM table_name
WHERE condition;
*/
--Selecciona el equipo con la clave mas baja
SELECT MIN(idEquipo) AS "Clave de Equipo M�nima"
FROM Equipo;

--Obt�n el menor n�mero de goles anotador en un partido.


SELECT MIN(goles) "M�nimo N�mero de Goles"
FROM Gol;

--Obt�n la fecha de nacimiento m�nima.


SELECT MIN(fecnac) AS "Fecha M�nima"
FROM Jugador;

--Selecciona el equipo con la clave mas alta


SELECT MAX(idEquipo) AS "Clave de Equipo M�xima"
FROM Equipo;

--Obt�n el mayor n�mero de goles anotador en un partido.


SELECT MAX(goles)AS "M�ximo N�mero de Goles"
FROM Gol;

--Obt�n la fecha de nacimiento m�xima.


SELECT MAX(fecnac) AS "Fecha M�xima"
FROM Jugador;

--Selecciona el n�mero de equipos activos


--COUNT: Cuenta el n�mero de registros que cumplen la condici�n.
/*
SELECT COUNT(column_name)
FROM table_name
WHERE condition;
*/
SELECT COUNT(idEquipo)
FROM Equipo
WHERE Equipo.Activo = 'S';

--BETWEEN: Especifica un intervalo de b�squeda de registros.


--Va en la cl�usula WHERE.
--Obt�n el n�mero de jugadores que nacieron en 1996.
--Traer el n�mero de jugador, nombre completo y los goles de los jugadores
--que han anotador entre 3 y 6 goles en un partido de cualquier torneo.
SELECT j.idJugador,
j.nombre || ' ' || j.app || ' ' || j.apm AS "Nombre Completo",
go.goles
FROM Jugador j, Gol go
WHERE j.idJugador = go.idJugador AND go.goles BETWEEN 3 AND 6;

--Traer el n�mero de jugadores que nacieron en el a�o 1996.


SELECT COUNT(j.idJugador) AS "Jugadores Nacidos en 1996"
FROM Jugador j
WHERE j.fecNac BETWEEN '1/1/1996' AND '31/12/1996';

--Traer el n�mero de juegos Finalizados en el torneo 2.


SELECT COUNT(ju.idJuego) AS "# Juegos Finalizados"
FROM Juego ju
WHERE ju.idJornada BETWEEN 200 AND 299 AND ju.estatus = 'F';

--AVG: Promedia el valor de los registros que cumplen la condici�n.


--Obten el promedio de goles que se anotan por partido de todos los torneos.
SELECT AVG(go.goles) AS Promedio
FROM Gol go;

SELECT ROUND(AVG(go.goles),0) AS Promedio


FROM Gol go;

--SUM: Suma el valor de los registros que cumplan con la condici�n.


--Suma todos lo goles que se anotaron en el torneo 1.
SELECT SUM(go.goles) AS "Goles Torneo 1"
FROM Gol go, Juego ju
WHERE go.idJuego = ju.idJuego AND ju.idJornada BETWEEN 100 AND 199;

--Suma lo goles del jugador 1 en el Torneo 1.


SELECT SUM(go.goles) AS "Goles Jugador 1"
FROM Gol go, Juego ju
WHERE go.idJuego = ju.idJuego AND
ju.idJornada BETWEEN 100 AND 199 AND
go.idJugador = 1;

--UNION
/*
Combina los resultados de dos o m�s consultas "select" en un �nico resultado.
Se usan cuando los datos que se quieren obtener pertenecen a distintas tablas
y no se puede acceder a ellos con una sola consulta.
Es necesario que las tablas referenciadas tengan tipos de datos similares,
la misma cantidad de campos y
el mismo orden de campos en la lista de selecci�n de cada consulta.
*/
--Obt�n los puntos que lleve el equipo Mayas en el torneo 2.
SELECT SUM(ju.puntos1) AS Puntos
FROM Equipo e1, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e1.nombre = 'MAYAS' AND
ju.idJornada BETWEEN 201 AND 299
UNION
SELECT SUM(ju.puntos2) AS Puntos
FROM Equipo e2, Juego ju
WHERE e2.idEquipo = ju.idEquipo2 AND
e2.nombre = 'MAYAS' AND
ju.idJornada BETWEEN 201 AND 299
;

CREATE TABLE puntos


(
puntos NUMBER(2) NOT NULL
);

INSERT INTO puntos (puntos)


SELECT SUM(ju.puntos1) AS Puntos
FROM Equipo e1, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e1.nombre = 'MAYAS' AND
ju.idJornada BETWEEN 201 AND 299;

INSERT INTO puntos (puntos)


SELECT SUM(ju.puntos2) AS Puntos
FROM Equipo e2, Juego ju
WHERE e2.idEquipo = ju.idEquipo2 AND
e2.nombre = 'MAYAS' AND
ju.idJornada BETWEEN 201 AND 299;

SELECT SUM(puntos)AS Puntos FROM puntos;

DROP TABLE puntos;

--Traer los partidos del torneo 2 de los clicos.


--El formato debe ser 'Nombre VS Nombre'.
SELECT e1.Nombre || ' VS ' || e2.Nombre AS Juego
FROM Equipo e1, Equipo e2, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e2.idEquipo = ju.idEquipo2 AND
ju.idJornada BETWEEN 201 AND 299 AND
e1.Nombre = 'CLICOS'
UNION
SELECT e1.Nombre || ' VS ' || e2.Nombre AS Juego
FROM Equipo e1, Equipo e2, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e2.idEquipo = ju.idEquipo2 AND
ju.idJornada BETWEEN 201 AND 299 AND
e2.Nombre = 'CLICOS';

--Arbitros que han arbitreado un juego.


--DISTINCT
--Omite los registros que contienen datos duplicados en los campos
--seleccionados. Para que los valores de cada campo listado en la
--instrucci�n SELECT se incluyan en la consulta deben ser �nicos.
INSERT INTO Arbitro
VALUES
(5,'RAMSES','GONZALEZ','GUERRERO','ramses@gmail.com','8118881166','81880050');

INSERT INTO Arbitro


VALUES
(6,'CHRISTIAN','GONZALEZ','GUERRERO','ramses@gmail.com','8118881177','81880060');

SELECT *
FROM Arbitro
ORDER BY Arbitro.idArbitro;

SELECT DISTINCT(j.idArbitro),
a.nombre || ' ' || a.app || ' ' || a.apm AS Arbitro
FROM Arbitro a, Juego j
WHERE j.idArbitro = a.idArbitro
ORDER BY j.idArbitro;

DELETE
FROM Arbitro a
WHERE a.idArbitro IN (5,6);

--Obt�n los equipos que participaron en el torneo 1


SELECT DISTINCT(e1.Nombre)
FROM Equipo e1, Equipo e2, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e2.idEquipo = ju.idEquipo2 AND
ju.idJornada BETWEEN 100 AND 199;
UNION ALL
SELECT DISTINCT(e2.Nombre)
FROM Equipo e1, Equipo e2, Juego ju
WHERE e1.idEquipo = ju.idEquipo1 AND
e2.idEquipo = ju.idEquipo2 AND
ju.idJornada BETWEEN 100 AND 199;

--LIKE
--Se usa sobre todo con textos, permite obtener registros cuyo
--valor en un campo cumpla una condici�n textual.
/*
% Una serie cualquiera de caracteres
_ Un car�cter cualquiera
*/
--Manda los arbitros (nombre, app, apm) que su apellido materno empiece con gu
--Ordenar por apellido materno DESC
SELECT a.nombre, a.app, apm
FROM Arbitro a
WHERE a.apm LIKE 'GU%'
ORDER BY a.apm DESC;

--Manda los arbitros (nombre, app, apm) que su apellido paterno no empiece con G
--Ordenar por apellido paterno ASC
SELECT a.nombre, a.app, apm
FROM Arbitro a
WHERE a.app NOT LIKE 'G%'
ORDER BY a.app;

--Trae el nombre de equipo que empiecen son M y terminen con S.


--Ordenar por nombre de equipo ASC
SELECT e.nombre
FROM Equipo e
WHERE e.nombre LIKE 'M%S'
ORDER BY e.nombre;

--Trae el nombre de equipo donde la segunda letra sea A


--Ordenar por nombre de equipo DESC
SELECT e.nombre
FROM Equipo e
WHERE e.nombre LIKE '_A%'
ORDER BY e.nombre DESC;

--Trae el nombre de equipo donde la pen�ltima letra sea O


--Ordenar por nombre de equipo DESC
SELECT e.nombre
FROM Equipo e
WHERE e.nombre LIKE '%O_'
ORDER BY e.nombre DESC;

--Trae los jugadores cuyo n�mero celular sea de Nuevo Le�n


SELECT j.*
FROM Jugador j
WHERE j.cel LIKE '81%';

--Elimina los Jugadores del Equipo 11


DELETE FROM Jugador WHERE Jugador.idEquipo = 11;

--Elimina el Equipo 11
DELETE FROM Equipo WHERE Equipo.idEquipo = 11;

--Vistas
/*
Una vista es una tabla l�gica basada en una tabla u otra vista.
No contiene datos en s� misma, pero es como una ventana a trav�s de la cual se
pueden ver o cambiar los datos de las tablas.
Podemos representar con ellas subconjuntos l�gicos o combinaciones de datos.
Las tablas sobre las cuales se basa una vista se llaman tablas base.
Se almacenan en el Diccionario de Datos, USER_VIEWS.

Para restringir el acceso a la B.D.


Para realizar consultas complejas de manera f�cil.
Para obtener una independencia de los datos
Para presentar diferentes vistas de los mismos datos.
*/
--Crea una vista para el torneo 1 y para el torneo 2 que contengan los campos:
/*
idJornada
idJuego
FecReg
Estatus
Nombre Equipo1
Goles1
Puntos1
Nombre Equipo2
Goles2
Puntos2
Nombre Completo Arbitro
Obser
*/
CREATE VIEW torneo1
AS
SELECT
j.idJornada,
j.idJuego,
j.fecReg,
j.estatus,
e1.nombre AS Equipo1,
j.goles1,
j.puntos1,
e2.nombre AS Equipo2,
j.goles2,
j.puntos2,
j.obser,
a.nombre || ' ' || a.app || ' ' || a.apm AS Arbitro
FROM Juego j, Equipo e1, Equipo e2, Arbitro a
WHERE j.idArbitro = a.idArbitro AND
j.idEquipo1 = e1.idEquipo AND
j.idEquipo2 = e2.idEquipo AND
j.idJornada >= 100 AND
j.idJornada <= 199
ORDER BY j.idJornada, j.idJuego
;

SELECT *
FROM torneo1;

CREATE VIEW torneo2


AS
SELECT
j.idJornada,
j.idJuego,
j.fecReg,
j.estatus,
e1.nombre AS Equipo1,
j.goles1,
j.puntos1,
e2.nombre AS Equipo2,
j.goles2,
j.puntos2,
j.obser,
a.nombre || ' ' || a.app || ' ' || a.apm AS Arbitro
FROM Juego j, Equipo e1, Equipo e2, Arbitro a
WHERE j.idArbitro = a.idArbitro AND
j.idEquipo1 = e1.idEquipo AND
j.idEquipo2 = e2.idEquipo AND
j.idJornada >= 200 AND
j.idJornada <= 299
ORDER BY j.idJornada, j.idJuego
;

SELECT *
FROM torneo2;

DROP VIEW torneo1;


DROP VIEW torneo2;

--Se desea tener un reporte para tener el contacto de todos los capitanes
-- de cada equipo. Se ocupa la clave del equipo, nombre del equipo, nombre
--del capit�n (nombre, app, apm),email y celular.
--Solo de los equipos activos.
--Haz una vista que se llame capitan
CREATE VIEW capitan
AS
SELECT e.idEquipo AS Equipo,
e.nombre AS NomEquipo,
j.nombre AS Nombre,
j.app,
j.apm,
j.email,
j.cel
FROM Jugador j, Equipo e
WHERE j.idJugador = e.capitan;

SELECT *
FROM Capitan;

--GROUP BY: Crea grupo de datos, por lo tanto se pueden usar funciones de grupo
--(tambi�n llamadas funciones de agregado) para devolver informaci�n resumida
--para cada grupo.
--Nota:
/*
Si se incluye una funci�n de grupo en una cl�usula SELECT, no se puede seleccionar
resultados individuales a menos que la columna
aparezca en la cl�usula GROUP BY.
No se pueden usar alias en GROUP BY.
Por defecto, tras un GROUP BY, las filas se ordenan de forma ascendente
*/
--Traer nombre de equipo y cuantos jugadores tiene cada equipo.
--Ordenas de forma descendente por n�mero de jugadores.
SELECT e.nombre, COUNT(j.idJugador) AS Jugadores
FROM Jugador j, Equipo e
WHERE j.idEquipo = e.idEquipo
GROUP BY e.nombre
ORDER BY Jugadores DESC;

--Obten los goles anotados por cada jornada del torneo 1.


--Traer jornada y n�mero de goles.
--Ordenas ASC por jornada.
SELECT t1.idJornada, SUM(goles1) + SUM(goles2) AS Goles
FROM Torneo1 t1
GROUP BY t1.idJornada
ORDER BY t1.idJornada;

--Traer el promedio de goles por partido cada jugador que anot� goles en el torneo
1.
--Mandar nombre completo del jugado y promedio de goles.
--Ordenar ascendente por app.
SELECT j.nombre || ' ' || j.app || ' ' || j.apm as Nombre,
ROUND(AVG(go.goles),0) as Goles
FROM Gol go, Jugador j, Torneo1 t1
WHERE j.idJugador = go.idJugador AND go.idJuego = t1.idJuego
GROUP BY j.nombre, j.app, j.apm
ORDER BY j.app;

--Mandar la tabla de goleadores del torneo 2 hasta el momento.


--Nombre del jugador, nombre de equipo y n�mero de goles.
--Ordenar ascendente por el n�mero de goles.
SELECT j.nombre || ' ' || j.app || ' ' || j.apm as Nombre,
e.nombre AS Equipo,
SUM(go.goles) as Goles
FROM Gol go, Jugador j, Equipo e, Torneo2 t2
WHERE j.idJugador = go.idJugador AND
e.idEquipo = j.idEquipo AND
go.idJuego = t2.idJuego
GROUP BY j.nombre, j.app, j.apm, e.nombre
ORDER BY goles DESC;

--STORE PROCEDURES
/*
Un procedimiento almacenado (stored procedure en ingl�s) es un programa
(o procedimiento) almacenado f�sicamente en una base de datos.
La ventaja de un procedimiento almacenado es que al ser ejecutado, en respuesta
a una petici�n de usuario, es ejecutado directamente en el motor de bases de datos,

el cual usualmente corre en un servidor separado.


Se pueden realizar INSERT, SELECT, UPDATE o DELETE.
Se puede realizar para mandar mensajes o informaci�n sobre captura de errores.
Se puede realizar para hacer ciertos c�lculos.
Se ocupan par�metros de entrada y salida.
*/

--Crear un Store Procedure que mande el mensaje de Hola Mundo.


CREATE OR REPLACE PROCEDURE spHola
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hola Mundo');
END;
SET SERVEROUTPUT ON;

EXECUTE spHola;

--Crear un store produce para agregar un nuevo arbirtro


CREATE OR REPLACE PROCEDURE spAgregarArbitro
(
pidArbitro IN Number,
pnombre IN Varchar2,
papp IN Varchar2,
papm IN Varchar2,
pemail IN Nvarchar2,
pcel IN Char,
ptel IN Char
)
AS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(ar.idArbitro) INTO vtotal FROM Arbitro ar WHERE ar.idArbitro =
pidArbitro;
IF vtotal = 0 THEN
INSERT INTO Arbitro VALUES(pidArbitro,pnombre,papp,papm,pemail,pcel,ptel);
ELSE
DBMS_OUTPUT.PUT_LINE('Ya existe un n�mero de arbitro con la clave enviada');
END IF;
END;

EXECUTE spAgregarArbitro(1,'LEONARDO','TERAN',
'SILVA','lteran@gmail.com','8111234567','8182838485');

EXECUTE spAgregarArbitro(11,'LEONARDO','TERAN',
'SILVA','lteran@gmail.com','8111234567','8182838485');

SELECT * FROM Arbitro;

--Crear un Store Procedure para Actualizar la informaci�n de un Arbitro


CREATE OR REPLACE PROCEDURE spActualizarArbitro
(
pidArbitro IN Number,
pnombre IN Varchar2,
papp IN Varchar2,
papm IN Varchar2,
pemail IN Nvarchar2,
pcel IN Char,
ptel IN Char
)
AS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(ar.idArbitro) INTO vtotal FROM Arbitro ar WHERE ar.idArbitro =
pidArbitro;
IF vtotal = 0 THEN
DBMS_OUTPUT.PUT_LINE('No existe un n�mero de arbitro con la clave enviada');
ELSE
UPDATE Arbitro
SET nombre = pnombre, app = papp, apm = papm, email = pemail, tel = ptel, cel =
pcel
WHERE idArbitro = pidArbitro;
END IF;
END;

EXECUTE spActualizarArbitro(13,'LEONARDO','RIVERA',
'SILVA','lrivera@gmail.com','8111234567','82838485');

EXECUTE spActualizarArbitro(11,'LEONARDO','RIVERA',
'SILVA','lrivera@gmail.com','8111234567','82838485');

SELECT * FROM Arbitro;

--Crear un Store Procedure para eliminar un Arbitro en base a su clave


CREATE OR REPLACE PROCEDURE spEliminarArbitro
(
pidArbitro IN Number
)
AS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(ar.idArbitro) INTO vtotal FROM Arbitro ar WHERE ar.idArbitro =
pidArbitro;
IF vtotal = 0 THEN
DBMS_OUTPUT.PUT_LINE('No existe un n�mero de arbitro con la clave enviada');
ELSE
DELETE FROM Arbitro
WHERE idArbitro = pidArbitro;
END IF;
END;

EXECUTE spEliminarArbitro(12);

EXECUTE spEliminarArbitro(11);

SELECT * FROM Arbitro;

--Crear un Store Procedure para buscar un Arbitro por su clave


CREATE OR REPLACE PROCEDURE spBuscarArbitro
(
pidArbitro IN Number,
parbitro OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN parbitro FOR
SELECT ar.*
FROM Arbitro ar WHERE ar.idArbitro = pidArbitro;
END;

VARIABLE consulta REFCURSOR;


EXECUTE spBuscarArbitro(50,:consulta);
PRINT consulta;

DROP PROCEDURE spAgregarArbitro;


DROP PROCEDURE spActualizarArbitro;
DROP PROCEDURE spEliminarArbitro;
DROP PROCEDURE spBuscarArbitro;

--Hacer store procedures para agregar, actualizar, buscar o eliminar un equipo.


--spAgregarEquipo
CREATE OR REPLACE PROCEDURE spAgregarEquipo
(
pidEquipo IN Equipo.idEquipo%TYPE,
pnombre IN Equipo.nombre%TYPE,
puniforme IN Equipo.uniforme%TYPE,
pfecreg IN Equipo.fecreg%TYPE,
pactivo IN Equipo.activo%TYPE,
pcapitan IN Equipo.capitan%TYPE
)
IS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(e.idEquipo) INTO vtotal FROM Equipo e WHERE e.idEquipo = pidEquipo;
IF vtotal = 0 THEN
INSERT INTO Equipo
VALUES(pidEquipo,pnombre,puniforme,pfecreg,pactivo,pcapitan);
ELSE
DBMS_OUTPUT.PUT_LINE('Ya existe un n�mero de equipo con la clave enviada');
END IF;
END;

EXECUTE spAgregarEquipo(12,'FANTASMAS','NECAXA','01/04/2019','N',92);

SELECT * FROM Equipo;

--spActualizarEquipo
CREATE OR REPLACE PROCEDURE spActualizarEquipo
(
pidEquipo IN Equipo.idEquipo%TYPE,
pnombre IN Equipo.nombre%TYPE,
puniforme IN Equipo.uniforme%TYPE,
pfecreg IN Equipo.fecreg%TYPE,
pactivo IN Equipo.activo%TYPE,
pcapitan IN Equipo.capitan%TYPE
)
IS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(e.idEquipo) INTO vtotal FROM Equipo e WHERE e.idEquipo = pidEquipo;
IF vtotal = 0 THEN
DBMS_OUTPUT.PUT_LINE('No existe un n�mero de equipo con la clave enviada');
ELSE
UPDATE Equipo
SET nombre = pnombre, uniforme = puniforme, fecreg = pfecreg, activo = pactivo,
capitan = pcapitan
WHERE idEquipo = pidEquipo;
END IF;
END;

EXECUTE spActualizarEquipo(12,'PODEROSOS','MEXICO','01/04/2019','S',92);

SELECT * FROM Equipo;


--spEliminarEquipo
CREATE OR REPLACE PROCEDURE spEliminarEquipo
(
pidEquipo IN Equipo.idEquipo%TYPE
)
IS
vtotal number;
BEGIN
vtotal := 0;
SELECT COUNT(e.idEquipo) INTO vtotal FROM Equipo e WHERE e.idEquipo = pidEquipo;
IF vtotal = 0 THEN
DBMS_OUTPUT.PUT_LINE('No existe un n�mero de equipo con la clave enviada');
ELSE
DELETE FROM Equipo
WHERE idEquipo = pidEquipo;
END IF;
END;

EXECUTE spEliminarEquipo(12);

SELECT * FROM Equipo;

--spBuscarEquipo
CREATE OR REPLACE PROCEDURE spBuscarEquipo
(
pidEquipo IN Number,
pEquipo OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN pEquipo FOR
SELECT e.*
FROM Equipo e WHERE e.idEquipo = pidEquipo;
END;

VARIABLE consulta REFCURSOR;


EXECUTE spBuscarEquipo(12,:consulta);
PRINT consulta;

DROP PROCEDURE spAgregarEquipo;


DROP PROCEDURE spActualizarEquipo;
DROP PROCEDURE spEliminarEquipo;
DROP PROCEDURE spBuscarEquipo;

También podría gustarte