You are on page 1of 7

Práctica 1: descripción general

Práctica 1: descripción general


En esta práctica, escribe consultas SELECT simples.
Las consultas cubren la mayoría de las cláusulas SELECT y las operaciones que aprendió en esta lección.

Practica 1 Parte 1
Pon a prueba tus conocimientos:

1. La siguiente instrucción SELECT se ejecuta con éxito:


SELECT last_name, job_id, salary AS Sal
FROM employees;

Verdad
Utiliza el As para cambiar a salario por sal en la tabla
empleados

3. Hay cuatro errores de codificación en la siguiente declaración. ¿Puedes identificarlos?

SELECT employee_id, last_name sal x 12 ANNUAL SALARY


FROM employees;

SELECT employee_id, last_name , salary * 12 AS "ANNUAL SALARY"


FROM employees;
Parte 2

5. El departamento de RR.HH. quiere una consulta para mostrar el apellido, la identificación del
trabajo, la fecha de contratación y la identificación del empleado para cada empleado, con la
identificación del empleado que aparece primero. Proporcione un alias STARTDATE para la columna
HIRE_DATE. Guarde su declaración SQL en un archivo llamado lab_01_05.sql para que pueda enviar
este archivo al departamento de Recursos Humanos.

SELECT employee_id, last_name, job_id, hire_date StartDate


FROM employees;

7. El departamento de recursos humanos desea una consulta para mostrar todas las ID de trabajo únicas
de la tabla EMPLOYEES.
SELECT DISTINCT job_id
FROM employees;

9. El departamento de recursos humanos ha solicitado un informe de todos los empleados y sus


identificaciones laborales. Muestre el apellido concatenado con la ID del trabajo
(separados por una coma y espacio) y nombre la columna Empleado y Título.
SELECT last_name||', '||job_id "EMPLEADO Y TITULO"
FROM employees;
PRACTICA 2 DESCRIPCION GENERAL
1. El departamento de recursos humanos necesita su ayuda para crear algunas consultas. 1. Debido a
problemas presupuestarios, el departamento de recursos humanos necesita un informe que muestre el
apellido y el salario de los empleados que ganan más de $ 12,000. Guarde su declaración SQL como un
archivo llamado lab_02_01.sql. Ejecute su consulta.

SELECT last_name, salary FROM employees WHERE salary > 12000;


3. Los departamentos de recursos humanos deben encontrar empleados con salarios altos y salarios bajos.
Modifique lab_02_01.sql para mostrar el apellido y el salario de todos los empleados cuyo salario no esté
en el rango de $ 5,000 a $ 12,000. Coloque su instrucción SQL en un archivo de texto llamado
lab_02_03.sql.

SELECT last_name, salary FROM employees WHERE salary NOT BETWEEN 5000 AND 12000;

5. Visualice el apellido y el número de departamento de todos los empleados en los departamentos 20 o


50 en orden alfabético ascendente por nombre.

SELECT last_name, department_id FROM employees WHERE department_id IN (20, 50) ORDER
BY last_name ASC;

7. El departamento de recursos humanos necesita un informe que muestre el apellido y la fecha de


contratación de todos los empleados que fueron contratados en 1994.

SELECT last_name, hire_date FROM employees WHERE hire_date LIKE '%94';

9. Muestre el apellido, el salario y la comisión de todos los empleados que ganan comisiones. Clasifica
los datos en orden descendente de salario y comisiones.

SELECT last_name, salary, commission_pct FROM employees WHERE commission_pct IS NOT


NULL ORDER BY salary DESC, commission_pct DESC;

11. El departamento de recursos humanos desea ejecutar informes basados en un gerente. Cree una
consulta que solicite al usuario una ID de administrador y genere la ID de empleado, el apellido, el salario
y el departamento para los empleados de ese gerente. El departamento de recursos humanos desea la
capacidad de ordenar el informe en una columna seleccionada. Puede probar los datos con los siguientes
valores:

manager_id = 103, sorted by last_name:

manager_id = 201, sorted by salary:

manager_id = 124, sorted by employee_id:

SELECT employee_id, last_name, salary, department_id FROM employees WHERE manager_id =


&mgr_num ORDER BY &order_col;

13. Muestre los apellidos de todos los empleados que tienen una "a" y una "e" en su apellido.

SELECT last_name FROM employees WHERE last_name LIKE '%a%' AND last_name LIKE
'%e%';

