Está en la página 1de 9

/*1 Crear una consulta que permita mostrar el apellido y salario de los empleados que ganan ms de 12 000*/

select last_name, salary


from employees
where employees.salary >= 12000;
/*2 Crear una consulta que permita mostrar el apellido y el nmero de departamento del empleado No. 176*/
select last_name, department_id
from employees
where employees.employee_id = 176;
/*3 Crear una consulta que permita mostrar el apellido y salario de los
empleados que su salario no est en el rango de 5000 y 12 000*/
select last_name, salary
from employees
where employees.salary < 5000 or employees.salary > 12000;
/*4 Crear una consulta que permita mostrar el apellido,
el cdigo de trabajo (job_id), de los empleados que empezaron
a laborar entre el 20 de febrero de 2003 y el 1 de mayo de 2005,
ordnelo de forma ascendente por fecha*/
select last_name, job_id, hire_date
from employees
where employees.hire_date >= to_date('20/02/03') and
employees.hire_date <= to_date('01/05/05')
order by hire_date;
select last_name, job_id, hire_date
from employees
where hire_date between '20/02/2003' and '01/05/2005'/* rango en el k se ubica xD!*/
order by hire_date ASC;/*ordena de forma ascendente xD! */
/*5 Crear una consulta que permita mostrar el apellido y el nmero de
departamento de los empleados de los departamentos 20 y 50, en orden
alfabtico. */
select last_name, department_id
from employees
where employees.department_id = 20 or employees.department_id = 50
order by last_name DESC;
/*6 Muestre el apellido y la comisin (en soles) de los empleados; cuyos
salarios se encuentren entre 5000 y 12 000 y adems pertenezcan a los
departamentos 20, 10 y 80*/
select last_name, (nvl(commission_pct,0)*salary) comision
from employees
where (salary between 5000 and 12000) and
(employees.department_id = 20 or
employees.department_id = 10 or
employees.department_id = 80);
/*7 Muestre el nombre y apellido en una sola columna llamada nombre_completo
y la fecha de contratacin de los empleados que entraron en el ao 2004. */
select first_name||' '||last_name "Nombre_completo",
hire_date
from employees
where to_char(hire_date,'yyyy') = 2004;
/* 8 Muestre el nombre y el cdigo de trabajo de todos los empleados que no

tienen un supervisor (manager_id) */


select employee_id, first_name
from employees
where manager_id is null;
/*9 Muestre el apellido, salario y las comisiones de todos los empleados que
ganan comisin, ordnelo de forma descendente los 2 campos*/
select last_name, salary, commission_pct*salary
from employees
where commission_pct is not null
order by salary desc, commission_pct*salary desc;
/*10 Muestre el apellido de los empleados que tengan como tercera letra una a.*/
select last_name
from employees
where substr(last_name, 3, 1) = 'a';
/*11 Muestre el apellido de los empleados que tengan una a y una e en su apellido */
select last_name
from employees
where last_name like '%a%' and last_name like '%e%';
/* 12 Muestre el apellido, cdigo de trabajo y salario de los empleados que
laboran como Sales representative (SA_REP) o Stock clerk (ST_CLERK) y que su
salario no sea igual a 2500, 3000 o 7000. */
select last_name, job_id, salary
from employees
where (job_id = 'SA_REP' or job_id = 'ST_CLERK') and
(salary <> 2500) and
salary <> 3000 and
salary <> 7000;
/* 13. Construya una vista llamada sueldo_empleado que permita visualizar
el cdigo, nombre completo concatenado con el alias Nombre_completo a dicha
columna, el sueldo total (incluyendo el porcentaje de su comision), solo para
los empleados que tienen ms de 5 aos en la empresa. */
select employee_id, concat(concat(first_name, ' '), to_char(last_name)) "Nombre_Completo",
salary, nvl(salary+commission_pct,0)
from employees
where to_char(hire_date,'yyyy') <'2008'
/*14. Construya una vista llamada datos_empleado que permita mostrar el
cdigo, nombre completo, correo electrnico, cargo, nombre del departamento
y nombre del jefe de todos los empleados que fueron contratados en el mes
actual.*/
select e.employee_id, e.first_name||' '||e.last_name "datos empleado",
e.email, j.job_title, d.department_name,
g.first_name "Jefe", e.hire_date
from employees e, employees g, jobs j, departments d
where e.manager_id = g.employee_id and
e.job_id = j.job_id and
e.department_id = d.department_id and
to_char(e.hire_date,'mm') = 9;

