Salta el contingut

DAM - DAW - MP 0484 Bases de Dades

Pràctica 4: Funcions d’una sola fila - Base de dades empresa

  1. Escriu una consulta per mostrar la data actual. Etiqueta la columna Date.

    Possible solució
    SELECT CURRENT_DATE AS "Date";
    
  2. 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;
    
  3. 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;
    
  4. 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');
    
  5. 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;
    
  6. 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;
    
  7. 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;
    
  8. 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;
    
  9. 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);
    
  10. 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;
    
  11. 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;
    
  12. 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;
    
  13. 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;