15. Modifique lab_02_06.sql para mostrar el apellido, el salario y la comisión de todos los empleados
cuya comisión sea del 20%. Resave lab_02_06.sql como lab_02_15.sql. Vuelva a ejecutar la instrucción
en lab_02_15.sql.
SELECT last_name "Employee", salary "Monthly Salary", commission_pct FROM employees
WHERE commission_pct = .20;

PRACTICA 3 DESCRIPCION GENERAL

1. Escribe una consulta para mostrar la fecha actual. Etiqueta la columna Fecha.
SELECT sysdate "Date" FROM dual;
3. Ejecute su consulta en el archivo lab_03_02.sql.
SELECT employee_id, last_name, salary, ROUND(salary * 1.155, 0) "New Salary" FROM
employees;
5. Escriba una consulta que muestre el apellido (con la primera letra en mayúscula y todas las demás
letras en minúscula) y la longitud del apellido de todos los empleados cuyo nombre comience con las
letras J, A o M. Dé a cada columna un nombre apropiado etiqueta. Ordene los resultados por los apellidos
de los empleados.
SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length" FROM employees
WHERE last_name LIKE 'J%' OR last_name LIKE 'M%' OR last_name LIKE 'A%' ORDER BY
last_name ;
Vuelva a escribir la consulta para que se le solicite al usuario que ingrese una letra que inicie el apellido.
Por ejemplo, si el usuario ingresa H cuando se le solicita una letra, la salida debe mostrar a todos los
empleados cuyo apellido comienza con la letra H.
SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length" FROM employees
WHERE last_name LIKE '&start_letter%' ORDER BY last_name;
7. Cree un informe que produzca lo siguiente para cada empleado: <apellido del empleado> gana
<salario> mensualmente pero quiere <3 veces salario>.
SELECT last_name || ' earns ' || TO_CHAR(salary, 'fm$99,999.00') || ' monthly but wants '
|| TO_CHAR(salary * 3, 'fm$99,999.00') || '.' "Dream Salaries" FROM employees;

9. Muestre el apellido, la fecha de contratación y la fecha de revisión salarial de cada empleado, que es el
primer lunes después de seis meses de servicio. Etiqueta la columna REVIEW. Formatee las fechas para
que aparezcan en el formato similar a "Lunes, el 31 de julio de 2000".
SELECT last_name, hire_date, TO_CHAR(NEXT_DAY(ADD_MONTHS(hire_date,
6),'MONDAY'), 'fmDay, "the" Ddspth "of" Month, YYYY') REVIEW FROM employees;

11. Create a query that displays the employees’ last names and commission amounts. If an employee does
not earn commission, show “No Commission.” Label the column COMM.
SELECT last_name, NVL(TO_CHAR(commission_pct), 'No Commission') COMM FROM
employees;

13. Utilizando la función DECODE, escriba una consulta que muestre el grado de todos los empleados en
función del valor de la columna JOB_ID, utilizando los siguientes datos: Grado de trabajo AD_PRES A
ST_MAN B IT_PROG C SA_REP D ST_CLERK E Ninguno de los anteriores 0
SELECT job_id, decode (job_id, 'ST_CLERK', 'E', 'SA_REP', 'D',
'IT_PROG', 'C', 'ST_MAN', 'B', 'AD_PRES', 'A',
'0')GRADE FROM employees;

PRACTICA 4 Solucion

1. Las funciones grupales funcionan en muchas filas para producir un resultado por grupo.
Verdadero / Falso
3. La cláusula WHERE restringe las filas antes de la inclusión en un cálculo grupal.
Verdadero / Falso
5. Modifique la consulta en lab_04_04.sql para mostrar el salario mínimo, máximo, suma y promedio
para cada tipo de trabajo. Resave lab_04_04.sql como lab_04_05.sql. Ejecute la instrucción en
lab_04_05.sql
SELECT job_id, ROUND(MAX(salary),0) "Maximum", ROUND(MIN(salary),0) "Minimum",
ROUND(SUM(salary),0) "Sum", ROUND(AVG(salary),0) "Average" FROM employees
GROUP BY job_id;

7. Determine la cantidad de gerentes sin enumerarlos. Etiquete la columna Número de administradores.


Sugerencia: utilice la columna MANAGER_ID para determinar la cantidad de administradores.
SELECT COUNT(DISTINCT manager_id) "Number of Managers" FROM employees