/* 15 Construya una vista llamada proyeccin que permita visualizar el cdigo,


apellido, monto a recibir mensual y el monto a percibir en el ao para todos

los empleados que son manager en la empresa. */


select distinct e.employee_id, e.last_name, e.salary "Monto mensual",
e.salary*12 "Monto anual"
from employees e, employees g
where e.manager_id is not null order by e.employee_id asc;
/*16 Muestre la estructura de la tabla DEPARTMENTS. Seleccione todos los datos
de la tabla para los departamentos que estn localizados en la regin Americas.*/
select d.department_id, d.department_name, d.manager_id,
d.location_id
from departments d, locations l, countries co , regions re
where d.location_id = l.location_id and
l.country_id = co.country_id and
co.region_id = re.region_id and re.region_name='Americas'
order by d.department_id asc;
/*17 Muestre la estructura de la tabla EMPLOYEES. Cree una consulta para mostrar el apellido, el cdigo de cargo, la
fecha de contratacin y el nmero de empleado para cada empleado, con el nmero de empleado en primer lugar.
*/
select employee_id, last_name, job_id, hire_date
from employees;
/*18. Cree una consulta para mostrar los cdigos de cargo que existen en la
tabla EMPLOYEES.*/
select distinct job_id
from employees;
/* 19. Muestre el apellido concatenado con el identificador de cargo, separados
por una coma y un espacio y llame a la columna Titulo_empleado. */
select last_name||','||' '||job_id "Titulo empleado"
from employees;
/*20 Mostrar los nombres y la primera inicial del apellido para todos los
empleados que trabajan en el cdigo del departamento 100.*/
SELECT e.first_name ,e.last_name , SUBSTR(e.last_name,1,1) FROM employees e
where e.department_id=100;
/*21 Mostrar los apellidos y el nombre del mes que fue contratado los empleados del cdigo del departamento 30.
Rotule esta ltima columna como MES_CONTRATO.*/
SELECT last_name , to_char(hire_date,'MONTH') "MES CONTRATO" FROM employees
where department_id=30;
/*22 Muestre las primeras cinco letras del nombre del departamento en
maysculas para la tabla departments.*/
SELECT upper( substr( d.department_name , 1,5 )) FROM departments d;
/*23 Mostrar el nombre, fecha de contratacin y el nmero de das trabajados. */
select first_name, hire_date,
round(sysdate- hire_date)
from employees;

/*24 Mostrar el nombre y la fecha de contrato para todos los empleados en el


siguiente formato: dd de mes de aaaa, rotule esta columna con el nombre de
FECHA_CONTRATO. Ejemplo: 17 de Junio de 1987.*/

SELECT first_name ,
to_char(hire_date,'fmdd " de " month " de " yyyy') "FECHA DE CONTRATO"
FROM employees;
/*25 Mostrar el nombre, fecha de contratacin y la fecha del primer chequeo mdico, sabiendo que este se realiza
cada seis meses, para los empleados con
cdigo de departamento 60.*/
SELECT first_name,hire_date , add_months(hire_date,6) FROM employees
where department_id=60;
/*26 Muestre una consulta donde se liste el apellido de los empleados su
sueldo, la comisin expresada en soles a recibir y un mensaje a los que no
ganan comisin.*/
SELECT last_name, salary , nvl(commission_pct,0),
nvl2(commission_pct,'gana ','no gana') FROM employees;
/*27 Construya una sentencia que te permita obtener los nombre de todos los
empleados y un campo que indique es manager o no es manager*/
select distinct e.employee_id , e.first_name,
NVL2(e.manager_id,'Manager','No es manager')
from employees g, employees e
order by e.employee_id asc;
/*28 Construya una sentencia que te permita obtener los nombres de todos los
empleados que no ganan comisin y adems no pertenecen al departamento 50 ni 80 */
SELECT first_name,last_name,department_id FROM employees
where commission_pct is null and department_id<>80 and department_id<>50;
/*29 Construya una sentencia que te permita obtener los datos completos de
todos los empleados que ganan comisin, no son jefes y adems tienen ms de
8 aos en la empresa.*/
SELECT first_name ,manager_id,commission_pct ,(to_number(to_char(sysdate,'yyyy'))to_number(to_char(hire_date,'yyyy')))
FROM employees
where (to_number(to_char(sysdate,'yyyy'))- to_number(to_char(hire_date,'yyyy')))>8
and manager_id is not null
and commission_pct is not null ;
/*30. Construya una sentencia que muestre lo siguiente para cualquier empleado
Cdigo
Empleado
Nombre_jefe
123
juan Perez
Luis Casas
*/
select e.employee_id, e.first_name||' '||e.last_name,
g.first_name||' '||g.last_name
from employees e, employees g
where e.manager_id=g.employee_id;
/*31. Para cada empleado, visualice su nmero, apellido, salario y salario
incrementado en el 15 % y expresado como nmero entero. Etiquete la columna
como New Salary.*/
select employee_id, last_name, salary,
round((salary + 0.15*salary)) "New salary"
from employees;

