Sei sulla pagina 1di 14

Ejercicios SQL - Select

TutorialesNET
Versi
on 1.0 - Revisi
on 1
25 de julio de 2015

Manoel Anton Folgueira Hernandez


manoel@tutorialesnet.net
http://tutorialesnet.net

Pagina 1 de 13

Indice
1. Introducci
on

2. Diagrama Entidad-Relaci
on

3. Implementaci
on fsica

4. Definici
on de atributos

5. Informaci
on de las tablas

6. Consultas

7. Consultas adicionales

13

INDICE

Pagina 2 de 13

1.

Introducci
on

Este documento presenta el conjunto de consultas de ejemplo a resolver en el curso de


SQL Select impartido por TutorialesNET, junto con material adicional para una mejor
comprension de las mismas.

Pagina oficial del curso:


http://tutorialesnet.net/cursos/curso-de-sql-select
En esta pagina encontrareis todo el material necesario (y adicional) para realizar este
curso.

INTRODUCCION

Pagina 3 de 13

2.

Diagrama Entidad-Relaci
on

DIAGRAMA ENTIDAD-RELACION

Pagina 4 de 13

3.

Implementaci
on fsica

Usa el siguiente codigo para crear las tablas emp, dept, pro y tra con la informacion
de ejemplo:
Codigo SQL
1
2
3
4
5
6

create table "dept" (


"deptno" numeric(2,0),
"dname" character varying(14),
"loc" character varying(13),
constraint "dept_pkey" primary key ("deptno")
);

7
8
9
10
11
12
13
14
15
16
17
18
19
20

create table "emp" (


"empno" numeric(4,0),
"ename" character varying(10),
"job" character varying(9),
"mgr" numeric(4,0),
"hiredate" date,
"sal" numeric(7,2),
"comm" numeric(7,2),
"deptno" numeric(2,0),
constraint "emp_pkey" primary key ("empno"),
constraint "emp_deptno_fkey" foreign key ("deptno") references "dept" ("deptno"),
constraint "emp_mgr_fkey" foreign key ("mgr") references "emp" ("empno")
);

21
22
23
24
25
26
27

create table "pro" (


"prono" numeric(4,0) primary key,
"pname" character varying(10),
"city" character varying(13),
"deptno" numeric(2,0) references "dept" ("deptno")
);

28
29
30
31
32
33
34

create table "tra" (


"empno" numeric(4,0) references "emp"("empno"),
"prono" numeric(4,0) references "pro"("prono"),
"hours" numeric(2,0),
primary key (empno,prono)
);

35
36
37
38
39
40

insert
insert
insert
insert

into
into
into
into

dept
dept
dept
dept

(deptno,
(deptno,
(deptno,
(deptno,

dname,
dname,
dname,
dname,

loc)
loc)
loc)
loc)

values
values
values
values

(10,
(20,
(30,
(40,

ACCOUNTING, NEW YORK);


RESEARCH, DALLAS);
SALES, CHICAGO);
OPERATIONS, BOSTON);

41
42
43
44
45
46
47
48
49
50
51
52

insert into emp values (7839, KING, PRESIDENT, null,


to_date(17/11/81,dd/mm/yy) , 5000, null, 10);
insert into emp values (7566, JONES ,
MANAGER ,
to_date(02/04/81,dd/mm/yy) ,
2975,
null,
insert into emp values (7902, FORD
,
ANALYST ,
to_date(03/12/81,dd/mm/yy) ,
3000,
null,
insert into emp values (7369, SMITH ,
CLERK
,
to_date(17/12/80,dd/mm/yy) ,
800,
null,
insert into emp values (7698, BLAKE ,
MANAGER ,
to_date(01/05/81,dd/mm/yy) ,
2850,
null,
insert into emp values (7499, ALLEN ,
SALESMAN ,
3

FISICA

IMPLEMENTACION

7839,
20);
7566,
20);
7902,
20);
7839,
30);
7698,

Pagina 5 de 13

53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69

to_date(20/02/81,dd/mm/yy) ,
insert into emp values (7521, WARD
to_date(22/02/81,dd/mm/yy) ,
insert into emp values (7654, MARTIN
to_date(28/09/81,dd/mm/yy) ,
insert into emp values (7782, CLARK
to_date(09/06/81,dd/mm/yy) ,
insert into emp values (7788, SCOTT
to_date(09/12/82,dd/mm/yy) ,
insert into emp values (7844, TURNER
to_date(08/09/81,dd/mm/yy) ,
insert into emp values (7876, ADAMS
to_date(12/01/83,dd/mm/yy) ,
insert into emp values (7900, JAMES
to_date(03/12/81,dd/mm/yy) ,
insert into emp values (7934, MILLER
to_date(23/01/82,dd/mm/yy) ,

1600,
300,
,
SALESMAN ,
1250,
500,
,
SALESMAN ,
1250,
1400,
,
MANAGER ,
2450,
null,
,
ANALYST ,
3000,
null,
,
SALESMAN ,
1500,
0,
,
CLERK
,
1100,
null,
,
CLERK
,
950,
null,
,
CLERK
,
1300,
null,

30);
7698,
30);
7698,
30);
7839,
10);
7566,
20);
7698,
30);
7788,
20);
7698,
30);
7782,
10);

