Sei sulla pagina 1di 9

PRACTICO SQL 2 SOLUTION

Prctica Leccin 2: Restringiendo y ordenando datos


1.- Crear una consulta que despliegue el last name y salary de los empleados que ganan ms de
$12.000. Escribe tu sentencia SQL en un archivo de texto llamado lab2_1.sql. Ejecutar la
consulta

SELECT last_name, salary


FROM employees
WHERE salary > 12000;
2.- Crear una consulta que despliegue el last_name del empleado y department number para
cada nmero de empleado 176

SELECT last_name , department_number


FROM employees
WHERE employee_id = 176;
3.- Modificar lab2_1.sql para desplegar el last name y salary para todos los empleados cuyo
salario no esta en el rango de $5.000 y $12.000. Escribe tu sentencia SQL en el texto del archivo
nombrado

SELECT last_name, salary


FROM employees
WHERE salary NOT BEETWEEN 5000 AND 12000;
4.- Desplegar el last_name del empleado, job ID y start date de empleados cuya hired (fecha de
empleo) est entre Febrero 20, 1998, y Mayo 1, 1998. Ordenar la consulta ascendentemente por
start date

SELECT last_name, job_id, start_date


FROM employees
WHERE hired BEETWEEN 20-FEB-1998 AND 1-MAY-1998
ORDER BY start_date ASC;
5.- Desplegar el last name y department number de todos los empleados del departamento 20 y
50, ordenar alfabticamente por name

SELECT last_name, departament_number


FROM employees
WHERE departament_number IN(20,50)
ORDER BY last_name;
6.- Modificar lab2_3.sql para listar el last name y salary de empleados que ganan entre $5.000 y
$12.000 y estn en el departamento 20 o 50. Etiquetar las columnas por employee y monthly
salary, respectivamente. Regrabar lab2_3.sql como lab2_6.sql. Ejecutar la sentencia en
lab2_6.sql

SELECT last_name AS employee, salary AS monthly salary


FROM employees
WHERE salary BETWEEN 5000 AND 12000
AND departament_id in (20,50);

7.- Desplegar el last name y el hire date de cada empleado que ha sido empleado en el ao 1994

SELECT last_name, hire_date


FROM employees
WHERE hire_date LIKE %94;
8.- Desplegar el last name y job title de todos los empleados que no tienen un administrador

SELECT last_name, job_id


FROM employees
WHERE manager_id IS NULL;
9.- Desplegar el last name, salary y commissions para todos los empleados que ganan
comisiones. Ordenar datos descendentemente de salary y commisions

SELECT last_name, salary , commission_pct


FROM employees
WHERE commission_pct IS NOT NULL
ORDER BY salary DESC ,commission_pct DESC;
10.- Desplegar los last name de todos los empleados donde la tercera letra del nombre es una
a

SELECT last_name
FROM employees
WHERE last_name LIKE ___a%;
11.- Desplegar el last name de todos los empleados que tienen una a y una e en su last
name

SELECT last_name
FROM employees
WHERE last_name LIKE %a% AND last_name LIKE %e%;
12 Desplegar el last name, job y salary para todos los empleados que tienen como job sales
representative o stock clerk y cuyo salary no es igual al $2.500, $3.500 o $7.000

SELECT last_name, job_id, salary


FROM employees
WHERE job _sales in(SA_REP, ST_CLERK )
AND salary NOT in(2500,3500,7000);
13.- Modificar lab2_6.sql para desplegar el last name, salary y comisin para todos los
empleados cuya comisin es un 20%. Regrabar lab2_6.sql como lab2_13.sql. Ejecutar la
sentencia lab2_13.sql

SELECT last_name, salary, commission_pct


FROM employees
WHERE commission_pct = .20;

PRACTICO 3 SQL SOLUTION


Prctica 3: Funciones sobre Filas

1.- Para cada empleado, desplegar el apellido, y calcular el nmero de meses entre la fecha
actual y la fecha de contrato. Etiquetar la columna como MESES TRABAJADOS. Ordenar la
consulta por el nmero de meses trabajados. Redondear el nmero de meses hasta el entero
ms cercano.

SELECT last_name, ROUND(MONTHS_BEETWEEN(SYSDATE, hire_date),0) AS MESES


TRABAJADOS
FROM employees
ORDER BY ROUND(MONTHS_BEETWEEN(SYSDATE, hire_date),0);
2.- Escribe una consulta que despliegue lo siguiente para cada empleado
<apellido del empleado> recibe <salario> mensualmente, pero quiere recibir <tres veces su
salario>. Etiqueta la columna como SALARIO SOADO

