DAM - DAW - MP 0484 Bases de Dades
Pràctica 4: Funcions d’una sola fila - Base de dades empresa
-
Escriu una consulta per mostrar la data actual. Etiqueta la columna Date.
Possible solució
SELECT CURRENT_DATE AS "Date"; -
Per cada empleat, mostra el número d’empleat, el cognom, el sou i el sou amb un increment del 15% i expressat com número enter, etiqueta aquest darrer camp com Sou Nou.
Possible solució
SELECT EMPLOYEE_ID, LAST_NAME, SALARY, ROUND(SALARY * 1.15) AS "Sou Nou" FROM EMPLOYEES; -
Modifica la consulta anterior per afegir-hi una columna que resti el sou antic al nou. Etiqueta la columna com Increment.
Possible solució
SELECT EMPLOYEE_ID, LAST_NAME, SALARY, ROUND(SALARY * 1.15) AS "Sou Nou", ROUND(SALARY * 1.15) - SALARY AS "Increment" FROM EMPLOYEES; -
Escriu una consulta que mostri el cognom de l’empleat amb la primera lletra en minúscula i la resta en majúscules i la longitud del cognom: Cal que surtin tots els empleats que tinguin un cognom que comenci per J, A o M. Ordena els resultats per cognom.
Possible solució
SELECT CONCAT( LOWER(LEFT(LAST_NAME, 1)), UPPER(SUBSTRING(LAST_NAME, 2))) COGNOM, LENGTH(LAST_NAME) LONGITUD FROM EMPLOYEES WHERE LEFT(LAST_NAME, 1) IN ('J','A','M'); -
Per cada empleat, mostra el seu cognom i el nombre de mesos entre el dia d’avui i la data de contractació. Etiqueta la columna com Mesos treballats. Ordena els resultats segons el nombre de mesos treballats.
Possible solució
SELECT LAST_NAME, TIMESTAMPDIFF(MONTH, HIRE_DATE, CURRENT_DATE) "Mesos treballats" FROM EMPLOYEES; -
Escriu una consulta que produeixi el següent per a cada empleat:
<Cognom>guanya<sou>mensualment però preferiria guanyar<sou x 3>. Etiqueta la columna com Dream Salaries.Possible solució
SELECT CONCAT_WS(' ', LAST_NAME, 'guanya', SALARY, 'mensualment però preferiria guanyar', SALARY * 3) AS "Dream Salaries" FROM EMPLOYEES; -
Crea una consulta per mostrar el cognom i el sou de tots els empleats. Formata el sou per tal que tingui 15 caràcters de longitud, omplint a l’esquerra amb $. Etiqueta la columna SALARY.
Possible solució
SELECT LAST_NAME, LPAD(SALARY, 15, '$') SALARY FROM EMPLOYEES; -
Mostra el cognom de cada empleat, així com la data de contractació i la data de revisió de sou, que és el primer dilluns després de cada sis mesos de servei. Etiqueta la columna REVIEW. Formata les dates per tal que apareguin amb un format similar a Dilluns, 29 de maig de 2023.
Possible solució
SELECT LAST_NAME, HIRE_DATE, DATE_FORMAT( HIRE_DATE + INTERVAL (CEILING(TIMESTAMPDIFF(MONTH,HIRE_DATE, CURRENT_DATE) / 6) * 6) MONTH -- 6 MESOS PASSATS - INTERVAL 1 DAY -- MENYS 1 DIA (PER SI CAU EN DILLUNS) + INTERVAL (7 - (WEEKDAY(HIRE_DATE + INTERVAL (CEILING(TIMESTAMPDIFF(MONTH,HIRE_DATE, CURRENT_DATE) / 6) * 6) MONTH - INTERVAL 1 DAY))) DAY -- MÉS DIES PEL PROPER DILLUNS , '%W, %d de %M de %Y', 'ca_ES') AS "Review" FROM EMPLOYEES; -
Mostra el cognom, la data de contractació i el dia de la setmana en el que va començar a treballar l’empleat. Etiqueta la columna dia. Ordena les dades per dia de la setmana, començant pel dilluns. (WEEKDAY)
Possible solució
SELECT LAST_NAME, HIRE_DATE, DATE_FORMAT(HIRE_DATE, '%W', 'ca_ES') "dia" FROM EMPLOYEES ORDER BY WEEKDAY(HIRE_DATE); -
Crea una consulta que mostri el cognom i les comissions dels empleats. Si un empleat no percep comissió (
NULL), posa No Commission. Etiqueta la columna COMM.Possible solució
SELECT LAST_NAME, IFNULL(COMMISSION_PCT, "No Commission") COMM FROM EMPLOYEES; -
Crea una consulta que mostri el cognom dels empleats i que indiqui les quantitats dels seus sous amb asteriscs. Cada asterisc significa mil dòlars. Ordena les dades per sou en ordre descendent. Etiqueta la columna EMPLOYEES_AND_THEIR_SALARIES.
Possible solució
SELECT LAST_NAME, REPEAT('*', SALARY/ 1000) EMPLOYEES_AND_THEIR_SALARIES FROM EMPLOYEES; -
Utilitzant la funció DECODE_ORACLE, escriu una consulta que mostri el grau de tots els empleats basant-se en el valor de la columna JOB_ID, segons els següents criteris:
JOB GRADE AD_PRES A ST_MAN B IT_PROG C SA_REP D ST_CLERK E Qualsevol Altre 0 Possible solució
SELECT LAST_NAME, DECODE_ORACLE(JOB_ID, 'AD_PRES', 'A', 'ST_MAN', 'B', 'IT_PROG', 'C', 'SA_REP', 'D', 'ST_CLERK', 'E', '0') Grau FROM EMPLOYEES; -
Torna a escriure la sentència de la pregunta anterior utilitzant la sintaxis CASE.
Possible solució
SELECT LAST_NAME, CASE JOB_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' END Grau FROM EMPLOYEES;