/*32. Escriba una consulta que muestre los apellidos de los empleados con la primera letra en maysculas y todas las
dems en minsculas, as como la longitud de los nombres, para todos los empleados cuyos nombres comienzan
por J, A o M. Asigne a cada columna la etiqueta correspondiente. Ordene los resultados segn los apellidos de los
empleados.*/
select initcap(last_name) apellido, first_name nombre,
length(first_name) "Longitud de nombre"
from employees
where substr(first_name,1,1) in ('A','J','M')
order by last_name;
/*33. Para cada empleado, muestre su apellido y calcule el nmero de meses entre el da de hoy y la fecha de
contratacin. Etiquete la columna como MONTHS_WORKED. Ordene los resultados segn el nmero de meses
trabajados. Redondee el nmero de meses hacia arriba hasta el nmero entero ms prximo*/
SELECT last_name,ceil(MONTHS_BETWEEN(sysdate,hire_date)) "MONTHS WORKED"
FROM employees;
/*34. Muestre el apellido de cada empleado, as como la fecha de contratacin y la fecha de revisin de salario, que
es el primer lunes despus de cada seis meses de servicio. Etiquete la columna REVIEW. Formatee las fechas para
que aparezca en un formato similar a Monday, the Thirty-First of July, 2000.*/
select last_name apellido, hire_date Fecha_contratacion,
to_char(next_day(add_months(hire_date, 6),'Lunes'),
'day dd "de" month, yyyy') review
from employees
;
/*35. Muestre el apellido, la fecha de contratacin y el da de la semana en el que comenz el empleado. Etiquete la
columna DAY. Ordene los resultados por da de la semana, comenzando
por el lunes.*/
select last_name, hire_date,
to_char(hire_date, 'day') day
from employees
order by to_char(hire_date ,'d') asc;
/*37. Utilizando la funcin DECODE O CASE, escriba una consulta que muestre el grado de todos los empleados
basndose en el valor de la columna JOB_ID, segn los datos siguientes:
Cargo
Grado
AD_PRES
A
ST_MAN
B
IT_PROG
C
SA_REP
D
ST_CLERK
E
Ninguno de los anterio 0
*/
select first_name||' '||last_name, job_id,
decode(job_id, 'AD_PRES', 'A',
'ST_MAN', 'B',
'IT_PROG', 'C',
'SA_REP', 'D',
'ST_CLERK', 'E',
'0') grado
from employees;

