Listado completo de tutoriales
96 - Vistas basadas en otras vistas |
En MySQL podemos crear una vista y dentro del comando 'select' que definimos cuando creamos la vista podemos hacer referencia a otra vista ya existente.
En el concepto anterior creamos la vista 'vista_empleados' con la siguiente sintaxis:
create view vista_empleados as
select concat(apellido,' ',e.nombre) as nombre,
sexo,
s.nombre as seccion,
cantidadhijos
from empleados as e
join secciones as s on codigo=seccion;
Podemos crear una nueva vista basada en la vista 'vista_empleados' que nos retorne todos los empleados que tienen hijos:
create view vista_empleados_con_hijos as
select nombre,
sexo,
seccion,
cantidadhijos
from vista_empleados
where cantidadhijos>0;
Como vemos en la cláusula from hacemos referencia a la vista ya existente llamada 'vista_empleados'.
Ingresemos al programa "Workbench" y ejecutemos el siguiente bloque de instrucciones SQL:
drop table if exists empleados;
drop table if exists secciones;
create table secciones(
codigo int auto_increment primary key,
nombre varchar(30),
sueldo decimal(5,2)
);
create table empleados(
legajo int primary key auto_increment,
documento char(8),
sexo char(1),
apellido varchar(40),
nombre varchar(30),
domicilio varchar(30),
seccion int not null,
cantidadhijos int,
estadocivil char(10),
fechaingreso date
);
insert into secciones(nombre,sueldo) values('Administracion', 300);
insert into secciones(nombre,sueldo) values('ContadurĂa', 400);
insert into secciones(nombre,sueldo) values('Sistemas', 500);
insert into empleados (documento,sexo,apellido,nombre,domicilio,seccion,cantidadhijos,estadocivil,fechaingreso)
values ('22222222','f','Lopez','Ana','Colon 123',1,2,'casado','1990-10-10');
insert into empleados (documento,sexo,apellido,nombre,domicilio,seccion,cantidadhijos,estadocivil,fechaingreso)
values('23333333','m','Lopez','Luis','Sucre 235',1,0,'soltero','1990-02-10');
insert into empleados (documento,sexo,apellido,nombre,domicilio,seccion,cantidadhijos,estadocivil,fechaingreso)
values('24444444','m','Garcia','Marcos','Sarmiento 1234',2,3,'divorciado','1998-07-12');
insert into empleados (documento,sexo,apellido,nombre,domicilio,seccion,cantidadhijos,estadocivil,fechaingreso)
values('25555555','m','Gomez','Pablo','Bulnes 321',3,2,'casado','1998-10-09');
insert into empleados (documento,sexo,apellido,nombre,domicilio,seccion,cantidadhijos,estadocivil,fechaingreso)
values('26666666','f','Perez','Laura','Peru 1254',3,3,'casado','2000-05-09');
drop view if exists vista_empleados;
create view vista_empleados as
select concat(apellido,' ',e.nombre) as nombre,
sexo,
s.nombre as seccion,
cantidadhijos
from empleados as e
join secciones as s on codigo=seccion;
select nombre, seccion, cantidadhijos from vista_empleados;
drop view if exists vista_empleados_con_hijos;
create view vista_empleados_con_hijos as
select nombre,
sexo,
seccion,
cantidadhijos
from vista_empleados
where cantidadhijos>0;
select * from vista_empleados_con_hijos;
Genera una salida similar a esta:
