Navigation

Solución ejercicio de funciones con MySql

Compártelo:




Creación de tabla:

CREATE TABLE C##SCOTT.DEPT
(
 DEPTNO NUMBER(2),
 DNAME VARCHAR2(14),
 LOC VARCHAR2(13),
 CONSTRAINT PK_DEPT PRIMARY KEY (DEPTNO)
);

CREATE TABLE C##SCOTT.EMP
(
 EMPNO NUMBER(4),
 ENAME VARCHAR2(10),
 JOB VARCHAR2(9),
 MGR NUMBER(4),
 HIREDATE DATE,
 SAL NUMBER(7, 2),
 COMM NUMBER(7, 2),
 DEPTNO NUMBER(2),
 CONSTRAINT FK_DEPTNO FOREIGN KEY (DEPTNO) REFERENCES C##SCOTT.DEPT (DEPTNO),
 CONSTRAINT PK_EMP PRIMARY KEY (EMPNO)
);

INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');
INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');
INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');
INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

INSERT INTO EMP VALUES(7369, 'SMITH', 'CLERK', 7902,TO_DATE('17-DIC-1980', 'DD-MON-YYYY'), 800, NULL, 20);
INSERT INTO EMP VALUES(7499, 'ALLEN', 'SALESMAN', 7698,TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);
INSERT INTO EMP VALUES(7521, 'WARD', 'SALESMAN', 7698,TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
INSERT INTO EMP VALUES(7566, 'JONES', 'MANAGER', 7839,TO_DATE('2-ABR-1981', 'DD-MON-YYYY'), 2975, NULL, 20);
INSERT INTO EMP VALUES(7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
INSERT INTO EMP VALUES(7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);
INSERT INTO EMP VALUES(7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);
INSERT INTO EMP VALUES(7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DIC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
INSERT INTO EMP VALUES(7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);
INSERT INTO EMP VALUES(7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-ENE-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
INSERT INTO EMP VALUES(7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DIC-1981', 'DD-MON-YYYY'), 950, NULL, 30);
INSERT INTO EMP VALUES(7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DIC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES(7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-ENE-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

Enunciados:

1. Muestra el número de empleados que ganan más de 1400 por orden descendiente de salario.
2. Muestra el salario medio de los conserjes (job='CLERK').
3. Muestra el empleado que gana más junto con su salario dando el formato siguiente:
'El nombre del empleado que más gana es xxxx, y gana nnnnn'
4. Muestra los nombres de los conserjes ordenados por salario.
5. Muestra el gasto de personal total de la empresa, sumando salarios y comisiones.
6. Muestra un informe con los nombres de los empleados y su salario con el siguiente formato:
nombre1........ salario1
nombren.........salarion
7. Muestra el número de trienios completos de cada empleado.
8. Muestra el total de dinero ganado por el empleado desde que se incorporó a la empresa
suponiendo que el salario no ha cambiado en todo ese tiempo.
9. Muestra con dos decimales el salario diario de cada trabajador suponiendo que los meses
tienen 30 días.
10. Muestra los empleados que tengan en su nombre al menos dos vocales.
11. Muestra los empleados cuyo nombre empieza por una vocal.
12. Muestra los departamentos que tienen algún empleado cuyo nombre tiene más de cinco
letras.
13. Muestra en minúsculas los nombres de los departamentos que tienen algún empleado.
14. Muestra un mensaje de saludo a cada empleado con el formato 'Hola nombreempleado'.
15. Muestra el nombre de cada empleado junto con el nombre del mes en el que entró en la
empresa.
16. Muestra la hora del sistema con el formato siguiente: 'Hoy es nn del mes de nombremes del
año n.nnn y son las hh y nn minutos.'
17. Muestra el nombre del primer empleado por orden alfabético.
18. Muestra el número de jefes que hay en la empresa.
19. Muestra los empleados que fueron dados de alta entre el 01/03/1988 y el 31/06/1989.
20. Muestra los empleados que llevan más de 6 años en la empresa.

Soluciones:

------------------------1-------------------
select empno
from emp
where sal>1400
order by sal desc;
------------------------2------------------------
select avg(sal)
from emp
where sal in (select sal
             from emp
             where job='CLERK');
------------------------3---------------------
select to_char('El nombre del empleado que más gana es '|| ename ||', y gana ' || sal || ' euros')
from emp
where sal = (select max(sal)
                   from emp);
------------------------4--------------------
select ename
from emp
where job='CLERK'
order by sal;
-----------------------5--------------------
select sum(sal+nvl(comm,0))
from emp;
-----------------------6--------------------
select to_char(ename || '..........' || sal) as Informe
from emp;
-----------------------7--------------------
select ename, trunc((to_char(sysdate,'YYYY')-to_char(hiredate,'YYYY'))/3) as trienio
from emp;
-----------------------8--------------------
select ename, ((to_char(sysdate,'YYYY')-to_char(hiredate,'YYYY'))*sal) as salario_total
from emp;
-----------------------9--------------------
select ename, trunc((sal/30),2) as Salario_diario
from emp;
-----------------------10-------------------

select ename
from emp
where instr(ename,'A',1,2)<>0;

select ename
from emp
where instr(ename,'A',1,2)!=0;

-----------------------11-------------------

select ename
from emp
where ename like 'A%' or ename like 'E%' or ename like 'I%' or ename like 'O%' or ename like 'U%';

-----------------------12-------------------

select dname
from dept
where deptno in (select deptno
          from emp
          where length(ename)>5);

-----------------------13-------------------

select lower(dname)
from dept
where deptno in (select deptno
         from emp);

-----------------------14-------------------

select to_char('Hola ' || ename)
from emp;

-----------------------15-------------------

select ename, to_char(hiredate,'month') as Mes_Entrada_Empresa
from emp;

-----------------------16-------------------

select to_char('Hoy es ' || to_char(sysdate,'dd') || ' del mes de ' || to_char(sysdate,'month') || 'del año ' || to_char(sysdate,'YYYY') || ' y son las ' || to_char(sysdate,'HH') || ' y ' || to_char(sysdate,'Mi')) as Fecha_actual
from dual;

-----------------------17-------------------

select min(ename)
from emp;

-----------------------18-------------------

select count(distinct(mgr)) as Nu
from emp;

-----------------------19-------------------

select ename
from emp
where hiredate between to_date('01/03/1998','dd/mm/yyyy') and to_date('30/06/1989','dd/mm/yyyy');

-----------------------20-------------------

select ename
from emp
where months_between(sysdate,hiredate)>72;
Compártelo:

Basededatos

Post A Comment:

0 comments: