drop table Empleado cascade constraints;
drop table Departamento cascade constraints;
drop table Asignacion cascade constraints;
CREATE TABLE Empleado(
num_emp number,
nombre varchar2(40) constraint non_nn NOT NULL,
tarifa_hora varchar2(20) constraint tar_nn NOT NULL,
profesion varchar2(40) constraint pro_nn NOT NULL,
constraint num_emp_pk primary key(num_emp));
CREATE TABLE Departamento(
numero number,
nombre varchar2(40) constraint nondep_nn NOT NULL,
constraint numero_pk primary key(numero));
CREATE TABLE Asignacion(
num_emp number, constraint num_emp_fk foreign key(num_emp)
references Empleado(num_emp),
fecha_ini varchar2(20) constraint fecha_ini_nn NOT NULL,
numerodep number, constraint numerodep_fk foreign key(numerodep)
references Departamento(numero));
INSERT into Empleado VALUES(1235,'Marcia Pérez','7000','Contador');
INSERT into Empleado VALUES(1412,'Carlos garcía','6500','Analista de Sistemas');
INSERT into Empleado VALUES(2920,'Ricardo Gómez','5800','Analista de Sistemas');
INSERT into Empleado VALUES(3231,'Patricio Morán','6300','Ingeniero en Informática');
INSERT into Empleado VALUES(2331,'Paula Marín','9000','Ingeniero en Informática');
INSERT into Empleado VALUES(4531,'Ricardo Pardo','6300','Contador');
INSERT into Empleado VALUES(8931,'ana Mora','7300','Analista de Sistemas');
INSERT into Empleado VALUES(3267,'Paula Morán','9200','Ingeniero Comercial');
INSERT into departamento VALUES(101014,'Finanzas');
INSERT into departamento VALUES(110115,'Contabilidad');
INSERT into departamento VALUES(101514,'Informática');
INSERT into departamento VALUES(110215,'Desarrollo');
INSERT into Asignacion VALUES(1235,'20/03/2013',110115);
INSERT into Asignacion VALUES(2920,'18/01/2013',110215);
INSERT into Asignacion VALUES(1412,'17/02/2013',110215);
INSERT into Asignacion VALUES(3231,'20/03/2013',101514);
INSERT into Asignacion VALUES(2331,'25/02/2013',110215);
INSERT into Asignacion VALUES(4531,'18/01/2013',101014);
INSERT into Asignacion VALUES(8931,'17/01/2013',110215);
INSERT into Asignacion VALUES(3267,'20/01/2013',101014);
INSERT into Asignacion VALUES(2920,'25/03/2013',101514);
--------------------------------------------------
---1)Mostrar el nombre y profesion del o los empleados cuya fecha de inicio de
--asignacion fue el 20/03/2013. El resultado debe salir en Mayusculas y
---debe usar un operador Join
desc empleado;
desc asignacion;
desc departamento;
select upper (nombre) Empleado,Upper(profesion) profesion
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where fecha_ini='20/03/2013';
select upper (nombre) Empleado,Upper(profesion) profesion ---Otra forma
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where to_date(fecha_ini)='20/03/2013';
select upper (nombre) Empleado,Upper(profesion) profesion ---Otra forma
from empleado e
join Asignacion asi on e.num_emp = asi.num_emp
where to_date(fecha_ini, 'dd-mm-yyyy')='20/03/2013';
----------------------------------------------------------------
-- 2) Mostrar la cantidad de dias que llevan trabajados Carlos Garcia
--y Ana mora a la fecha de hoy. El resultado debe ser entero y debe
--crear un alias llamado Dias_Trabajados.
select num_emp, nombre,sum (trunc(sysdate -to_date(fecha_ini, 'dd-mm-yyyy')))"Dias Trabajados"
from empleado e
natural join asignacion asi
where lower (nombre) in ('carlos garcia', 'ana mora')
group by num_emp, nombre
order by nombre;
select trunc (125.34) from dual; ---Para esto sirve el trunc
select round (125.35,1) from dual; ---Para esto sirve el round
-------------------------------------------------------------------
--3)Mostrar la cantidad de empleados agrupados por porfesion
select profesion, count(num_emp)
from empleado
group by profesion;
-----------------------------------------
---4)Mostrar la cantidad de empleados cuya tarifa hora es menor que el
--promedio de las tarifas horas de los empleados registrados
--en la base de datos
select count (tarifa_hora)
from empleado
where tarifa_hora<(select avg (tarifa_hora) from empleado);
----------------------------------
--5)En una sola instruccion select mostrar el maximo y minimo de las tarifa hora
--de los empleados.Use alias para mejorar la salida
select max(tarifa_hora) maximo, min (tarifa_hora) minimo
from empleado;
---------------------------
--6)Mostrar el nombre del empleado y nombre de departamento cuya fecha de inicio
-- de asignacion esta entre el 01/01/2013 al 01/03/2013, ambas fechas inclusive
---. EL resultado debe salir en minisculas. Debe usar where
select lower(E.nombre) Nombre,lower (d.nombre) Departamento
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and to_date(fecha_ini, 'dd-mm-yyyy')
between '01/01/2013' and '01/03/2013';
----------------------------------------------------------
---7) Mostrar el nombre y departamento de los empleados que no pertenecen
---al departamento de desarollo
select E.nombre Nombre, d.nombre Departamento
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and lower (d.nombre)<>'Desarrollo';
select E.nombre Nombre, d.nombre Departamento ---Otra forma
from Empleado e,Asignacion asi, departamento d
where e.num_emp=asi.num_emp
and asi.numerodep=d.numero
and lower (d.nombre)not in ('Desarrollo');
select E.nombre, d.nombre ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where lower(d.nombre) not in ('desarrollo');
select E.nombre ---otra forma ---Cuantos trabajan en informatica y no en desarrollo--usamos el MINUS(oPERACION DE
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Informática'
minus --resta una tabla de la otra(operacion de conjunto)
select E.nombre ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Desarrollo';
select E.nombre ---otra forma ---Cuantos trabajan en informatica y no en desarrollo--usamos el MINUS(oPERACION DE
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Informática'
intersect --resta una tabla de la otra(operacion de conjunto)
select E.nombre ---otra forma
from Empleado e
natural join Asignacion asi
join Departamento d on asi.numerodep=d.numero
where d.nombre= 'Desarrollo';
-----------------------------------------
--8)Mostrar el nombre y sueldo liquido de cada empleado cuya asignacion comenco el mes de
--Marzo del 2013, sabiendo que trabajo 20 dias, ocho horas diarias y tiene descuentos del 7%
-- de salud y 12% de AFP. El resultado debe ser entero.Debe crear un alias llamado
---Sueldo_Liquido
select nombre, tarifa_hora*20*8*0.81
from empleado;
select nombre,to_number( tarifa_hora)*20*8*0.81
from empleado;
select nombre, round ((tarifa_hora)*20*8*0.81) "Sueldo Liquido"
from empleado;
select nombre,
tarifa_hora*20*8 Base,
tarifa_hora*20*8*0.19 descuento,
round((tarifa_hora*20*8*0.81)) liquido
from empleado;
select nombre,
to_char(tarifa_hora*20*8 , '999,999,999') base,
to_char(tarifa_hora*20*8*0.19, '999,999,999')descuento,
to_char(round(tarifa_hora*20*8-tarifa_hora*20*8*0.19),'999,999,999') liquido
from empleado;
No hay comentarios.:
Publicar un comentario