70
71
72
73
74
75

insert
insert
insert
insert
insert

into
into
into
into
into

pro
pro
pro
pro
pro

values
values
values
values
values

(1001,
(1004,
(1005,
(1006,
(1008,

p1,
p4,
p5,
p6,
p8,

BOSTON,
CHICAGO,
CHICAGO,
LOS ANGELES,
NEW YORK,

insert
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into
into

tra
tra
tra
tra
tra
tra
tra
tra
tra

values
values
values
values
values
values
values
values
values

(7499,
(7499,
(7521,
(7521,
(7654,
(7654,
(7654,
(7844,
(7934,

1004,
1005,
1004,
1008,
1001,
1006,
1008,
1005,
1001,

15);
12);
10);
8);
16);
15);
5);
6);
4);

76
77
78
79
80
81
82
83
84
85

FISICA

IMPLEMENTACION

20);
30);
30);
30);
30);

Pagina 6 de 13

4.

Definici
on de atributos

Transformado a relacional, la base de datos almacena cuatro tablas: dept, emp, pro y
tra, cuyos campos se describen a continuacion.
Tabla DEPT
Atributo
DEPTNO
DNAME
LOC

Definici
on
N
umero que identifica a cada departamento. Es la clave primaria de la tabla.
Nombre del departamento.
Ciudad (o localizaci
on) donde se sit
ua el departamento.

Tabla EMP
Atributo
EMPNO
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO

Definici
on
N
umero que identifica a cada empleado. Es la clave primaria de la tabla.
Nombre del empleado.
Trabajo del empleado.
C
odigo del jefe del empleado. Clave for
anea que autoreferencia de forma cclica la tabla EMP.
Fecha de contrataci
on del empleado.
Salario del empleado.
Comisi
on del empleado. Puede recibirla o no.
C
odigo del departamento al que pertenece el departamento. Clave for
anea.

Tabla PRO
Atributo
PRONO
PNAME
LOC
DEPTNO

Definici
on
N
umero que identifica a cada proyecto. Es la clave primaria de la tabla.
Nombre del proyecto.
Ciudad asignada al proyecto.
Departamento asignado al proyecto. Clave for
anea.

Tabla TRA
Atributo
EMPNO
PRONO
HOURS

Definici
on
N
umero que identifica a cada empleado. Es parte de la clave primaria de la tabla. Clave for
anea.
N
umero que identifica a cada proyecto. Es parte de la clave primaria de la tabla. Clave for
anea.
Horas dedicadas por un empleado a un proyecto.

Notas
Los tipos de los atributos se encuentra en el siguiente apartado.
La base de datos usada es un ejemplo que Oracle incorpora en su instalacion, por lo que
tanto los nombres de los campos como sus valores estan en ingles. As, un vendedor tendra
en el atributo JOB el valor SALESMAN, o el departamento de investigacion es RESEARCH.
Ademas, todos los nombres (de empleado, departamento, trabajo) estan almacenados en
may
usculas.
En cuanto a la definicion de las tablas, aunque todos los campos excepto las claves
primarias admiten valores nulos, consideraremos especialmente los siguientes casos:
COMM: Si tiene un valor nulo, indica que el empleado no tiene comision.
MGR: Si tiene un nulo, indica que el empleado no tiene jefe.

DE ATRIBUTOS
DEFINICION

Pagina 7 de 13

5.

Informaci
on de las tablas
Tabla DEPT

DEPTNO
10
20
30
40

DNAME
ACCOUNTING
RESEARCH
SALES
OPERATIONS

LOC
NEW YORK
DALLAS
CHICAGO
BOSTON

Tabla EMP
EMPNO
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

ENAME
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
SCOTT
KING
TURNER
ADAMS
JAMES
FORD
MILLER

JOB
CLERK
SALESMAN
SALESMAN
MANAGER
SALESMAN
MANAGER
MANAGER
ANALYST
PRESIDENT
SALESMAN
CLERK
CLERK
ANALYST
CLERK