/*
Mostrar los nombres y la primera inicial del apellido para todos
los empleados que trabajan en el cdigo del departamento 100.*/
Select employees.first_name, last_name, substr(last_name, 1, 1)
from employees where department_id=100;
/*
Mostrar los apellidos y el nombre del mes que fue contratado los
empleados del cdigo del departamento 30. Rotule esta ltima columna
como MES_CONTRATO.*/
select employees.last_name,hire_date, to_char(hire_date,'Month') "MES_CONTRATO"
from employees where department_id = 30;
/*
Muestre las primeras cinco letras del nombre del departamento
en maysculas para la tabla departments.*/
select department_name ,upper(substr(department_name,1,5)) from departments;
/*
Mostrar el nombre, fecha de contratacin y el nmero de das trabajados.*/
select first_name, hire_date,trunc(sysdate-hire_date) "DIAS TRABAJADOS"
from employees;
/*
Mostrar el nombre y la fecha de contrato para todos los empleados
en el siguiente formato: dd de mes de aaaa, rotule esta columna con
el nombre de FECHA_CONTRATO. Ejemplo: 17 de Junio de 1987.*/
select first_name, to_char(hire_date,'fmdd "de" month "de" yyyy')"FECHA DE CONTRATO"
from employees;
/*
Mostrar el nombre, fecha de contratacin y la fecha del primer chequeo
mdico, sabiendo que este se realiza cada seis meses, para los empleados
con cdigo de departamento 60.*/
select first_name,hire_date,add_months(hire_date,6)
from employees where department_id=60;
/* MULTITABLAS*/
/*
Mostrar el nombre del empleado y el ttulo del trabajador para todos
aquellos cuya fecha de contratacin fueron en el ao 2005.*/
select first_name, job_title from employees,jobs
where employees.job_id=jobs.job_id and to_char(hire_date,'yyyy')= 2005;
/*
Mostrar el nombre del departamento y el nombre de su gerente.*/
select department_name, first_name from departments,employees
where departments.manager_id=employees.manager_id;
describe departments;
/*
Mostrar el nombre del empleado y el nombre del departamento
para todos aquellos que fueron contratados en el primer semestre de 2008.*/
SELECT first_name,department_name , hire_date FROM employees,departments
where employees.department_id= departments.department_id
and to_char(hire_date,'yyyy')=2008 and to_char(hire_date,'mm')<=6;
/*
Mostrar el nombre del departamento y el nombre de su gerente.*/
SELECT department_name , employees.first_name FROM departments,employees
where employees.manager_id = departments.manager_id;
/*
Mostrar el nombre del empleado y el nombre del departamento para
todos aquellos que fueron contratados en el primer semestre de 2008.*/
SELECT first_name,department_name FROM employees,departments
where employees.department_id = departments.department_id
and to_char(hire_date,'yyyy') = 2008 and to_char(hire_date,'mm')<=6;

/*
Mostrar el nombre, apellido, fecha de inicio y de fin para todos los empleados.*/
SELECT first_name,last_name,hire_date , sysdate FROM employees;
/*
Mostrar el nombre del departamento, cdigo postal, nombre del pas y nombre
de la regin. */
select department_name, postal_code, country_name, region_name
from departments, locations, countries, regions
where departments.location_id=locations.location_id
and locations.country_id = countries.country_id
and regions.region_id = countries.region_id;
/*
Mostrar el apellido del empleado, nombre del departamento, direccin de la
calle, nombre del pas y nombre de la regin, para todos aquellos empleados
que tengan un salario mayor a 15000.*/
select last_name, department_name, street_address, country_name, region_name
from employees, departments , locations, countries, regions
where employees.salary>=15000
and employees.department_id=departments.department_id
and departments.location_id=locations.location_id
and locations.country_id=countries.country_id
and countries.region_id=regions.region_id;

/*
Muestre: location ID, street address, city, state or province,
and country in the output para cualquier empleado */
SELECT employee_id, last_name FROM employees;
SELECT locations.location_id , locations.street_address,locations.city ,
locations.state_province FROM locations,employees , departments
where to_char('105')=employee_id
and employees.department_id=departments.department_id
and departments.location_id=locations.location_id ;
/*
Muestre: last name, department number, and department name para todos
los empleados que han sido contratados hace 13 aos*/
SELECT last_name,employees.department_id,department_name,to_char(sysdate,'yyyy'),to_char(hire_date,'yyyy')
FROM employees,departments
where(to_number(to_char(sysdate,'yyyy'))- to_number(to_char(hire_date,'yyyy')))>=10
and employees.department_id=departments.department_id;
/*
Muestre last name, job, department number, and department name para todos
los empleados que trabajan en Toronto.*/
SELECT last_name,job_id,departments.department_id,department_name,city
FROM employees,departments,locations
where locations.city='Toronto'
and employees.department_id=departments.department_id
and departments.location_id=locations.location_id;
/*
Cree una sentencia que muestre: el apellido, el nombre de departamento y
el nombre del manager para cada empleado que gana mas de 8000 */
SELECT last_name,department_name,departments.manager_id,employees.first_name
FROM employees,departments
where employees.manager_id = departments.manager_id
and salary>=8000;

