Ejercicios SQL – Empresa - GBD

Anuncio
Ejercicios SQL. - Empresa.
Ejercicios SQL
– Empresa
La siguiente base de datos almacena información sobre los empleados, clientes, productos, pedidos y
departamentos de una empresa:
CLIENTES (cliente_no, nombre, localidad, vendedor_no*, debe, haber, limite_credito)
EMPLEADOS (emp_no, apellido, oficio, director*, fecha_alta, salario, comision*, dep_no)
PRODUCTOS (producto_no, descripción, precio_actual, stock_disponible)
PEDIDOS (pedido_no, producto_no, cliente_no, unidades, fecha_pedido)
DEPARTAMENTOS (dep_no, dnombre, localidad)
La clave primaria de cada relación está formada por los atributos que aparecen subrayados. La información que
contienen las relaciones anteriores se describe a continuación:

La relación EMPLEADOS almacena la información referente a los empleados de la empresa: número de
empleado (emp_no), apellido (apellido), función que desempeñan en la empresa (oficio), código de su
director(director), fecha de alta en la empresa (fecha_alta), sueldo (salario), comisiones (comisión) y número del
departamento al que pertencen (dep_no). Esta tabla está relacionada con DEPARTAMENTOS a través del atributo
dep_no (número de departamento), y también está relacionada consigo misma mediante los atributos emp_no y
director.

La relación DEPARTAMENTO almacena los datos sobre los departamentos de que consta la empresa: número
de departamento (dep_no), nombre (nombre) y localidad en que se encuentra (localidad).

La relación CLIENTES almacena los datos de los clientes: número de cliente (cliente_no), nombre (nombre),
localidad (localidad), vendedor asignado al cliente (vendedor_no), el debe, el haber y el límite de crédito para ese
cliente (debe, haber, limite_credito). Esta tabla se relaciona con EMPLEADOS por medio del atributo vendedor_no que
hace referencia al atributo emp_no en EMPLEADOS.

La relación PRODUCTOS almacena los datos de los clientes: número de producto (producto_no), descripción del
producto (descripción), precio actual (precio_actual), y stock disponible del producto (stock_disponible).