9. Cree un informe para mostrar el número de administrador y el salario del empleado con el salario más
bajo para ese gerente. Excluya a cualquier persona cuyo gerente no sea conocido. Excluya cualquier
grupo donde el salario mínimo sea de $ 6,000 o menos. Ordenar el resultado en orden descendente de
salario

SELECT manager_id, MIN(salary) FROM employees WHERE manager_id IS NOT NULL GROUP
BY manager_id HAVING MIN(salary) > 6000 ORDER BY MIN(salary) DESC;
11. Cree una consulta matricial para mostrar el trabajo, el salario de ese trabajo en función del número de
departamento y el salario total para ese trabajo, para los departamentos 20, 50, 80 y 90, dando a cada
columna un título apropiado.

SELECT job_id "Job", SUM(DECODE(department_id , 20, salary)) "Dept 20",


SUM(DECODE(department_id , 50, salary)) "Dept 50", SUM(DECODE(department_id , 80,
salary)) "Dept 80", SUM(DECODE(department_id , 90, salary)) "Dept 90", SUM(salary)
"Total" FROM employees GROUP BY job_id;

PRACTICA 5 Solucion

1. Escriba una consulta para el departamento de recursos humanos para generar las direcciones de todos
los departamentos. Use las tablas LOCATIONS y COUNTRIES. Muestre la ID de ubicación, la dirección
de la calle, la ciudad, el estado o la provincia y el país en la salida. Use una UNIÓN NATURAL para
producir los resultados.

SELECT location_id, street_address, city, state_province, country_name FROM locations NATURAL


JOIN countries;
3. El departamento de recursos humanos necesita un informe de los empleados en Toronto. Muestre el
apellido, el trabajo, el número de departamento y el nombre del departamento de todos los empleados que
trabajan en Toronto.

SELECT e.last_name, e.job_id, e.department_id, d.department_name FROM employees e JOIN


departments d ON (e.department_id = d.department_id) JOIN locations l ON (d.location_id =
l.location_id) WHERE LOWER(l.city) = 'toronto';
5. Modifique lab_05_04.sql para mostrar todos los empleados, incluido King, que no tiene administrador.
Ordene los resultados por el número de empleado. Coloque su instrucción SQL en un archivo de texto
llamado lab_05_05.sql. Ejecute la consulta en lab_05_05.sql.

SELECT w.last_name "Employee", w.employee_id "EMP#", m.last_name "Manager",


m.employee_id "Mgr#" FROM employees w LEFT OUTER JOIN employees m ON
(w.manager_id = m.employee_id);
7. El departamento de recursos humanos necesita un informe sobre las calificaciones y los salarios del
trabajo. Para familiarizarse con la tabla JOB_GRADES, primero muestre la estructura de la tabla
JOB_GRADES. Luego, cree una consulta que muestre el nombre, el trabajo, el nombre del departamento,
el salario y la calificación para todos los empleados.
DESC JOB_GRADES

SELECT e.last_name, e.job_id, d.department_name, e.salary, j.grade_level FROM employees e


JOIN departments d ON (e.department_id = d.department_id) JOIN job_grades j ON (e.salary
BETWEEN j.lowest_sal AND j.highest_sal);

9. El departamento de recursos humanos necesita encontrar los nombres y las fechas de contratación de
todos los empleados que fueron contratados antes que sus gerentes, junto con los nombres de sus gerentes
y las fechas de contratación. Guarde el script en un archivo llamado lab_05_09.sql.

SELECT w.last_name, w.hire_date, m.last_name, m.hire_date FROM employees w JOIN


employees m ON (w.manager_id = m.employee_id) WHERE w.hire_date < m.hire_date;

PRACTICA 6 Solucion
1. El departamento de recursos humanos necesita una consulta que solicite al usuario el apellido de un
empleado. La consulta muestra el apellido y la fecha de contratación de cualquier empleado en el mismo
departamento que el empleado cuyo nombre suministra el usuario (excluyendo a ese empleado). Por
ejemplo, si el usuario ingresa Zlotkey, encuentre todos los empleados que trabajen con Zlotkey
(excluyendo Zlotkey).

UNDEFINE Enter_name

SELECT last_name, hire_date FROM employees WHERE department_id = (SELECT department_id


FROM employees WHERE last_name = '&&Enter_name') AND last_name <>
'&Enter_name'

3. Escriba una consulta que muestre el número de empleado y el apellido de todos los empleados que
trabajan en un departamento con cualquier empleado cuyo apellido contenga un u. Coloque su instrucción
SQL en un archivo de texto llamado lab_06_03.sql. Ejecute su consulta.

