Subido por ÄDRÍÍÁŃ YÉLÁ

consultas simples

Anuncio
Practica 5
1. Las funciones de grupo trabajan a través de muchas filas para
producir un resultado por grupo.
Verdadero
2. Las funciones de grupo incluyen los valores nulos en los cálculos.
Falso.
3. La cláusula WHERE restringe las filas antes de que se incluyan en
los cálculos de los grupos.
Verdadero
4. Muestre el salario más alto, más bajo, la suma y el promedio de los
salarios de todos los empleados. Etiquete las columnas como
Máximo, Mínimo, Suma y Promedio, respectivamente. Redondee el
resultado al entero más cercano.
SELECT
MAX(emp_salario) "Maximo", MIN(emp_salario) minimo, SUM(emp_salario)
suma,ROUND(AVG(emp_salario),0) promedio FROM empleados;
/*5. Modifique la consulta del punto 4 para que muestre el salario más
alto, más bajo, la suma y el promedio, por cada tipo de cargo.*/
SELECT
emp_cargo,
MAX(emp_salario) "Maximo",
MIN(emp_salario) minimo,
SUM(emp_salario) suma,
ROUND(AVG(emp_salario),0) promedio
FROM empleados GROUP BY emp_cargo;
/*6. Escriba una consulta para mostrar el número de personas que
tienen el mismo trabajo.*/
SELECT
emp_cargo, COUNT(*) FROM empleados GROUP BY emp_cargo;
/*7. Determine el número de jefes sin listarlos. Etiquete la columna
como Número de Jefes.*/
SELECT (COUNT(DISTINCT E.EMP_NOMBRE))"NUMERO DE JEFES"
FROM EMPLEADOS E
JOIN EMPLEADOS J ON(E.EMP_ID=J.EMP_JEFE);
/*8. Escriba una consulta que muestre la diferencia entre el salario más
alto y el más bajo. Etiquete la columna como DIFERENCIA.*/
SELECT
MAX(emp_salario)-MIN(emp_salario) diferencia FROM empleados;
/*9. Muestre el número del jefe y el salario más bajo del empleado para
ese jefe. Excluya a quienes no se les conoce el jefe y también los grupos donde el salario mínimo
es menor a $1’300.000. Ordene de
forma descendente por salario.*/
SELECT
DISTINCT emp_jefe, MIN(emp_salario) minimo FROM empleados where emp_jefe is not null
GROUP BY emp_jefe HAVING min(emp_salario)>1300000 ORDER BY minimo desc;
/*10. Escriba una consulta que muestre cada nombre y localización
del departamento, número de empleados y el promedio del salario
de todos los empleados de ese departamento. Etiquete las
columnas como Nombre, Localización, Número de Empleados y
Salario respectivamente. Redondear el promedio del salario a un
decimal.*/
SELECT
DISTINCT d.dep_nombre Nombre, d.dep_localizacion Localizacion, COUNT(e.emp_id) "numero
de empleados",
ROUND(AVG(e.emp_salario),0) salario FROM empleados e join departamentos d on
(e.dep_id=d.dep_id)
GROUP BY d.dep_nombre, d.dep_localizacion;
/*11. Cree una consulta que muestre el total de empleados, y de ese
total, el número de empleados contratados en el 2001, 2002, 2003 y
2004. Etiquete las columnas de forma adecuada.*/
SELECT
COUNT(*),SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2001,1,0))"2001"
,SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2002,1,0))"2002",
SUM(DECODE(TO_CHAR(emp_fechacontrato,'yyyy'),2003,1,0))"2003",SUM(DECODE(TO_CHAR(em
p_fechacontrato,'yyyy'),2004,1,0))"2004"
FROM empleados ;
/*12. Cree una consulta matriz para mostrar el cargo y el salario total
de ese cargo, por departamento, para los departamentos 10, 20 y
30. Se debe mostrar una fila por cargo y como columnas: el nombre
del cargo, departamento 10, departamento 20 y departamento 30.*/
SELECT
e.emp_cargo cargo,
sum(DECODE(d.dep_id, 10,e.emp_salario))"departamento 10",
sum(DECODE(d.dep_id, 20,e.emp_salario))"departamento 20",
sum(DECODE(d.dep_id, 30,e.emp_salario))"departamento 30", SUM(e.emp_salario) total FROM
empleados e
join departamentos d on (e.dep_id=d.dep_id) GROUP BY e.emp_cargo;
Practica 6
/*1. Escriba una consulta que muestre el nombre y su fecha de contrato
de los empleados que trabajan en el mismo número de
departamento que JIMENEZ, excluya a JIMENEZ.*/
SELECT
DECODE(d.dep_id, 20, e.emp_nombre || ' ' || e.emp_fechacontrato) "20" FROM
empleados e
join departamentos d on (e.dep_id=d.dep_id) WHERE d.dep_id IN(
SELECT
e.dep_id FROM empleados e WHERE e.emp_nombre='JIMENEZ'
) and not e.emp_nombre in (
SELECT
e.emp_nombre FROM empleados e WHERE e.emp_nombre='JIMENEZ'
);
/*2. Cree una consulta que muestre el número y el nombre de todos los
empleados que ganen más que el salario promedio. Ordenar de
forma ascendente por salario.*/
SELECT
emp_id,emp_nombre,emp_salario FROM empleados WHERE emp_salario > (
SELECT
ROUND(AVG(emp_salario),0) FROM empleados
);
/*3. Escriba una consulta que muestre el número y nombre del
empleado, para todos los empleados que trabajen en cualquiera de
los departamentos que trabaja cualquier empleado que el nombre
contenga la letra P.*/
SELECT
DECODE(d.dep_nombre, 'CONTABILIDAD', e.emp_id|| ' '|| e.emp_nombre)
"CONTABILIDAD",
DECODE(d.dep_nombre, 'INVESTIGACION',e.emp_id|| ' '|| e.emp_nombre)
"INVESTIGACION",
DECODE(d.dep_nombre, 'OPERACIONES',e.emp_id|| ' '|| e.emp_nombre)
"OPERACIONES",
DECODE(d.dep_nombre, 'VENTAS',e.emp_id|| ' '|| e.emp_nombre) "VENTAS"
FROM empleados e JOIN departamentos d on (d.dep_id=e.dep_id) WHERE
e.emp_nombre=ANY (
SELECT
e.emp_nombre FROM empleados e WHERE e.emp_nombre LIKE '%P%'
/*4. Muestre el nombre, número de departamento y cargo de todos los
empleados cuya localización del departamento sea CALI.*/
SELECT
empleados.emp_nombre,departamentos.dep_id,empleados.emp_cargo FROM
departamentos
JOIN empleados on (departamentos.dep_id=empleados.dep_id) WHERE
departamentos.dep_localizacion in(
SELECT
departamentos.dep_localizacion FROM departamentos where
departamentos.dep_localizacion='CALI'
);
/*5. Muestre el nombre y el salario de cada empleado que tiene como
jefe a LOPEZ.*/
SELECT
emp_nombre, emp_salario FROM empleados where emp_jefe in (
SELECT
emp_id FROM empleados WHERE emp_nombre='LOPEZ'
);
/*6. Muestre el número del departamento, nombre y cargo de cada
empleado en el departamento CONTABILIDAD.*/
SELECT
d.dep_id,e.emp_nombre,e.emp_cargo FROM empleados e join departamentos d
on (e.dep_id=d.dep_id) WHERE d.dep_nombre in(
SELECT
dep_nombre FROM departamentos WHERE dep_nombre='CONTABILIDAD'
);
/*
7. Modifique el punto 3 para mostrar número, nombre y salario del
empleado, de todos los empleados que ganen más que el salario
promedio y que trabajen en cualquiera de los departamentos que
trabaja cualquier empleado que contenga en su nombre la letra P.
*/
SELECT
DECODE(d.dep_nombre, 'CONTABILIDAD', e.emp_id|| ' '|| e.emp_nombre|| '
'||e.emp_salario) "CONTABILIDAD",
DECODE(d.dep_nombre, 'INVESTIGACION',e.emp_id|| ' '|| e.emp_nombre|| '
'||e.emp_salario) "INVESTIGACION",
DECODE(d.dep_nombre, 'OPERACIONES',e.emp_id|| ' '|| e.emp_nombre|| '
'||e.emp_salario) "OPERACIONES",
DECODE(d.dep_nombre, 'VENTAS',e.emp_id|| ' '|| e.emp_nombre|| ' '||e.emp_salario)
"VENTAS"
FROM empleados e JOIN departamentos d on (d.dep_id=e.dep_id) WHERE
e.emp_salario>(
SELECT
ROUND(AVG(emp_salario),0) "Average" FROM empleados
) and e.emp_nombre=ANY (
SELECT
e.emp_nombre FROM empleados e WHERE e.emp_nombre LIKE '%P%'
);
Descargar