La relación PEDIDOS almacena información referente a los pedidos realizados por los clientes: número de
pedido (pedido_no), número de producto (producto_no), código del cliente que ha realizado el pedido (cliente_no),
unidades (unidades), y fecha en que se efectuó el pedido (fecha_pedido). Esta tabla está relacionada con
PRODUCTOS mediante el atributo producto_no y con CLIENTES mediante el atributo cliente_no.
Las claves ajenas se muestran a continuación:
CLIENTES
vendedor_no
EMPLEADOS
EMPLEADOS
B:N; M:C
EMPLEADOS
dep_no
cliente_no
B:C; M:C
EMPLEADOS
B:N; M:C
DEPARTAMENTO
B:C; M:C
PEDIDOS
director
PEDIDOS
producto_no
PRODUCTOS
B:C; M:C
CLIENTES
1
Ejercicios SQL. - Empresa.
cliente_no
nombre
CLIENTES
localidad
vendedor_no
debe
101
DISTRIBUCIONES GOMEZ
MADRID
7499
0
0
102
LOGITRONICA S.L.
BARCELONA
7654
0
0
5000
103
INDUSTRIAS LACTEAS S.A.
LAS ROZAS
7844
0
0
10000
104
TALLERES ESTESO S.A.
SEVILLA
7654
0
0
5000
105
EDICIONES SANZ
BARCELONA
7499
0
0
5000
106
SIGNOLOGIC S.A.
MADRID
7654
0
0
5000
107
MARTIN Y ASOCIADOS S.L.
ARAVACA
7844
0
0
10000
108
MANUFACTURAS ALI S.A.
SEVILLA
7654
0
0
5000
dep_no
5000
PRODUCTOS
descripción
precio_actual stock_disponible
producto_no
DEPARTAMENTOS
dnombre
localidad
haber limite_credito
10
MESA DESPACHO MOD. GAVIOTA
550
50
20
SILLA DIRECTOR MOD. BUFALO
670
25
30
ARMARIO NOGAL DOS PUERTAS
460
20
MESA MODELO UNIÓN
340
15
10
CONTABILIDAD
BARCELONA
40
20
INVESTIGACION
VALENCIA
50
ARCHIVADOR CEREZO
1050
20
60
CAJA SEGURIDAD MOD. B222
280
15
70
DESTRUCTORA PAPEL A3
450
25
80
MODULO ORDENADOR MOD. ERGOS
550
25
30
VENTAS
MADRID
40
PRODUCCION
SEVILLA
emp_no
apellido
oficio
7499
ALONSO
VENDEDOR
7521
LOPEZ
EMPLEADO
7654
MARTIN
7698
7782
EMPLEADOS
director
fecha_alta
salario
comision
dep_no
7698
20/02/1991
1400
400
30
7782
08/05/1991
1350
VENDEDOR
7698
30/12/1991
1500
GARRIDO
DIRECTOR
7839
01/05/1991
3850
30
MARTINEZ
DIRECTOR
7839
09/06/1991
2450
10
7839
REY
PRESIDENTE
17/11/1991
6000
7844
CALVO
VENDEDOR
7698
08/09/1991
1800
7876
GIL
ANALISTA
7782
06/05/1992
3350
20
7900
JIMENEZ
EMPLEADO
7782
24/03/1993
1400
20
8998
CORTES
VENDEDOR
7698
20/02/2009
1800
30
10
1600
pedido_no
producto_no
PEDIDOS
cliente_no
unidades
fecha_pedido
1000
20
103
3
06/10/2009
1001
50
106
2
06/10/2009
1002
10
101
4
07/10/2009
1003
20
105
4
16/10/2009
1004
40
106
8
20/10/2009
1005
30
105
2
20/10/2009
1006
70
103
3
03/11/2009
1007
50
101
2
06/11/2009
1008
10
106
6
16/11/2009
1009
20
105
2
26/11/2009
1010
40
102
3
08/12/2009
1011
30
106
2
15/12/2009
1012
10
105
3
06/12/2009
1013
30
106
2
06/12/2009
1014
20
101
4
07/01/2010
1015
70
105
4
16/01/2010
1016
30
106
7
18/01/2010
1017
20
105
6
20/01/2010
30
10
0
30
2
Ejercicios SQL. - Empresa.
Resuelve las siguientes consultas en SQL:
1.
Apellido y sueldo incrementado un 10% de los empleados con oficio de vendedor.
2.
Apellido, salario, sueldo, comisión y total a cobrar por cada empleado, suponiendo que se trata de sumar su salario
a la correspondiente comisión, si la tuviera.
3.
Datos de todos aquellos empleados cuya comisión sea nula.
4.
Datos de los empleados con oficio de vendedor y salario entre 1750 y 2000 €.
5.
Datos de los empleados cuyo oficio no sea el de vendedor, cuyo apellido comience por ‘G’ y que tengan un sueldo
superior a 2500 €.
6.
Seleccionar los empleados existentes en los departamentos 10 y 30. Mostrar su número de empleado, su apellido,
y el número del departamento.
7.
Listar los empleados por departamentos en orden descendente de salarios. Mostrar el número de departamento, el
apellido y el salario.
8.
Obtener los salarios máximo, mínimo y la diferencia existente entre ambos.
9.
Calcular el salario medio de los empleados.
10. Obtener los salarios medios por departamento.
11. Obtener cuántos empleados hay en cada departamento.
12. Seleccionar el mayor salario dentro de cada oficio, excluyendo el del presidente.
13. Seleccionar los oficios que tengan dos o más empleados.
14. Seleccionar los oficios que tengan dos o más empleados, cuyo salario supere los 1400 €.
15. Obtener todos los empleados (indicando nº empleado y apellido) con su nombre de departamento y su localidad.
16. Obtener la lista de los empleados con los nombres de sus directores.
17. Obtener los jefes de los empleados cuyo oficio sea el de ‘VENDEDOR’.
18. Listar los empleados de los departamentos diferentes al de ‘VENTAS’.
19. Listar los empleados cuyo salario supere el salario medio. Mostrar su número de departamento, apellido y salario.
20. Mostrar el apellido y número de todos los empleado que tienen el mismo oficio que ‘Alonso’.
21. Obtener información de los empleados que ganan más que cualquier empleado del departamento 30.
22. Visualizar el número de vendedores del departamento de VENTAS.
23. Visualizar la suma de los salarios para cada oficio de los empleados del departamento de VENTAS.
24. Listar, en orden alfabético, aquellos empleados que no trabajen ni en Madrid ni en Barcelona.
25. Listar los nombres de los departamentos que tengan algún empleado con fecha de alta anterior a 1992.
26. Obtener los departamentos y sus nombres, siempre que haya más de un empleado trabajando en ellos.
27. Listar las localidades donde existan departamentos con empleados cuya comisión supere el 10% del salario.
28. Seleccionar aquellos departamentos en los que al menos exista un empleado con comisión.
29. Listar aquellos departamentos en los que todos sus empleados carezcan de información sobre su comisión.
30. Obtener apellido y oficio de los empleados que tienen el mismo oficio y mismo número de departamento que el de
‘INVESTIGACIÓN’.
31. Visualizar el número de departamento con más empleados.
32. Visualizar los números de departamentos en los que el salario medio de sus empleados sea mayor o igual que la
media de todos los salarios.
33. Visualizar el departamento con más presupuesto asignado para pagar el salario y la comisión de sus empleados.
34. Visualizar el número de departamento, el oficio y el salario de los oficios con mayor salario de cada departamento.
3
Ejercicios SQL. - Empresa.
Enunciados de las consultas SQL y resultados:
1.
Apellido y sueldo incrementado un 10% de los
2.
empleados con oficio de vendedor.
Apellido, salario, sueldo, comisión y total a cobrar por
cada empleado, suponiendo que se trata de sumar su
salario a la correspondiente comisión, si la tuviera.
apellido
apellido
salario
comision
Importe Total
Salario_incrementado
ALONSO
1400
400
1800
1540
LOPEZ
1350
1650
MARTIN
1500
1980
GARRIDO
3850
3850
1980
MARTINEZ
2450
2450
ALONSO
MARTIN
CALVO
CORTES
3.
4.
5.
1350
1600
3100
REY
6000
CALVO
1800
6000
GIL
3350
3350
JIMENEZ
1400
1400
CORTES
1800
1800
0
1800
Datos de todos aquellos empleados cuya comisión sea nula.
emp_no
apellido
oficio
director
fecha_alta
salario
7521
LOPEZ
EMPLEADO
7782
08/05/91
1350
comision
dep_no
10
7698
GARRIDO
DIRECTOR
7839
01/05/91
3850
30
7782
MARTINEZ
DIRECTOR
7839
09/06/91
2450
10
7839
REY
PRESIDENTE
17/11/91
6000
10
7876
GIL
ANALISTA
7782
06/05/92
3350
20
7900
JIMENEZ
EMPLEADO
7782
24/03/93
1400
20
8998
CORTES
VENDEDOR
7698
20/02/09
1800
30
Datos de los empleados con oficio de vendedor y salario entre 1750 y 2000 €.
emp_no
apellido
oficio
director
fecha_alta
salario
comision
dep_no
7844
CALVO
VENDEDOR
7698
08/09/91
1800
0
30
8998
CORTES
VENDEDOR
7698
20/02/09
1800
30
Datos de los empleados cuyo oficio no sea el de vendedor, cuyo apellido comience por ‘G’ y que tengan un sueldo
superior a 2500 €.
6.
emp_no
apellido
oficio
director
fecha_alta
salario
7698
GARRIDO
DIRECTOR
7839
01/05/91
3850
30
7876
GIL
ANALISTA
7782
06/05/92
3350
20
Seleccionar los empleados existentes en los
7.
comision
Listar los empleados por departamentos en orden
departamentos 10 y 30. Mostrar su número de
descendente
empleado,
departamento, el apellido y el salario.
su
apellido,
y
el
número
del
dep_no
de
salarios.
Mostrar
el
departamento.
dpto
apellido
salario
NºEmpleado
departamento
10
REY
6000
30
10
MARTINEZ
2450
LOPEZ
1350
7499
apellido
ALONSO
7521
LOPEZ
10
10
7654
MARTIN
30
20
GIL
3350
30
20
JIMENEZ
1400
10
30
GARRIDO
3850
10
30
CORTES
1800
CALVO
1800
7698
7782
7839
GARRIDO
MARTINEZ
REY
7844
CALVO
30
30
8998
CORTES
30
30
MARTIN
1500
30
ALONSO
1400
número
4
de
Ejercicios SQL. - Empresa.
8.
Obtener los salarios máximo, mínimo y la diferencia
9.
Calcular el salario medio de los empleados.
existente entre ambos.
maximo
minimo
diferencia
Salario Medio
6000
1350
4650
2490
10. Obtener los salarios medios por departamento.
11. Obtener cuántos empleados hay en cada departamento.
Dpto
SalarioDpto
Dpto
Empleados
30
2070
30
5
10
3266,67
10
3
20
2375
20
2
12. Seleccionar el mayor salario dentro de cada oficio,
13. Seleccionar los oficios que tengan dos o más empleados.
excluyendo el del presidente.
oficio
Mayor Salario Oficio
oficio
empleados
VENDEDOR
1800
VENDEDOR
4
EMPLEADO
1400
EMPLEADO
2
DIRECTOR
3850
DIRECTOR
2
ANALISTA
3350
14. Seleccionar los oficios que tengan dos o más empleados, cuyo salario supere los 1400 €.
oficio
empleados
VENDEDOR
3
DIRECTOR
2
15. Obtener todos los empleados (indicando nº empleado y apellido) con su nombre de departamento y su localidad.
emp_no
apellido
dnombre
localidad
7499
ALONSO
VENTAS
MADRID
7521
LOPEZ
CONTABILIDAD
BARCELONA
7654
MARTIN
VENTAS
MADRID
7698
GARRIDO
VENTAS
MADRID
7782
MARTINEZ
CONTABILIDAD
BARCELONA
7839
REY
CONTABILIDAD
BARCELONA
7844
CALVO
VENTAS
MADRID
7876
GIL
INVESTIGACION
VALENCIA
7900
JIMENEZ
INVESTIGACION
VALENCIA
8998
CORTES
VENTAS
MADRID
16. Obtener la lista de los empleados con los nombres de sus directores.
NºEmpleado
apellido
NºDirector
NombreDirector
7499
ALONSO
7698
GARRIDO
7521
LOPEZ
7782
MARTINEZ
7654
MARTIN
7698
GARRIDO
7698
GARRIDO
7839
REY
7782
MARTINEZ
7839
REY
7844
CALVO
7698
GARRIDO
7876
GIL
7782
MARTINEZ
7900
JIMENEZ
7782
MARTINEZ
8998
CORTES
7698
GARRIDO
5
Ejercicios SQL. - Empresa.
17. Obtener los jefes de los empleados cuyo oficio sea el de ‘VENDEDOR’.
NºEmpleado
apellido
NºDirector
NombreDirector
7499
ALONSO
7698
GARRIDO
7654
MARTIN
7698
GARRIDO
7844
CALVO
7698
GARRIDO
8998
CORTES
7698
GARRIDO
18. Listar los empleados de los departamentos
19. Listar los empleados cuyo salario supere el salario
diferentes al de ‘VENTAS’.
medio. Mostrar su número de departamento, apellido
y salario.
NºEmpleado
apellido
7521
LOPEZ
7782
MARTINEZ
7839
REY
7876
GIL
7900
JIMENEZ
Nºdpto
apellido
salario
30
GARRIDO
3850
10
REY
6000
20
GIL
3350
20. Mostrar el apellido y número de todos los empleado que tienen el mismo oficio que ‘Alonso’.
Nºempleado
apellido
oficio
7499
ALONSO
VENDEDOR
7654
MARTIN
VENDEDOR
7844
CALVO
VENDEDOR
8998
CORTES
VENDEDOR
21. Obtener información de los empleados que ganan
más que cualquier empleado del departamento 30.
22. Visualizar el número de vendedores del departamento de
VENTAS.
Nºempleado
apellido
oficio
salario
Nº Vendedores
7839
REY
PRESIDENTE
6000
4
23. Visualizar la suma de los salarios para cada oficio
de los empleados del departamento de VENTAS.
24. Listar, en orden alfabético, aquellos empleados que no
trabajen ni en Madrid ni en Barcelona.
oficio
TotalSalarios
Nºempleado
apellido
NºDpto
oficio
VENDEDOR
6500
7876
GIL
20
ANALISTA
DIRECTOR
3850
7900
JIMENEZ
20
EMPLEADO
25. Listar los nombres de los departamentos que
tengan algún empleado con fecha de alta anterior
26. Obtener los departamentos y sus nombres, siempre que
haya más de un empleado trabajando en ellos.
a 1992.
dep_no
dnombre
dnombre
10
CONTABILIDAD
CONTABILIDAD
20
INVESTIGACION
VENTAS
30
VENTAS
6
Ejercicios SQL. - Empresa.
27. Listar las localidades donde existan departamentos
28. Seleccionar aquellos departamentos en los que al menos
con empleados cuya comisión supere el 10% del
exista un empleado con comisión.
salario.
localidad
dep_no
dnombre
localidad
MADRID
30
VENTAS
MADRID
29. Listar aquellos departamentos en los que todos sus
30. Obtener apellido y oficio de los empleados que tienen el
empleados carezcan de información sobre su
mismo oficio y mismo número de departamento que el de
comisión.
‘INVESTIGACIÓN’.
NºDpto
Departamento
apellido
oficio
10
CONTABILIDAD
LOPEZ
EMPLEADO
20
INVESTIGACION
GIL
ANALISTA
40
PRODUCCION
JIMENEZ
EMPLEADO
31. Visualizar el número de departamento con más empleados.
NºDpto
TotalEmpleados
30
5
32. Visualizar los números de departamentos en los que el salario medio de sus empleados sea mayor o igual que la
media de todos los salarios.
NºDpto
10
33. Visualizar el departamento con más presupuesto asignado para pagar el salario y la comisión de sus empleados.
NºDpto
30
34. Visualizar el número de departamento, el oficio y el salario de los oficios con mayor salario de cada departamento.
dep_no
oficio
salario
30
DIRECTOR
3850
10
PRESIDENTE
6000
20
ANALISTA
3350
7
Ejercicios SQL. - Empresa.
Soluciones a las consultas SQL
1.
Apellido y sueldo incrementado un 10% de los empleados con oficio de vendedor.
(4 filas)
SELECT apellido, salario+salario*0.1 AS “Salario incrementado”
FROM EMPLEADOS
WHERE oficio='VENDEDOR'
2.
Apellido, salario, sueldo, comisión y total a cobrar por cada empleado, suponiendo que se trata de sumar su salario
a la correspondiente comisión, si la tuviera.

