Ejemplos de SQL - nivel avanzado

Para poder trabajar con estos ejemplos deberás tener creadas las tablas de demostración. Para obtener el fichero que las crea automáticamente haz click aquí.

1.- Nombre del empleado mas largo. El nombre saldrá con la primera letra en mayúsculas y el resto en minúsculas

1 select initcap(ename)
2 from emp
3 where length (rtrim(ename,' '))
4 in (select max(length(rtrim(ename,' '))) from emp);

INITCAP(EN
----------
Martin
Turner
Miller


2.- Nombre, salario mensual, salario diario y precio de su hora de aquellos empleados que no tienen comisiones (suponer 22 días al mes y 8 horas diarias)

1 select ename,sal,sal/22,(sal/22)/8
2 from emp
3 where length(comm) is not null

ENAME SAL SAL/22 (SAL/22)/8
---------- --------- --------- ----------
MARTIN 1250 56,818182 7,1022727
ALLEN 1600 72,727273 9,0909091
TURNER 1500 68,181818 8,5227273
WARD 1250 56,818182 7,1022727

3 .- Nombres, categorias y años cumplidos de antigüedad de los empleados de la empresa en orden descendente de antigüedad y ascendente de número de departamento. Los nombres de las categorías saldrán en minúsculas

1 select ename, lower(job), (to_char(sysdate,'yyyy')-(to_char(hiredate,'yyyy')))
2 from dual, emp
3 order by to_char(sysdate,'yyyy')-
4 to_char(hiredate,'yyyy')desc,deptno

ENAME LOWER(JOB (TO_CHAR(SYSDATE,'YYYY')-(TO_CHAR(HIREDATE,'YYYY')))
---------- --------- ----------------------------------------------------
SMITH clerk 19
KING president 18
CLARK manager 18
JONES manager 18
FORD analyst 18
BLAKE manager 18
MARTIN salesman 18
ALLEN salesman 18
TURNER salesman 18
JAMES clerk 18
WARD salesman 18
MILLER clerk 17
SCOTT analyst 17
ADAMS clerk 16

4 .- Antigüedad media de los empleados de cada departamento.

SQL> select avg(to_char(sysdate,'yyyy')-(to_char(hiredate,'yyyy')))
2 from emp,dual
3 group by deptno;

AVG(TO_CHAR(SYSDATE,'YYYY')-(TO_CHAR(HIREDATE,'YYYY')))
-------------------------------------------------------
17,666667
17,6
18

5 .- Seleccione los nombres y salarios de los empleados que ganan mas que sus jefes

1 select a.ename,a.sal
2 from emp a,emp b
3 where a.mgr=b.empno
4 and a.sal>b.sal

ENAME SAL
---------- ---------
FORD 3000
SCOTT 3000

6 .- Encuentra todos los empleados que ganan mas que el salario medio de los empleados de su propio departamento y listarlos ordenados por departamento.

1 select avg (sal), job ,deptno
2 from emp
3 group by job, deptno
4 having avg(sal)>(select avg(sal)
5 from emp)
6 order by deptno;

AVG(SAL) JOB DEPTNO
--------- --------- ---------
2450 MANAGER 10
5000 PRESIDENT 10
3000 ANALYST 20
2975 MANAGER 20
2850 MANAGER 30

7 .- ¿ Cuantos meses hace que ingresó el presidente de la compañía?

1 select months_between(sysdate,hiredate)
2 from dual,emp
3 where job='PRESIDENT';

MONTHS_BETWEEN(SYSDATE,HIREDATE)
--------------------------------
216,50908

8 .- Muestre los empleados cuyo aniversario es el mes de diciembre

1 select ename
2 from emp
3 where to_char(hiredate,'MM')=12;

ENAME
----------
JAMES
FORD
SMITH
SCOTT

9 .- Obtener los registros de los analistas con las fechas de ingreso formateadas con “ 3 de Diciembre de 1984”

1 select to_char(hiredate,'DD "de" Month "de" YYYY')
2 from emp
3 where job='ANALYST'

TO_CHAR(HIREDATE,'DD"DE"
------------------------
03 de Diciembre de 1981
09 de Diciembre de 1982

10 .-Mostar los nombre y las fechas de ingreso de los empleados del depto 20 con la fecha formateada con esta mascara: ‘10/31/86’.

SQL> select ename,to_char(hiredate,'MM/DD/YY')
2 from emp
3 where deptno=20;

ENAME TO_CHAR(
---------- --------
JONES 04/02/81
FORD 12/03/81
SMITH 12/17/80
SCOTT 12/09/82
ADAMS 01/12/83



VOLVER

A PROGRAMAR © 2002. All Rights Reserved.
Hosted by www.Geocities.ws

1