SELECT last_name || ' recibe ' || salary || ' mensualmente, pero quiere
recibir ' || salary *3 AS "SALARIO SOADO"
FROM employees;
3.- Escriba una consulta que despliegue el apellido, y el salario para todos los empleados. El
formato de salario debe ser de 15 caracteres de largo, completar con el comodn $ a la
izquierda. Etiquetar la columna como SALARIO.

SELECT last_name, LPAD(salary,15,'$') AS "SALARIO"


FROM employees;
4.- Desplegar para cada empleado el apellido, la fecha de contrato, y la fecha de revisin de
salario, con el primer lunes despus de seis meses de servicio. Etiquetar la columna como
REVISION. El formato de la fecha debe ser similar a Monday, the Thirty-First of July, 2000

SELECT last_name, hire_date,


TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date,6),'MONDAY'), 'fmDay , "the" Ddspth
"of" Month, YYYY') AS "REVISION"
FROM employees;
5.- Desplegar el apellido, la fecha de contrato, y el da de la semana en que el empleado inicio su
empleo. Etiquetar la columna como DIA.Ordena el resultado por el da de la semana iniciado
con el lunes.

SELECT last_name, hire_date, TO_CHAR(hire_date,'DAY') AS "DIA"


FROM employees
ORDER BY TO_CHAR(hire_date - 1 ,'d');
6.- Crear una consulta que despliegue el apellido del empleado y comisin. Si el empleado no
gana comisin, desplegar Sin Comisin Etiquetar la columna como COMM

SELECT last_name, NVL(TO_CHAR(commission_pct),'Sin Comisin') AS "COMM"


FROM employees;
7.- Crear una consulta que despliegue el apellido del empleado, y la cantidad anual de su salario
con asteriscos. Cada asterisco significa miles de dlares. Ordenar los datos descendentemente
por salario. Etiquetar la columna como EMPLEADO Y SU SALARIO

SELECT last_name, RPAD(' ' , salary/1000+1,'*')


FROM employees;

8.- Usando la funcin DECODE, escribir una consulta que despliegue el grado de todos los
empleados basados en los valores de la columna CARGO_ID, como se muestra a continuacin:
CARGO GRADO
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
Ninguno de los anteriores 0

SELECT CARGO_ID, DECODE(


'AD_PRES','A',
'ST_MAN','B',
'IT_PROG','C',
'SA_REP','D',
'ST_CLERK','E',
'0'
)
FROM employees;
8.- Reescribe la consulta anterior utilizando la clusula CASE.

SELECT CARGO_ID , CASE CARGO_ID


WHEN 'AD_PRES' THEN 'A'
WHEN 'ST_MAN' THEN 'B'
WHEN 'IT_PROG' THEN 'C'
WHEN 'SA_REP' THEN 'D'
WHEN 'ST_CLERK' THEN 'E'
ELSE '0'
FROM employees;

PRACTICO 4 SQL SOLUTION


Prctica Leccin 4: Desplegando Datos de Mltiples Tablas
1.- Escriba una consulta que despliegue el apellido, nmero y nombre del departamento para
todos los empleados

SELECT e.last_name, d.departament_id, d.departament_name


FROM employees e, departaments d
WHERE e.departament_id = d.departament_id;
2.- Crear una nica lista de todos los identificadores de los cargos que estn en el departamento
80. Incluir la localizacin del departamento en la salida

SELECT e.job_id , l.location_name


FROM employees e, locations l, departaments d
WHERE e.departament_id = d.departament_id AND d.location_id =
l.location_id
AND e.departament_id = 80;
3.- Escribir una consulta que despliegue el apellido del empleado, nombre del departamento,
localizacin y ciudad de todos los empleados que ganan comisin

SELECT e.last_name, d.departament_name, l.location_id, l.city


FROM employees e, departaments d , locations l
WHERE e.departament_id = d.departament_id AND d.location_id =
l.location_id
AND commission_pct IS NOT NULL;
4.- Desplegar el apellido del empleado y nombre del departamento para todos los empleados
que tienen una a minscula en su apellido. Escribir tu sentencia SQL en un archivo de texto
llamado lab4_4.sql

SELECT e.last_name, d.departament_name


FROM employees e, departaments d
WHERE e.departament_id = d.departament_id
AND e.last_name LIKE '%a%';
5.- Escribir una consulta que despliegue el apellido, cargo, nmero y nombre de departamento
para todos los empleados que trabajan en Toronto

SELECT e.last_name, e.job_id, d.departament_id, d.departament_name


