M2 - Bases de dades / Exercicis UF2: Llenguatges SQL / Solucions T3-HR

De wikiserver
Dreceres ràpides: navegació, cerca

1) Escriba una consulta para mostrar la fecha del sistema. Etiquete la columna como Date.

Nota: si la base de datos se ubica de forma remota en una zona horaria diferente, la salida será la fecha del sistema operativo en el que reside la base de datos.

SELECT sysdate "Date"
FROM dual;

2) El departamento de recursos humanos necesita un informe que muestre el número de empleado, apellido, salario y salario aumentado en un 15,5% (expresado como número entero) para cada empleado. Etiquete la columna como New Salary.

Guarde la sentencia SQL en un archivo denominado lab_03_02.sql.

SELECT employee_id, last_name, salary,
       ROUND(salary * 1.155, 0) "New Salary"
FROM employees;

3) Ejecute la consulta en el archivo lab_03_02.sql.

SELECT employee_id, last_name, salary,
       ROUND(salary * 1.155, 0) "New Salary"
FROM employees;

4) Modifique la consulta lab_03_02.sql para agregar una columna que reste el salario antiguo del nuevo. Etiquete la columna como Increase. Guarde el contenido del archivo como lab_03_04.sql. Ejecute la consulta revisada.

SELECT employee_id, last_name, salary,
       ROUND(salary * 1.155, 0) "New Salary",
       ROUND(salary * 1.155, 0) - salary "Increase"
FROM employees;

5) Escriba una consulta que muestre el apellido (con la primera letra en mayúsculas y el resto en minúsculas) y la longitud del apellido de todos los empleados cuyos nombres empiecen por las letras "J", "A" o "M". Proporcione a cada columna una etiqueta adecuada. Ordene los resultados por el apellido de los empleados.

SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length"
FROM employees
WHERE UPPER(last_name) LIKE 'J%'
      OR UPPER(last_name) LIKE 'M%'
      OR UPPER(last_name) LIKE 'A%'
ORDER BY last_name;

o

SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length"
FROM employees
WHERE UPPER(SUBSTR(last_name,1,1)) IN ('J','M','A')
ORDER BY last_name;

Vuelva a escribir la consulta para que se le solicite al usuario que introduzca la letra por la que empieza el apellido. Por ejemplo, si el usuario introduce H (en mayúscula) cuando se le solicita que introduzca una letra, la salida debe mostrar a todos los empleados cuyos apellidos empiecen por la letra "H"

SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length"
FROM employees
WHERE last_name LIKE '&start_letter%'
ORDER BY last_name;

Modifique la consulta de forma que la mayúscula/minúscula de la letra introducida no afecte a la salida. La letra introducida debe estar en mayúscula antes de que la procese la consulta SELECT.

SELECT INITCAP(last_name) "Name", LENGTH(last_name) "Length"
FROM employees
WHERE UPPER(last_name) LIKE UPPER('&start_letter%' )
ORDER BY last_name;

6) El departamento de recursos humanos desea buscar la duración del contrato de cada empleado. Para cada empleado, muestre el apellido y calcule el número de meses entre el día de hoy y la fecha de contratación del empleado. Etiquete la columna como MONTHS_WORKED. Ordene los resultados por el número de meses durante los que ha trabajado. Redondee el número de meses hasta el número entero más cercano.

Nota: debido a que esta consulta depende de la fecha de ejecución, los valores de la columna MONTHS_WORKED serán diferentes.

SELECT last_name, ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) MONTHS_WORKED
FROM employees
ORDER BY months_worked;

Si tiene tiempo, realice los siguientes ejercicios:

7) Cree una consulta para mostrar el apellido y el salario de todos los empleados. Formatee el salario para que tenga 15 caracteres de longitud y tenga un relleno hacia la izquierda con el símbolo $. Etiquete la columna como SALARY.

SELECT last_name, LPAD(salary, 15, '$') SALARY
FROM employees;

8) Cree una consulta que muestre los primeros ocho caracteres de los apellidos de los empleados y que indique las cantidades de sus salarios con asteriscos. Cada asterisco significa mil dólares. Ordene los datos en orden descendente de salarios. Etiquete la columna EMPLOYEES_AND_THEIR_SALARIES.

SELECT rpad(last_name, 8)||' '|| rpad(' ', salary/1000+1, '*') EMPLOYEES_AND_THEIR_SALARIES
FROM employees
ORDER BY salary DESC;

9) Cree una consulta para mostrar el apellido y el número de semanas durante las que han trabajado todos los empleados del departamento 90. Etiquete la columna de número de semanas como TENURE. Trunque el valor del número de semana en 0 decimales. Muestre los registros en orden descendente de antigüedad del empleado.

Nota: el valor TENURE variará ya que depende de la fecha de ejecución de la consulta.

SELECT last_name, trunc((SYSDATE-hire_date)/7) AS TENURE
FROM employees
WHERE department_id = 90
ORDER BY TENURE DESC;