Incorrecta:
SELECT apellido, salario, comision, salario+comision AS ‘Importe Total’
FROM EMPLEADOS
Nota:
Cualquier expresión aritmética que contenga algún valor nulo, retornará un valor nulo.
Usaremos la función NVL (en MS-Access, NZ) que transforma la ausencia de información al valor que se le especifique.

Correcta:
SELECT apellido, salario, comision, salario+NVL(comision,0) AS “Importe Total”
FROM EMPLEADOS
3.
Datos de todos aquellos empleados cuya comisión sea nula.
(7 filas)
SELECT *
FROM EMPLEADOS
WHERE comision IS NULL
4.
Datos de los empleados con oficio de vendedor y salario entre 1750 y 2000 €.
(2 filas)
SELECT *
FROM EMPLEADOS
WHERE oficio='VENDEDOR' AND salario BETWEEN 1750 AND 2000
5.
Datos de los empleados cuyo oficio no sea el de vendedor, cuyo apellido comience por ‘G’ y que tengan un sueldo
superior a 2500 €.
(3 filas)
SELECT *
FROM EMPLEADOS
WHERE NOT oficio='VENDEDOR' AND apellido LIKE 'G*' AND salario > 2500
6.
Seleccionar los empleados existentes en los departamentos 10 y 30. Mostrar su número de empleado, su apellido,
y el número del departamento.