/*
Muestre a todos los empleados incluyendo a King, quien no tiene manager.
Ordene los resultados por el codigo de empleado*/
SELECT * FROM employees;
SELECT * FROM departments;
SELECT * FROM countries;
SELECT * FROM locations;
SELECT last_name,department_name,departments.manager_id,employees.first_name
FROM employees,departments
where departments.manager_id=null;
Para todos lo empleados que fueron contratados despues de haber contratado al empleado que gana el menor
sueldo en la empresa, se necesita obtener el ao y el ultimo dia del mes que fue contratado, ademas de mostrar su
nombre y codigo.

SELECT employee_id, last_name, to_char(hire_date,'yyyy')"Ao contrato",


last_day(hire_date)"Ultimo dia del mes"
FROM employees
where hire_date >(
SELECT hire_date FROM employees where salary =
(SELECT min(salary) FROM employees));

Muestre el monto que gana un empleado al dia si se sabe que solo trabaja 20 dias al mes, redondee el monto a 2
decimales y muestre la cantidad de meses que hasta el momento esta trabajando en la empresa, ademas de mostrar
su nombre y codigo.
select employee_id, first_name, round((salary/21),2)
"sueldo diario", round(months_between(sysdate,hire_date))
"Meses trabajados"
from employees;

Para el empleado que gana mas sueldo en la empresa muestre su nombre completo y el sueldo total a recibir
incluido comision mas un bono de 100 por cada mes trabajado desde que lo contrataron. (muestre la cantidad de
meses)
SELECT first_name, last_name, salary, (nvl(commission_pct,0)*
salary) comision, salary + (nvl(commission_pct,0)*
salary) "Sueldo total",
(round(months_between(sysdate,hire_date)) * 100) "Bono Mes",
(salary + (nvl(commission_pct,0)*
salary))+(
(round(months_between(sysdate,hire_date)) * 100)) "Total percibir"
FROM employees where
salary = (SELECT max(salary) FROM employees)
Para todos los empleados indique el nuevo codigo que tendran si se sabe que a partir de ahora sera el siguiente
formato:
E1XXXapellido000 renombre la columna con nuevo_codigo
xxx = 3 ultimas letras de su nombre
000 = primeros 3 numeros de su codigo

SELECT 'E1'||upper(substr(first_name,(length (first_name)-3),3))

||upper(last_name)||substr(employee_id,1,3) "Nuevo codigo"


FROM employees

El empleado con codigo 125 debe salir de vacaciones exactamente despues de 1 ao de haber sido contratado, pero
debido a ciertos problemas se le pide que espere 3 meses para hacer efectiva sus vacaciones, luego se le indica que
saldra el siguiente lunes despues de los 3 meses de espera. muestre el nombre completo, la fecha de contrato y la
fecha de salida de vacaciones renombrada con Vacaciones.

select last_name, hire_date "Fecha contrato",


to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')
||'/'||2013) "Fecha vacaciones",
ADD_MONTHS((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')
||'/'||2013)),3)"Nueva Fecha vacaciones",
NEXT_DAY(
(ADD_MONTHS((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')
||'/'||2013)),3)),'Lunes') "Salida vacaciones"
from employees WHERE employee_id=125;
Para el jefe del empleado 125 se le pide que espere los mismos tiempos pero su salida se prolonga hasta el ultimo
dia del mes despues de los 3 meses de espera. A este empleado se le ofrece pagarle los 3 meses mas los dias de
trabajo indique el monto adicional de pago en una columna llamada bono, el sueldo total a percibir en ese mes, y
otra columna donde se muestre el total.
select last_name, hire_date "Fecha contrato",
to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)
"Fecha Vacaciones",
add_months((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)), 3)
"Nueva Fecha Vac",
LAST_DAY((add_months((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)), 3)))
"Vacaciones",
(SALARY/30)*(
(LAST_DAY((add_months((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)), 3))))
(to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)))
"Bono adicional",
salary + (nvl(commission_pct,0)*salary) "Sueldo total",
((SALARY/30)*(
(LAST_DAY((add_months((to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013)), 3))))
(to_date(
to_char(hire_date,'dd')||'/'|| to_char(hire_date,'mm')||'/'||2013))))+(salary +
(nvl(commission_pct,0)*salary))"Total a recibir"
from employees
where employee_id=(select manager_id from employees
where employee_id=125);

También podría gustarte