MGR
7902
7698
7698
7839
7698
7839
7839
7566
7698
7788
7698
7566
7782

HIREDATE
17/12/80
20/02/81
22/02/81
02/04/81
28/09/81
01/05/81
09/06/81
19/04/87
17/11/81
08/09/81
23/05/87
03/12/81
03/12/81
23/01/82

Tabla PRO
PRONO
1001
1004
1005
1006
1008

PNAME
P1
P4
P5
P6
P8

LOC
BOSTON
CBICAGO
CHICAGO
LOS ANGELES
NEW YORK

DEPTNO
20
30
30
30
30

Tabla TRA
EMPNO
7499
7499
7521
7521
7654
7654
7654
7844
7934

PRONO
1004
1005
1004
1008
1001
1006
1008
1005
1001

HOURS
15
12
10
8
16
15
5
6
4

DE LAS TABLAS
INFORMACION

SAL
800
1,600
1,250
2,975
1,250
2,850
2,450
3,000
5,000
1,500
1,100
950
3,000
1,300

COMM
300
500
1,400
0
-

DEPTNO
20
30
30
20
30
30
10
20
10
30
20
30
20
10

Pagina 8 de 13

6.

Consultas

1. Obtener todos los datos de todos los empleados.


2. Obtener todos los datos de todos los departamentos.
3. Obtener todos los datos de los administrativos (su trabajo es, en ingles, CLERK).
4. Idem, pero ordenado por el nombre.
5. Obten el mismo resultado de la pregunta anterior, pero modificando la sentencia
SQL.
6. Obten el n
umero (codigo), nombre y salario de los empleados.
7. Lista los nombres de todos los departamentos.
8. Idem, pero ordenandolos por nombre.
9. Idem, pero ordenandolo por la ciudad (no se debe seleccionar la ciudad en el resultado).
10. Idem, pero el resultado debe mostrarse ordenado por la ciudad en orden inverso.
11. Obtener el nombre y empleo de todos los empleados, ordenado por salario.
12. Obtener el nombre y empleo de todos los empleados, ordenado primero por su
trabajo y luego por su salario.
13. Idem, pero ordenando inversamente por empleo y normalmente por salario.
14. Obten los salarios y las comisiones de los empleados del departamento 30.
15. Idem, pero ordenado por comision.
16. (a) Obten las comisiones de todos los empleados. (b) Obten las comisiones de todos
los empleados de forma que no se repitan.
17. Obten el nombre de empleado y su comision SIN FILAS repetidas.
18. Obten los nombres de los empleados y sus salarios, de forma que no se repitan filas.
19. Obten las comisiones de los empleados y sus n
umeros de departamento, de forma
que no se repitan filas.
20. Obten los nuevos salarios de los empleados del departamento 30, que resultaran de
sumar a su salario una gratificacion de 1000. Muestra tambien los nombres de los
empleados.
21. Lo mismo que la anterior, pero mostrando tambien su salario original, y haz que la
columna que almacena el nuevo salario se denomine NUEVO SALARIO.
22. Halla los empleados que tienen una comision superior a la mitad de su salario.
23. Halla los empleados que no tienen comision, o que la tengan menor o igual que el
25 % de su salario.
6

CONSULTAS

Pagina 9 de 13
24. Obten una lista de nombres de empleados y sus salarios, de forma que en la salida
aparezca en todas las filas Nombre: Salario:.antes del respectivo campo. Hazlo de
forma que selecciones exactamente tres expresiones.
2

25. Hallar el codigo, salario y comision de los empleados cuyo codigo sea mayor que
7500.
26. Obten todos los datos de los empleados que esten (considerando una ordenacion
ASCII por nombre) a partir de la J, inclusive.
27. Obten el salario, comision y salario total (salario+comision) de los empleados con
comision, ordenando el resultado por n
umero de empleado.
28. Lista la misma informacion, pero para los empleados que no tienen comision.
29. Muestra el nombre de los empleados que, teniendo un salario superior a 1000, tengan
como jefe al empleado cuyo codigo es 7698.
30. Halla el conjunto complementario del resultado del ejercicio anterior.
31. Indica para cada empleado el porcentaje que supone su comision sobre su salario,
ordenando el resultado por el nombre del mismo.
32. Hallar los empleados del departamento 10 cuyo nombre no contiene la cadena LA.
33. Obten los empleados que no son supervisados por ning
un otro.
34. Obten los nombres de los departamentos que no sean Ventas (SALES) ni investigacion (RESEARCH). Ordena el resultado por la localidad del departamento.
35. Deseamos conocer el nombre de los empleados y el codigo del departamento de los
administrativos (CLERK) que no trabajan en el departamento 10, y cuyo salario es
superior a 800, ordenado por fecha de contratacion.
36. Para los empleados que tengan comision, obten sus nombres y el cociente de su salario entre su comision (excepto cuando la comision sea cero), ordenando el resultado
por nombre.
37. Lista toda la informacion sobre los empleados cuyo nombre completo tenga exactamente 5 caracteres.
38. Lo mismo, pero para los empleados cuyo nombre tenga al menos cinco letras.
39. Halla los datos de los empleados que, o bien su nombre empieza por A y su salario
es superior a 1000, o bien reciben comision y trabajan en el departamento 30.
40. Halla el nombre, el salario y el sueldo total de todos los empleados, ordenando el
resultado primero por salario y luego por el sueldo total. En el caso de que no tenga
comision, el sueldo total debe reflejar solo el salario.
41. Obten el nombre, salario y la comision de los empleados que perciben un salario que
esta entre la mitad de la comision y la propia comision.
42. Obten el complementario del anterior.
6