FROM employees e, departaments d, locations l
WHERE e.departament_id = d.departament_id AND d.location_id =
l.location_id
AND LOWER(l.city) = LOWER('Toronto');
6.- Desplegar el apellido y nmero del empleado con el apellido de su administrador y nmero
de este. Etiquetar las columnas como Empleado, Emp#, Administrador y Mgr#, respectivamente.
Escribir tu sentencia SQL en un archivo de texto llamado lab4_6.sql

SELECT e.last_name AS "Empleado" , e.employee_id AS "Emp#", a.last_name AS


"Administrador", a.manager_id AS "Mgr#"
FROM employees e, managers a
WHERE e.manager_id = a.manager_id;

PRACTICO 5 SQL SOLUTION


Prctica 5
1.- Las funciones de grupo trabajan cruzando muchas filas para producir un resultado (V)(F)
V
2.- Las funciones de grupo incluyen nulos en sus clculos (V)(F)
F
3.- La clusula WHERE restringe filas antes de la inclusin en un clculo de funciones de grupo
(V)(F)
V
4.- Desplegar el salario mximo, mnimo, sumatoria, y promedio de todos los trabajadores.
Etiquetar Mximo, Mnimo, Sumatoria, Promedio respectivamente. Redondear los resultados al
entero ms prximo. Guardar la consulta como Lab5_4.sql

SELECT ROUND(MAX(salary),0) AS "Maximo" , ROUND(MIN(salary),0) AS "Minimo",


ROUND(SUM(salary),0) AS "Sumatoria", ROUND(AVG(salary),0) AS "Promedio"
FROM employees;

5.- Modificar la consulta Lab5_4 para que despliegue el salario mximo, mnimo, sumatoria y
promedio para cada tipo de cargo. Guardar la consulta como Lab5_5.sql

SELECT ROUND(MAX(salary),0) AS "Maximo" , ROUND(MIN(salary),0) AS "Minimo",


ROUND(SUM(salary),0) AS "Sumatoria", ROUND(AVG(salary),0) AS "Promedio"
FROM employees;
GROUP BY jod_id;
6.- Escribir una consulta que despliegue el nmero de trabajadores con el mismo cargo.

SELECT COUNT(*)
FROM employees
GROUP BY job_id;
7.- Determinar el nmero de administradores sin ellos en el listado. Etiquetar la columna como
Nmero de Administradores

SELECT COUNT(DISTINCT manager_id) AS "Nmero de Administradores"


FROM employees;
8.- Escribir una consulta que despliegue la diferencia entre el salario mximo y mnimo.
Etiquetar la columna como diferencia

SELECT (MAX(salary) - MIN(salary)) AS "diferencia"


FROM employees;
9.- Despliega el identificador del administrador y el salario del empleado que menos recibe por
administrador. Excluir aquellos donde el administrador no es conocido. Excluir cualquier grupo
donde el salario mnimo es 6000 o menor. Ordenar la consulta descendentemente por salario

SELECT manager_id ,salary


FROM emlpoyees
WHERE manager_id IS NOT NULL
GROUP BY manager_id
HAVING MIN(salary) &gt; 6000
ORDER BY MIN(salary) DESC;
10.- Escribir una consulta que despliegue para cada departamento, nombre, nmero de
empleados y salario promedio para todos los empleados del departamento. Etiquetar las
columnas como: Nombre, Localizacin, Numero de personas y Salario respectivamente.
Redondear el salario promedio a dos decimales.

SELECT d.departament_name AS "Nombre" , COUNT(*) AS "Numero de personas",


ROUND(AVG(salary),2) AS "Salario"
FROM departaments d, employees e
WHERE e.departament_id = d.departament_id
GROUP BY d.departament_name;
11.- Crear una consulta que despliegue el nmero total de empleados y el total de empleados
contratado en 1995, 1996, 1997 y 1998. Etiquetar con encabezados apropiados cada columna.

SELECT COUNT(*) AS "Total" ,


SUM(DECODE(TO_CHAR(hire_date,'YYYY'),1995,1,0))
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),1996,1,0))
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),1997,1,0))
SUM(DECODE(TO_CHAR(hire_date,'YYYY'),1998,1,0))

AS "1995" ,
AS "1996" ,
AS "1997" ,
AS "1998"

FROM employees;
12.- Crear una consulta en una matriz que despliegue el cargo, salario, para cada cargo basado
en un nmero de departamento y el salario total para cada cargo, para los departamentos 20,
50, 80, 90. Dar a cada columna un encabezado apropiado.

