miércoles, 1 de mayo de 2013

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