CONSULTAS

Pagina 10 de 13
43. Lista los nombres y empleos de aquellos empleados cuyo empleo acaba en MAN y
cuyo nombre empieza por A.
44. Intenta resolver la pregunta anterior con un predicado simple, es decir, de forma que
en la clausula WHERE no haya conectores logicos como AND, OR, etc. Si ayuda a
resolver la pregunta, se puede suponer que el nombre del empleado tiene al menos
cinco letras.
45. Halla los nombres de los empleados cuyo nombre tiene como maximo cinco caracteres.
46. Suponiendo que el a
no proximo la subida del sueldo total de cada empleado sera del
6 %, y el siguiente del 7 %, halla los nombres y el salario total actual, del a
no proximo
y del siguiente, de cada empleado. Indique ademas con SI o NO, si el empleado tiene
comision. Como en la pregunta 40, sino tiene comision, el total se considera igual al
salario. Se supone que no existen comisiones negativas.
47. Lista los nombres y fecha de contratacion de aquellos empleados que no son vendedores (SALESMAN).
48. Obten la informacion disponible de los empleados cuyo n
umero es uno de los siguientes: 7844, 7900, 7521, 7521, 7782, 7934, 7678 y 7369, pero que no sea uno de
los siguientes: 7902, 7839, 7499 ni 7878. La sentencia no debe complicarse innecesariamente, y debe dar el resultado correcto independientemente de los empleados
almacenados en la base de datos.
49. Ordena los empleados por su codigo de departamento, y luego de manera descendente por su n
umero de empleado.
50. Para los empleados que tengan como jefe a un empleado con codigo mayor que el
suyo, obten los que reciben de salario mas de 1000 y menos de 2000, o que estan en
el departamento 30.
51. Obten el salario mas alto de la empresa, el total destinado a comisiones y el n
umero
de empleados.
52. Halla los datos de los empleados cuyo salario es mayor que el del empleado de codigo
7934, ordenando por el salario.
53. Obten la informacion en la que se reflejen los nombres, empleos y salarios tanto de
los empleados que superan en salario a Allen como del propio Allen.
54. Halla el nombre del u
ltimo empleado por orden alfabetico.
55. Halla el salario mas alto, el mas bajo, y la diferencia entre ellos.
56. Sin conocer los resultados del ejercicio anterior, quienes reciben el salario mas alto
y el mas bajo, y a cuanto ascienden estos salarios?
57. Considerando empleados con salario menor de 5000, halla la media de los salarios
de los departamentos cuyo salario mnimo supera a 900. Muestra tambien el codigo
y el nombre de los departamentos.

CONSULTAS