SELECT job_id,
SUM (DECODE(departament_id,20,salary))
SUM (DECODE(departament_id,50,salary))
SUM (DECODE(departament_id,80,salary))
SUM (DECODE(departament_id,90,salary))
SUM(salary) AS "Salario Total"
FROM employees
GROUP BY job_id;

AS "Departamento
AS "Departamento
AS "Departamento
AS "Departamento

20",
50",
80",
90",

PRACTICO 6 SQL SOLUTION


Prctica 6
1.- Escribir una consulta que despliegue el apellido y fecha de contrato de cualquier empleado
que trabaje en el mismo departamento que Zlotkey. Excluir a Zlotkey

SELECT last_name, hire_date


FROM employees
WHERE departament_id = (SELECT departament_id FROM employees WHERE
last_name = 'Zlotkey')
AND last_name 'Zlotkey';
2.- Crear una consulta que despliegue el nmero del empleado y su apellido de aquellos
empleados que ganan ms que el salario promedio. Ordenar ascendentemente por salario

SELECT employee_id, last_name


FROM employees
WHERE salary &gt; (SELECT AVG(salary) FROM employees)
ORDER BY salary ASC;
3.- escribir una consulta que despliegue el nmero del empleado y su apellido de aquellos
empleados que trabajan en un departamento con cualquier empleado que tenga una u en su
apellido. Escribir tu consulta SQL en un texto llamado lab6-3.sql. Ejecutar tu consulta

SELECT employee_id, last_name


FROM employees
WHERE departament_id IN (SELECT departament_id FROM employees WHERE
LOWER(last_name) LIKE '%u%');
4.- Desplegar el apellido, nmero de departamento e identificador del cargo de todos los
empleados cuya localizacin de departamento es 1700

SELECT last_name, departament_id, job_id


FROM employees
WHERE departament_id in (SELECT departament_id FROM departaments WHERE
location_id = 1700);
5.- Desplegar el apellido y salario para cada empleado que reporte a King

SELECT apellido, salary


FROM employees
WHERE manager_id in (SELECT manager_id FROM employees WHERE LOWER(last_name)
= 'king');
6.- Desplegar el nmero de departamento, apellido e identificador del cargo para cada empleado
en el departamento Executive

SELECT departament_id, last_name, job_id


FROM employees
WHERE departament_id = (SELECT departament_id FROM departaments WHERE
departament_name= 'Executive');
7.- Modificar la consulta lab6-3.sql para desplegar el nmero del empleado, apellido y salario de
todos aquellos empleados que ganan ms que el salario promedio y que trabaja en un
departamento con cualquier empleado en cuyo nombre tenga una u. Regrabar lab6-3.sql como
lab6-7.sql. Ejecutar tu archivo lab6-7.sql

SELECT employee_id, last_name, salary


FROM employees
WHERE departament_id IN (SELECT departament_id FROM employees WHERE
LOWER(last_name) LIKE '%u%')
AND salary &gt; (SELECT AVG(salary) FROM employees);

PRACTICO 7 SQL SOLUTION


Prctica 7
Determine si las siguientes dos preguntas son verdadera o falsa
1.- La siguiente sentencia es valida: (V) (F)
DEFINE & p_val = 100
F
2.- El comando DEFINE es un comando SQL (V) (F)
F
3.- Escriba un script para desplegar el apellido de un empleado, cargo y fecha de contrato para
todos los empleados que se iniciaron entre un rango dado. Concatenar nombre y trabajo juntos,
separado por un espacio y coma, y etiquetar la columna como Empleado. En un archivo Script
SQL separado, use el comando DEFINE para proveer los dos rangos. Use el formato
MM/DD/YYYY. Grabar los archivos script como lab7-3a.sql y lab7-3b.sql

DEFINE fechaInicio = 01/01/1987


DEFINE fechaTermino = 01/01/2007
SELECT last_name || ', ' || job_id AS "Empleado" , hire_date
FROM employees
WHERE hire_date BEETWEEN TO_DATE(&amp;fechaInicio,'MM/DD/YYYY') AND
TO_DATE(&amp;fechaTermino,'MM/DD/YYYY');
4.- Escribir un script para desplegar el apellido, el identificador del cargo y nombre del
departamento para cada empleado en una localizacin dada. Grabar el archivo script como lab74.sql

SELECT e.last_name , e.job_id, d.departament_name


FROM employees e, departaments d, locations l

WHERE e.departament_id = d.departament_id AND d.location_id =


l.location_id
AND l.city = '&amp;entrada';

Potrebbero piacerti anche