SELECT employee_id, last_name FROM employees WHERE department_id IN (SELECT


department_id FROM employees WHERE last_name like '%u%');

5. Cree un informe para el departamento de Recursos Humanos que muestre el apellido y el salario de
cada empleado que se reporte a King.

SELECT last_name, salary FROM employees WHERE manager_id = (SELECT employee_id


FROM employees WHERE last_name = 'King');

7. Modifique la consulta en lab_06_03.sql para mostrar el número de empleado, el apellido y el salario de


todos los empleados que ganan más que el salario promedio y que trabajan en un departamento con
cualquier empleado cuyo apellido contenga un u. Resave lab_06_03.sql a lab_06_07.sql. Ejecute la
instrucción en lab_06_07.sql.

SELECT employee_id, last_name, salary FROM employees WHERE department_id IN (SELECT


department_id FROM employees WHERE last_name like '%u%') AND
salary > (SELECT AVG(salary) FROM employees);
PRACTICA 7 Solucion
1. El departamento de recursos humanos necesita una lista de ID de departamento para los departamentos
que no contienen el ID de trabajo ST_CLERK. Use set operators para crear este informe.

SELECT department_id FROM departments MINUS SELECT department_id FROM employees


WHERE job_id = 'ST_CLERK';

3. Produzca una lista de trabajos para los departamentos 10, 50 y 20, en ese orden. Visualice la
identificación del trabajo y la ID del departamento usando los operadores establecidos.
COLUMN dummy NOPRINT SELECT job_id, department_id, 'x' dummy FROM employees WHERE
department_id = 10 UNION SELECT job_id, department_id, 'y' dummy FROM employees WHERE
department_id = 50 UNION SELECT job_id, department_id, 'z' dummy FROM employees WHERE
department_id = 20 ORDER BY dummy; COLUMN dummy PRINT

5. El departamento de Recursos Humanos necesita un informe con las siguientes especificaciones: •


Apellido e ID del departamento de todos los empleados de la tabla EMPLEADOS, independientemente
de si pertenecen o no a un departamento. • Identificación del departamento y nombre del departamento de
todos los departamentos del DEPARTAMENTOS, independientemente de si tienen empleados trabajando
en ellos. Escriba una consulta compuesta para lograr esto.
SELECT last_name,department_id,TO_CHAR(null) FROM employees UNION SELECT
TO_CHAR(null),department_id,department_name FROM departments;

PRACTICA 8 Solucion
El departamento de recursos humanos desea que cree declaraciones SQL para insertar,
actualizar y eliminar datos de los empleados. Como prototipo, utiliza la tabla MY_EMPLOYEE
antes de enviar las declaraciones al departamento de recursos humanos. Inserta datos en la
tabla MY_EMPLOYEE

. 1. Ejecute la instrucción en el script lab_08_01.sql para compilar la tabla MY_EMPLOYEE que


se utilizará para el laboratorio.

CREATE TABLE my_employee (id NUMBER(4) CONSTRAINT my_employee_id_nn NOT NULL,


last_name VARCHAR2(25), first_name VARCHAR2(25), userid VARCHAR2(8), salary
NUMBER(9,2));

3. Cree una instrucción INSERT para agregar la primera fila de datos a la tabla MY_EMPLOYEE de los
siguientes datos de muestra. No liste las columnas en la cláusula INSERTAR.

INSERT INTO my_employee VALUES (1, 'Patel', 'Ralph', 'rpatel', 895);

5. Confirma tu adición a la mesa


SELECT * FROM my_employee;

7. Llene la tabla con las dos filas siguientes de datos de muestra enumerados en el paso 3 ejecutando la
instrucción INSERT en el script que creó.
SET ECHO OFF SET VERIFY OFF INSERT INTO my_employee VALUES (&p_id, '&&p_last_name',
'&&p_first_name', lower(substr('&p_first_name', 1, 1) || substr('&p_last_name', 1, 7)),
&p_salary); SET VERIFY ON SET ECHO ON UNDEFINE p_first_name UNDEFINE p_last_name

9. Haga las adiciones de datos permanentes.

COMMIT;

Actualice y elimine datos en la tabla MY_EMPLOYEE.

11. Cambie el salario a $ 1,000 para todos los empleados con un salario de menos de $ 900.
UPDATE my_employee SET salary = 1000 WHERE salary < 900;

13. Elimine Betty Dancs de la tabla MY_EMPLOYEE.

You might also like