Pagina 11 de 13
58. Que empleados trabajan en ciudades de mas de cinco letras? Ordena el resultado
inversamente por ciudades y normalmente por los nombres de los empleados.
59. Halla los empleados cuyo salario supera o coincide con la media del salario de la
empresa.
60. Obten los empleados cuyo salario supera al de sus compa
neros de departamento.
61. Cuantos empleos diferentes, cuantos empleados, y cuantos salarios diferentes encontramos en el departamento 30, y a cuanto asciende la suma de salarios de dicho
departamento?
62. Cuantos empleados tienen comision?
63. Cuantos empleados tiene el departamento 20?
64. Halla los departamentos que tienen mas de tres empleados, y el n
umero de empleados
de los mismos.
65. Obten los empleados del departamento 10 que tienen el mismo empleo que alguien
del departamento de Ventas. Desconocemos el codigo de dicho departamento.
66. Halla los empleados que tienen por lo menos un empleado a su mando, ordenados
inversamente por nombre.
67. Obten informacion sobre los empleados que tienen el mismo trabajo que alg
un empleado que trabaje en Chicago.
68. Que empleos distintos encontramos en la empresa, y cuantos empleados desempe
nan cada uno de ellos?
69. Halla la suma de salarios de cada departamento.
70. Obten todos los departamentos sin empleados.
71. Halla los empleados que no tienen a otro empleado a sus ordenes.
72. Cuantos empleados hay en cada departamento, y cual es la media anual del salario
de cada uno (el salario almacenado es mensual)? Indique el nombre del departamento
para clarificar el resultado.
73. Halla los empleados del departamento 30, por orden descendente de comision.
74. Obten los empleados que trabajan en Dallas o New York.
75. Obten un listado en el que se reflejen los empleados y los nombres de sus jefes. En
el listado deben aparecer todos los empleados, aunque no tengan jefe, poniendo un
nulo el nombre de este.
76. Lista los empleados que tengan el mayor salario de su departamento, mostrando el
nombre del empleado, su salario y el nombre del departamento.

CONSULTAS

Pagina 12 de 13
77. Deseamos saber cuantos empleados supervisa cada jefe. Para ello, obten un listado en
el que se reflejen el codigo y el nombre de cada jefe, junto al n
umero de empleados
que supervisa directamente. Como puede haber empleados sin jefe, para estos se
indicara solo el n
umero de ellos, y los valores restantes (codigo y nombre del jefe)
se dejaran como nulos.
78. Hallar el departamento cuya suma de salarios sea la mas alta, mostrando esta suma
de salarios y el nombre del departamento.
79. Obten los datos de los empleados que cobren los dos mayores salarios de la empresa.
(Nota: procure hacer la consulta de forma que sea facil obtener los empleados de los
N mayores salarios).
80. Obten las localidades que no tienen departamentos sin empleados y en las quetrabajen al menos cuatro empleados. Indica tambien el n
umero de empleados que
trabajan en esas localidades. (Nota: por ejemplo, puede que en Madrid existan dos
departamentos, uno con mas de cuatro empleados y otro sin empleados, en tal caso,
Madrid no debe aparecer en el resultado, puesto que tiene un departamento SIN
EMPLEADOS, a pesar de tener otro con empleados y tener mas de cuatro emplea la restriccion de que tienen que ser cuatro empleados
dos EN TOTAL. ATENCION,
se refiere a la totalidad de los departamentos de la localidad).

CONSULTAS

Pagina 13 de 13

7.

Consultas adicionales

1. Los empleados contratados antes que su jefe.


2. Para cada puesto de trabajo el/los empleados que mas ganan.
3. El puesto de trabajo con el salario medio mas alto.
4. Para cada empleado obten el nombre del departamento donde trabaja, su nombre
y el nombre de su jefe. Deben aparecer todos los empleados.
5. Obten el codigo de empleado, el nombre, el salario, el codigo del proyecto y las horas
que le dedica cada empleado vinculado a alg
un proyecto, ordenado por el codigo del
empleado.
6. Obten un listado de todos los empleados (codigo, nombre) donde aparezca tambien
el nombre del departamento donde trabajan, y el total de horas dedicado a proyectos.
7. Obten un listado de todos los empleados (codigo, nombre) donde aparezca tambien
el nombre del departamento donde trabajan, y las horas dedicadas la cada proyecto,
indicando tambien el nombre. Si no trabaja en ning
un proyecto el empleado debe
aparecer igual, indicando 0 horas y un nulo en el nombre del proyecto.
8. Departamento con el mayor n
umero de jefes.
9. Nombres de empleados que trabajan solos en alg
un proyecto.
10. Para cada empleado, n
umero, nombre y contar cuantos ganan menos que el (si no
hay ninguno, debe aparecer un 0). Ahora, contando cuantos ganan mas que el.
11. Para cada empleado, n
umero, nombre y contar cuantos (descontando a el mismo)
ganan lo mismo o menos que el (si no hay ninguno, debe aparecer un 0).
12. Para cada empleado mostrar cuantos empleados supervisa en cada departamento, si
no es jefe mostrar un cero en el n
umero de empleados supervisados. Mostrar nombre
de empleado y nombre departamento.
13. El nombre del jefe cuyos subordinados tienen el salario medio mas alto.
14. Para cada puesto de trabajo mostrar el/los nombre/s de departamento/s donde los
empleados con ese trabajo tienen el salario medio mas alto.
15. El nombre de departamento con mas empleados que ganan mas que su jefe.

CONSULTAS ADICIONALES

Potrebbero piacerti anche