(8 filas)
Una forma:
SELECT emp_no AS NºEmpleado, apellido, dep_no AS departamento
FROM EMPLEADOS
WHERE dep_no IN (10,30)

O también:
SELECT emp_no AS NºEmpleado, apellido, dep_no AS departamento
FROM EMPLEADOS
WHERE dep_no=10 OR dep_no=30
8
Ejercicios SQL. - Empresa.
7.
Listar los empleados por departamentos en orden descendente de salarios. Mostrar el número de departamento, el
apellido y el salario.
SELECT dep_no AS dpto, apellido, salario
FROM EMPLEADOS
ORDER BY dep_no, salario DESC
8.
Obtener los salarios máximo, mínimo y la diferencia existente entre ambos.
SELECT MAX(salario) AS maximo, MIN(salario) AS minimo, MAX(salario)-MIN(salario) AS diferencia
FROM EMPLEADOS
9.
Calcular el salario medio de los empleados.
SELECT AVG(salario) AS "Salario Medio"
FROM EMPLEADOS
10. Obtener los salarios medios por departamento.
SELECT dep_no AS Dpto, AVG(salario) AS SalarioDpto
FROM EMPLEADOS
GROUP BY dep_no
11. Obtener cuántos empleados hay en cada departamento.
SELECT dep_no AS Dpto, COUNT(*) AS Empleados
FROM EMPLEADOS
GROUP BY dep_no
12. Seleccionar el mayor salario dentro de cada oficio, excluyendo el del presidente.
SELECT oficio, MAX(salario) AS "Mayor Salario Oficio"
FROM EMPLEADOS
WHERE oficio <> 'PRESIDENTE'
GROUP BY oficio
13. Seleccionar los oficios que tengan dos o más empleados.
SELECT oficio, COUNT(*) AS empleados
FROM EMPLEADOS
GROUP BY oficio
HAVING COUNT(*)>=2
14. Seleccionar los oficios que tengan dos o más empleados, cuyo salario supere las 1400 €.
SELECT oficio, COUNT(*) AS empleados
FROM EMPLEADOS
WHERE salario>1400
GROUP BY oficio
HAVING COUNT(*)>=2
15. Obtener todos los empleados (indicando su número de empleado y apellido) con su nombre de departamento y su
localidad.
SELECT emp_no, apellido, dnombre, localidad
FROM EMPLEADOS AS Em, DEPARTAMENTOS AS De
WHERE Em.dep_no=De.dep_no
16. Obtener la lista de los empleados con los nombres de sus directores.
9
Ejercicios SQL. - Empresa.
SELECT E1.emp_no AS NºEmpleado, E1.apellido, E1.director AS NºDirector,
E2.apellido AS NombreDirector
FROM EMPLEADOS AS E1, EMPLEADOS AS E2
WHERE E1.director=E2.emp_no
17. Obtener los jefes de los empleados cuyo oficio sea el de ‘VENDEDOR’.
SELECT E1.emp_no AS NºEmpleado, E1.apellido, E1.director AS NºDirector,
E2.apellido AS NombreDirector
FROM EMPLEADOS AS E1, EMPLEADOS AS E2
WHERE E1.director=E2.emp_no AND E1.oficio='VENDEDOR'
18. Listar los empleados de los departamentos diferentes al de ‘VENTAS’.
SELECT emp_no AS NºEmpleado, apellido
FROM EMPLEADOS AS Em, DEPARTAMENTOS AS De
WHERE De.dnombre='VENTAS' AND Em.dep_no<>De.dep_no
19. Listar los empleados cuyo salario supere el salario medio. Mostrar su número de departamento, apellido y salario.
SELECT dep_no AS Nºdpto, apellido, salario
FROM EMPLEADOS
WHERE salario>(SELECT AVG(salario) FROM EMPLEADOS)
20. Obtener todos los empleados que tienen el mismo oficio que ‘Alonso’. Mostrar su apellido y número de empleado.
SELECT emp_no AS Nºempleado, apellido, oficio
FROM EMPLEADOS
WHERE oficio = ( SELECT oficio FROM EMPLEADOS
WHERE apellido='ALONSO')
21. Obtener información de los empleados que ganan más que cualquier empleado del departamento 30.
SELECT emp_no AS Nºempleado, apellido, oficio, salario
FROM EMPLEADOS
WHERE salario> ( SELECT MAX(salario) FROM EMPLEADOS
WHERE dep_no=30)
22. Visualizar el número de vendedores del departamento de VENTAS.
SELECT COUNT(*) AS Nºvendedores
FROM EMPLEADOS
WHERE dep_no=( SELECT dep_no
FROM DEPARTAMENTOS
WHERE dnombre='VENTAS' )
AND oficio='VENDEDOR'
GROUP BY oficio
SELECT COUNT(*) AS Nºvendedores
FROM EMPLEADOS Em, DEPARTAMENTOS De
WHERE De.dep_no = Em.dep_no
AND dnombre='VENTAS' AND oficio='VENDEDOR'
GROUP BY oficio
23. Visualizar la suma de los salarios para cada oficio de los empleados del departamento de VENTAS.
SELECT oficio, SUM(salario) AS TotalSalarios
FROM EMPLEADOS
WHERE dep_no = ( SELECT dep_no
FROM DEPARTAMENTOS
WHERE dnombre='VENTAS' )
GROUP BY oficio
SELECT oficio, SUM(salario) AS TotalSalarios
FROM EMPLEADOS AS Em, DEPARTAMENTOS AS De
WHERE De.dep_no=Em.dep_no AND dnombre='VENTAS'
GROUP BY oficio
10
Ejercicios SQL. - Empresa.
24. Listar, en orden alfabético, aquellos empleados que no trabajen ni en Madrid ni en Barcelona.
SELECT emp_no AS Nºempleado, apellido,
dep_no AS NºDpto, oficio
FROM EMPLEADOS
WHERE dep_no IN
( SELECT dep_no FROM DEPARTAMENTOS
WHERE localidad NOT IN ('BARCELONA','MADRID'))
SELECT emp_no AS Nºempleado,apellido,
Em.dep_no AS NºDpto, oficio
FROM EMPLEADOS Em, DEPARTAMENTOS De
WHERE Em.dep_no=De.dep_no
AND localidad NOT IN ('BARCELONA','MADRID')
25. Listar los nombres de los departamentos que tengan algún empleado con fecha de alta anterior a 1992.
SELECT dnombre
FROM DEPARTAMENTOS
WHERE dep_no IN ( SELECT dep_no
FROM EMPLEADOS
WHERE year(fecha_alta)<1992 )
SELECT DISTINCT dnombre
FROM DEPARTAMENTOS De, EMPLEADOS Em
WHERE De.dep_no=Em.dep_no
AND year(fecha_alta)<1992
26. Obtener los departamentos y sus nombres, siempre que haya más de un empleado trabajando en ellos.
SELECT dep_no, dnombre
FROM DEPARTAMENTOS
WHERE dep_no IN ( SELECT dep_no
FROM EMPLEADOS
GROUP BY dep_no
HAVING COUNT(*)>1 )
SELECT De.dep_no, dnombre
FROM DEPARTAMENTOS De, EMPLEADOS Em
WHERE Em.dep_no=De.dep_no
GROUP BY De.dep_no, dnombre
HAVING COUNT(*)>1
27. Listar las localidades donde existan departamentos con empleados cuya comisión supere el 10% del salario.
SELECT localidad
FROM DEPARTAMENTOS
WHERE dep_no IN ( SELECT dep_no
FROM EMPLEADOS
WHERE comision>0.1*salario )
28. Seleccionar aquellos departamentos en los que al menos exista un empleado con comisión.
SELECT *
FROM DEPARTAMENTOS
WHERE dep_no IN (SELECT dep_no FROM EMPLEADOS WHERE comision>0)
Tb. Podríamos haber utilizado =ANY en lugar de IN
29. Listar aquellos departamentos en los que todos sus empleados carezcan de información sobre su comisión.
SELECT dep_no AS NºDpto, dnombre AS Departamento
FROM DEPARTAMENTOS
WHERE dep_no <> ALL ( SELECT dep_no
FROM EMPLEADOS
WHERE comision IS NOT NULL)
30. Obtener apellido y oficio de los empleados que tienen el mismo oficio y mismo número de departamento que el de
‘INVESTIGACIÓN’.
SELECT apellido, oficio
FROM EMPLEADOS
WHERE oficio IN ( SELECT oficio
FROM EMPLEADOS Em, DEPARTAMENTOS De
WHERE Em.dep_no=De.dep_no AND dnombre='INVESTIGACION')
11
Ejercicios SQL. - Empresa.
31. Visualizar el número de departamento con más empleados.

