You are on page 1of 4

Bases de Datos Grado en Ingeniería Informática

SOLUCIONES (PARTE SQL)

EJERCICIO 1 (20 puntos)

Dado el siguiente esquema relacional:

Restaurantes(Id_rte, nombre, calle, numero, localidad)


Camareros (Id_camarero, ape, nom, Id_rte, comision)
Mesas(Id_mesa, Id_rte, numero_ personas)
Camarero-Mesas(Id_mesa, Id_rte, fecha, turno, Id_camarero)
El atributo turno puede tomar dos valores: (comida, cena)
Todos los atributos Not Null

Camareros.Id_rteRestaurantes
Mesas.Id_rteRestaurantes
Camarero-Mesas.Id_mesa, Camarero-Mesas.Id_rteMesas
Camarero-Mesas.Id_camareroCamareros

Escriba las sentencias SQL para resolver los siguientes ejercicios de manera que puedan
ejecutarse correctamente en un servidor de bases de datos Oracle:
(Tener en cuenta que los ejercicios no están relacionados, eso quiere decir que no se
puede utilizar el resultado de una consulta realizada en un ejercicio previo)

1) Crear la tabla CamarerosMas5Mesas con los datos de los camareros


(Id_camarero, ape, nom,) que han atendido más de 5 mesas. (4 puntos)
2) Listar los camareros (Id_camarero, ape, nom) que han atendido más mesas que
todos los camareros que trabajan en el restaurante “Se Come Bien”. (4 puntos)
3) Crear una vista CalculoComision (Id_camarero, Comision), asignándole a cada
camarero un importe de comisión calculado de la siguiente manera: (4 puntos)
 Si el restaurante es de Madrid 10 euros por mesa atendida.
 Si el restaurante es de Barcelona 12 euros por mesa tendida
 Y en el resto de casos 5 euros por mesa atendida.
4) Listar las parejas de restaurantes que están en la misma ciudad (Id_rte, Id_rte)
Tenga en cuenta que no deben aparecer parejas repetidas, por ejemplo (a,b) y
(b,a) o (a,a). (4 puntos).
5) Listar los camareros (IdCamarero, Ape, Nom) que han trabajado solo en el turno
de comida. (4 puntos)

Final Extraordinario (27/Junio/2017) – Tema 4 Página 1


Bases de Datos Grado en Ingeniería Informática

SOLUCIONES

1.
CREATE TABLE CamarerosMas5Mesas (Id_camarero, ape, nom) AS
SELECT Id_camarero, ape, nom
FROM Camareros c Camarero_mesas m
WHERE c.Id_camarero = m.Id_Camarero
GROUP BY Id_camarero, ape, nom
HAVING count(*) >5

(aquí también pueden haber creado una vista con el select y


crear la tabla seleccionando de la vista, es decir meter el
select éste en una vista, previamente).

2.

Cantidad de Mesas que han atendido los camareros

CREATE OR REPLACE VIEW MesasCamareros(Id_Camarero, Mesas)


AS
SELECT Id_camarero, count(*)
FROM Camareros-mesas
GROUP BY Id_camareros;

Mesas que han atendido los camareros del restaurante “Se


Come Bien”

CREATE OR REPLACE VIEW view CamarerosSeComeBien


(Id_camarero, Mesas) AS
SELECT Id_Camarero, count(*)
FROM Camareros c, Restaurantes r, Camareros-Mesas
WHERE Nom_rte = “Se Come Bien” AND c.Idrte = r.Idrte
GROUP BY Id_Camarero;

Camareros que han atendido más mesas que todos los


camareros que trabajan en el restaurante “Se Come Bien”

SELECT Id_camarero, ape, nom


FROM MesasCamareros m, Camareros c
WHERE m.Id_Camarero = c.Id_Camarero AND m.Mesas > select
Max(mesas)From CamarerosSeComeBien;

(también se puede hace con >ALL)

3.
Mesas que han atendido los camareros, indicando la
localidad del restaurante

Final Extraordinario (27/Junio/2017) – Tema 4 Página 2


Bases de Datos Grado en Ingeniería Informática

CREATE OR REPLACE VIEW


MesasCamarerosLocalidad(Id_Camarero, Id_rte, Mesas,
localidad) AS
SELECT Id_camarero, Id_rte, localidad, count(*)
FROM Camareros-mesas a, Restaurantes r
WHERE c.Id_rte = r.id_rte
GROUP BY Id_camareros, Id_rte, localidad;

Le calculo a cada camarero la comisión teniendo en cuenta


la localidad del restaurante en el que trabaja

CREATE OR REPLACE VIEW CalculoComision (Id_Camarero,


Comision) As
SELECT Id_camarero,
DECODE (localidad, ‘Madrid’, comision = mesas * 10,
‘Barcelona’, comision = mesas *12,
Mesas *5)
Comision
FROM MesasCamarerosLocalidad

4.

SELECT r.Id_rte, e.Id_rte


FROM Restaurantes r, Resaturantes e
WHERE r.Id_rte<Id_rte AND r.localidad = e.localidad

5.

Camareros que han trabajado en turno de comida.

CREATE OR REPLACE VIEW CamarerosComida AS


SELECT distinct Id_Camarero, Ape, Nom
FROM Camareros-Mesas m, Camareros c
WHERE c.Id_Camarero = m.Id Camarero AND c.turno
=’comida’

Camareros que han trabajado en restaurantes han trabajado


en turno de cena.
CREATE OR REPLACE VIEW CamarerosCena AS
SELECT distinct Id_Camarero, Ape, Nom
FROM Camareros-Mesas m, Camareros c
WHERE c.Id_Camarero = m.Id Camarero AND c.turno
=’cena’

Final Extraordinario (27/Junio/2017) – Tema 4 Página 3


Bases de Datos Grado en Ingeniería Informática

Camareros que han trabajado SÓLO en el turno de la comida.


SELECT Id_Camarero, Ape, Nom FROM CamarerosComida
MINUS
SELECT Id_Camarero, Ape, Nom FROM CamareroCena

Final Extraordinario (27/Junio/2017) – Tema 4 Página 4

You might also like