Está en la página 1de 5

PRÁCTICAS VISTAS

1. Crear una vista que muestre para cada centro su nombre y el nombre de los
departamentos ubicados en el centro. Ordenar por nombre del centro:

create or replace view view1 as


select tcentr.NOMCE as 'centro' , tdepto.NOMDE as 'departamento'
from tcentr inner join tdepto on tcentr.NUMCE=tdepto.NUMCE
order by tcentr.NOMCE;

2. Crear una vista que muestre todos los datos de los departamentos que no dependen de
ningún otro departamento:

create or replace view view2 as


select * from tdepto where DEPDE is null;

3. Crear una vista que muestre para cada departamento su nombre y el número de
empleados que trabajan en el con el formato siguiente:

En el Departamento XXX Trabajan XX empleados:

create or replace view view3 as


select CONCAT ('EN EL DEPARTAMENTO ', tdepto.NOMDE, ' trabajan ',
count(temple.NUMEM), ' empleados') as 'Nº de empleados por
Departamento'
from tdepto inner join temple on tdepto.NUMDE=temple.NUMDE group by
temple.NUMDE;
PRÁCTICAS VISTAS

4. Crear una vista que contenga las columnas numem, numde, extel y nomem de los
empleados que tengan comisión:

create or replace view view4 as


select numem, numde, extel, nomem, comis from temple where comis is
not null and comis >0;

5. Crear una vista en la que se muestren todos los datos de los empleados que durante
este año cumplen 50 años o más de servicio:

create or replace view view5 as


select * from temple where timestampdiff (year, fecin, now())>=50;

6. Modificar la vista anterior para que muestre la misma información para los empleados
que a día de hoy tienen cumplidos 60 o más años de servicio:

create or replace view view6 as


select * from temple where timestampdiff (year, fecin, now())>=60;
PRÁCTICAS VISTAS

7. Crea una vista con todos los datos de los empleados cuyo sueldo iguala o supera la
media de los sueldos de todos los empleados de la empresa. Ordenar por salario:

create or replace view view7 as


select * from temple where salar >= (select avg(salar) from temple);

8. Crea una vista para disponer de la siguiente información de todos los departamentos:
Numero departamento, nombre departamento, nº empleados, total salario, total comisión.

create or replace view view8 as


select temple.NUMDE as 'Departamento', tdepto.NOMDE as 'Nombre',
count(temple.NUMEM) as 'NºEmpleados', sum(temple.SALAR) as
'Total_Salario', sum(temple.COMIS) as 'Total_Comisión'
from temple inner join tdepto on temple.NUMDE = tdepto.NUMDE
group by tdepto.NUMDE;

9. Crear una vista que muestre el nombre de los departamentos que tienen más de 3
empleados:

create or replace view view9 as


select nomde from tdepto where numde in
(select NUMDE from temple group by temple.NUMDE having
count(numem)>3);
PRÁCTICAS VISTAS

10. Crea una vista con todos los datos de los empleados de los departamentos 100 o 110.
La sentencia SQL de creación debe contemplar la restricción que obligue a que cualquier
operación de manipulación sobre dicha vista sólo pueda realizarse con los empleados
de estos 2 departamentos. Esta restricción deberá propagarse a todas las vista que se
creen a partir de esta vista.

create or replace view view10 as


select * from temple where numde = 100 or numde=110 with check option;

11. Crear una consulta a partir de la anterior que muestre los empleados que ingresaron en
la empresa después del año 1985:

create or replace view view11 as


select * from view10 where fecin>('1985-01-01');

12. Crear una consulta que muestre el nombre y definición de las vistas de la BD que sean
actualizables:

select table_name, is_updatable from information_schema.VIEWS where


table_schema='empleados_2016';
PRÁCTICAS VISTAS

13. Intentar realizer las siguientes acciones. Para las acciones que no se puedan ejecutar o
no afecten a ninguna fila (update, delete), explicar por qué:

a) INSERT VISTA10 VALUES (560,111,220,'1990-1-


23',DATE(NOW()),1000.09,780.23,2,'PEDRO');

NO SE PUEDE YA QUE EL EMPLEADO NO PERTENECE AL DEPARTAMENTO 110 NI 111

b) INSERT VISTA11 VALUES (560,111,220,'1990-1-


23',DATE(NOW()),1000.09,780.23,2,'PEDRO');

c) INSERT VISTA11 VALUES (570,110,220,'1990-1-23','1986-2-


6',1000.09,780.23,2,'LOLA');

d) INSERT VISTA11 VALUES (580,100,220,'1990-1-23','1985-2-


6',1000.09,780.23,2,'PAULA');

e) UPDATE VISTA10 SET NOMEM = 'PEPA' WHERE NUMEM = 560;

f) UPDATE VISTA11 SET NOMEM = 'PEPA' WHERE NUMEM = 570;

g) DELETE FROM VISTA10 WHERE NUMEM = 560;

h) DELETE FROM VISTA11 WHERE NUMEM = 570;

i) DELETE FROM VISTA11 WHERE NUMEM = 580;

También podría gustarte