Con la cláusula TOP:
SELECT TOP( 1 ) dep_no, COUNT(*) AS "Total Empleados"
FROM EMPLEADOS
GROUP BY dep_no
ORDER BY COUNT( * ) DESC

Utilizando la cláusula >= ALL
SELECT dep_no AS NºDpto, COUNT(*) AS TotalEmpleados
FROM EMPLEADOS
GROUP BY dep_no
HAVING COUNT(*) >= ALL ( SELECT COUNT(*) AS NumEmps
FROM EMPLEADOS
GROUP BY dep_no)
32. Visualizar los números de departamentos en los que el salario medio de sus empleados sea mayor o igual que la
media de todos los salarios.
SELECT dep_no AS NºDpto
FROM EMPLEADOS
GROUP BY dep_no
HAVING AVG(salario) >= ( SELECT AVG(salario) FROM EMPLEADOS)
33. Visualizar el departamento con más presupuesto asignado para pagar el salario y la comisión de sus empleados.

Con la cláusula TOP:
SELECT TOP(1) dep_no
FROM EMPLEADOS
GROUP BY dep_no
ORDER BY SUM(salario+NVL(comision,0)) DESC

Utilizando la cláusula >= ALL
SELECT dep_no AS NºDpto
FROM EMPLEADOS
GROUP BY dep_no
HAVING SUM(salario+NVL(comision,0)) >= ALL ( SELECT SUM(salario+NVL(comision,0))
FROM EMPLEADOS
GROUP BY dep_no)
34. Visualizar el número de departamento, el oficio y el salario de los oficios con mayor salario de cada departamento.
SELECT dep_no, oficio, salario
FROM EMPLEADOS E1
WHERE salario = ( SELECT MAX(salario)
FROM EMPLEADOS E2
WHERE E1.dep_no=E2.dep_no)
12
Descargar