Sunteți pe pagina 1din 6

Prctica SELECTS MySQL

Daniel Santiago
Crear la base de datos que se muestra a continuacin, con los datos
correspondientes, y realizar las consultas propuestas en lenguaje SQL.
Base de datos Empresa I+D
Descripcin de los atributos de las tablas
Tabla Departamento
num_dpt
INTEGER
Llave
nombre_dpt
VARCHAR(20)
planta
INTEGER
edificio
VARCHAR(30)
ciudad_dpt
VARCHAR(20)
Tabla Proyecto
num_proy
INTEGER
nombre_proy VARCHAR(10)
producto
VARCHAR(20)
presupuesto
INTEGER
Tabla Empleado
num_empl
INTEGER
Llave
nombre_empl VARCHAR(30)
sueldo
INTEGER
ciudad_empl
VARCHAR(20)
num_dpt
INTEGER
Llave
num_proy
INTEGER

Datos que hay que introducir:


insert into Departamento values (1,
'BARCELONA')
insert into Departamento values (2,
insert into Departamento values (3,
'BARCELONA')
insert into Departamento values (4,
insert into Departamento values (5,
'BARCELONA')
insert into Departamento values (6,

primaria

Llave primaria

primaria

fornea
Llave fornea

'DIRECCION', 10, 'PAU CLARIS',


'DIRECCION', 8, 'RIOS ROSAS', 'MADRID')
'MARQUETING', 1, 'PAU CLARIS',
'CALIDAD', 5, 'RIOS ROSAS', 'MADRID')
'PRODUCCION', 1, 'PAU CLARIS',
'RRHH', 1, 'PAU CLARIS', 'BARCELONA')

Pg 1 de 6

Prctica SELECTS MySQL


Daniel Santiago
insert into Proyecto values (1,
insert into Proyecto values (2,
insert into Proyecto values (3,
insert into Proyecto values (4,
insert into Proyecto values (5,
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert
insert

into
into
into
into
into
into
into
into
into
into
into

Empleado
Empleado
Empleado
Empleado
Empleado
Empleado
Empleado
Empleado
Empleado
Empleado
Empleado

values
values
values
values
values
values
values
values
values
values
values

'IBDTEL', 'TELEVISION', 1000000)


'IBDVID', 'VIDEO', 500000)
'IBDTEF', 'TELEFONIA', 750000)
'IBDRAD', 'RADIO', 250000)
'IBDCOM', 'COMUNICACIONES', 500000)

(1, 'CARME', 40000, 'MATARO', 1, 1)


(2, 'EUGENIA', 35000, 'TOLEDO', 2, 2)
(3, 'JOSEP', 25000, 'SITGES', 3, 1)
(4, 'RICARDO', 40000, 'BARCELONA', 1, 1)
(11, 'NURIA', 20000, 'VIC', 3, 2)
(12, 'NURIA', 20000, 'MATARO', 5, 5)
(13, 'ALBERT', 20000, 'BARCELONA', 1, 5)
(14, 'MANEL', 30000, 'TERRASA', 4, 3)
(15, 'JORDI', 30000, 'BARCELONA', 5, 3)
(20, 'MARIA', 18000, 'GETAFE', 5, 2)
(21, 'IGNACIO', 37000, 'MADRID', 4, 5)

Consultas:
Q1.- Obtener el nombre y el sueldo de los empleados con num_dpt 1, 2 o 3.
select nombre_empl, sueldo
from Empleado
where num_dpt IN (1, 2, 3)

Q2.- Obtener los nombres de los empleados del departamento nmero 5 y del
edificio donde trabajan.
select e.nombre_empl, d.edificio
from Empleado e, Departamento d
where e.num_dpt = d.num_dpt AND e.num_dpt = 5

Q3.- Obtener los nmeros y los nombres de los departamentos situados en


Madrid, que tienen empleados que ganan ms de 20.000 .
select distinct d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where d.ciudad = 'MADRID' AND d.num_dpt = e.num_dpt AND e.sueldo > 20000

Q4.- Obtener por orden alfabtico descendiente los nombres de los empleados
que ganan ms de 20.000 .
select nombre_empl
from Empleado
where sueldo > 20000
order by nombre_empl DESC

Q5.- Obtener para cada departamento cual es el sueldo ms grande.


Concretamente, se debe mostrar el nmero de departamento y el sueldo ms
grande.
select e.num_dpt, MAX(e.sueldo) AS 'sueldo maximo'
from Empleado e
GROUP BY e.num_dpt

Q6.- Obtener todos los nmeros y los nombres de los empleados que no son
del departamento nmero 1 y que trabajan en Barcelona.
select e.num_empl, e.nombre_empl
from Empleado e, Departamento d
where e.num_dpt <> 1 AND e.num_dpt = d.num_dpt AND d.ciudad = 'BARCELONA'

Q7.- Obtener cuantas personas de los diferentes departamentos trabajan en la


ciudad de Madrid.
select COUNT(*)
from Empleado e, Departamento d

Pg 2 de 6

Prctica SELECTS MySQL


Daniel Santiago
where e.num_dpt = d.num_dpt AND d.ciudad = 'MADRID'

Q8.- Obtener los nombres de los empleados que ganan ms que el empleado
nmero 3.
select e.nombre_empl
from Empleado e, Empleado e1
where e1.num_empl = 3 AND e.sueldo > e1.sueldo

Q9.- Obtener el nombre de los empleados que ganan el sueldo ms alto.


select e.nombre_empl
from Empleado e
where e.sueldo = (SELECT MAX (sueldo) FROM Empleado)

Q10.- Obtener los nmeros y los nombres de los proyectos que no tienen
ningn empleado asignado.
select p.num_proy, p.nombre_proy
from Proyecto p
where p.num_proy NOT IN (select e.num_proy from empleado e)

Q11.- Obtener los nombres de los departamentos que tienen empleados que
trabajan en el proyecto IBDTEL.
select distinct d.nombre_dpt
from Departamento d, Empleado e, Proyecto p
where d.num_dpt = e.num_dpt AND e.num_proy = p.num_proy AND p.nombre_proy
= 'IBDTEL'

Q12.- Obtener los nombres de los empleados que no trabajan en el proyecto


nmero 2.
select e.nombre_empl
from Empleado e
where e.num_proy <> 2

Q13.- Obtener los nmeros y los nombres de los departamentos que tienen 2 o
ms empleados en el proyecto 1.
select d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where e.num_dpt = d.num_dpt AND e.num_proy = 1
group by d.num_dpt, d.nombre_dpt
having COUNT(*) >= 2

Q14.- Obtener los nmeros y los nombres de los proyectos que tienen
asignados ms de 2 empleados.
select p.num_proy, p.nombre_proy
from Proyecto p, Empleado e
where e.num_proy = p.num_proy
group by p.num_proy, p.nombre_proy
having COUNT(*) > 2

Q15.- Obtener los productos que tienen asignados los empleados del
departamento nmero 1.
select distinct p.producto
from Proyecto p, Empleado e
where e.num_proy = p.num_proy AND e.num_dpt = 1

Q16.- Obtener el nombre de departamento donde trabaja y el nombre del


proyecto donde est asignado el empleado nmero 2.
select d.nombre_dpt, p.nombre_proy
from Departamento d, Proyecto p, Empleado e
where e. num_empl = 2 AND e.num_proy =
d.num_dpt

p.num_proy

AND

e.num_dpt

Q17.- Obtener el nmero y el nombre de los empleados que viven en la misma


ciudad donde est situado el departamento donde trabajan.
select e.num_empl, e.nombre_empl
from Departamento d, Empleado e

Pg 3 de 6

Prctica SELECTS MySQL


Daniel Santiago
where e.num_dpt = d.num_dpt AND e.ciudad_empl = d.ciudad

Q18.- Obtener para cada proyecto que tenga ms de un empleado trabajando


en el mismo edificio, el nmero y el nombre del proyecto y el nombre del
edificio.
select p.num_proy, p.nombre_proy, d.edificio
from Proyecto p, Departamento d, Empleado e
where e.num_dpt = d.num_dpt AND p.num_proy = e.num_proy
group by p.num_proy, p.nombre_proy, d.edificio
having COUNT(*) > 1

Q19.- Obtener los proyectos con un presupuesto ms pequeo que el


presupuesto del proyecto nmero 1. Concretamente, se pide el nmero y el
nombre de los proyectos y el sueldo promedio de los empleados que estn
asignados.
select p.num_proy, p.nombre_proy, AVG(e.sueldo) AS 'Sueldo medio'
from Proyecto p, Proyecto p1, Empleado e
where p1.num_proy = 3 AND p.presupuesto < p1.presupuesto AND e.num_proy =
p.num_proy
group by p.num_proy, p.nombre_proy

Q20.- Obtener el nmero y el nombre de los proyectos que tienen un


presupuesto ms pequeo que 600.000 y que todos los empleados que estn
asignados tienen un sueldo superior o igual a 20.000 .
select p.num_proy, p.nombre_proy
from Proyecto p, Empleado e
where p.presupuesto < 600000 AND e.num_proy = p.num_proy
group by p.num_proy, p.nombre_proy
having MIN(e.sueldo) >=20000

Q21.- Obtener los nombres de las ciudades donde viven empleados pero no
hay ningn departamento.
select distinct e.ciudad_empl
from Empleado e
where e.ciudad_empl NOT IN (select d.ciudad_dpt from Departamento d)

Q22.- Obtener los departamentos que tienen ms empleados que el


departamento nmero 3. Concretamente, se pide el nmero y el nombre de
estos departamentos.
select d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where d.num_dpt = e.num_dpt
group by d.num_dpt, d.nombre_dpt
having COUNT(*) > (SELECT COUNT(*) FROM Empleado e1 WHERE e1.num_dpt = 3)

Q23.- Obtener los departamentos que no tienen ningn empleado asignado y


que estn situados en la ciudad de Barcelona. Concretamente, se pide el
nmero y el nombre de estos departamentos.
select d.num_dpt, d.nombre_dpt
from Departamento d
where d.ciudad = 'BARCELONA' AND d.num_dpt NOT IN (SELECT e.num_dpt FROM
Empleado e)

Q24.- Obtener los proyectos que tienen asignados ms de dos empleados de la


misma ciudad. Concretamente, se pide el nmero, el nombre y el presupuesto
de estos proyectos.
select p.num_proy, p.nombre_proy, p.presupuesto
from Proyecto p, Empleado e
where p.num_proy = e.num_proy
group by p.num_proy, p.nombre_proy, p.presupuesto, e.ciudad_empl
having count(*) > 2

Pg 4 de 6

Prctica SELECTS MySQL


Daniel Santiago
Q25.- Obtener el nmero, el nombre y los sueldos de los empleados que tienen
un sueldo ms alto que el mximo de los sueldos de los empleados que tienen
el nmero de departamento ms alto de la relacin empleados.
select e.num_empl, e.nombre_empl, e.sueldo
from Empleado e
where e.sueldo > (SELECT MAX(e1.sueldo) FROM Empleado e1 WHERE e1.num_dpt
= (SELECT MAX(e2.num_dpt) FROM Empleado e2))

Q26.- Obtener los datos de todos los empleados completados con los datos del
proyectos al que estn asignados.
select *
from Empleado e, Proyecto p
where e.num_proy = p.num_proy

Q27.- Obtener los empleados que viven en Madrid, que tienen un sueldo
superior o igual a 35.000 y que estn asignados a un proyecto que no es el
proyecto IBDTEL. Se quieren todos los datos de los empleados completados
con los datos del proyecto al que estn asignados.
select *
from Empleado e, Proyecto p
where e.num_proy = p.num_proy AND e.ciudad_empl = 'MADRID' AND e.sueldo
>= 35000 AND p.nombre_proy <> 'IBDTEL'

Q28.- Obtener el nmero y el nombre de los departamentos que tienen algn


empleado que vive en Madrid.
select d.num_dpt, d.nombre_dpt
from departamento d, Empleado e
where d.num_dpt = e.num_dpt AND e.ciudad_empl = 'MADRID'

Q29.- Obtener el nmero y el nombre de los departamentos que tienen ms de


5 empleados que viven en Madrid.
select d.num_dpt, d.nombre_dpt
from departamento d, Empleado e
where d.num_dpt = e.num_dpt AND e.ciudad_empl = 'MADRID'
group by d.num_dpt, d.nombre_dpt
having COUNT(*) > 5

Q30.- Obtener los departamentos que tienen algn empleado que vive en
Madrid. Concretamente, se pide el nmero y el nombre de los departamentos y
el sueldo promedio de los empleados que trabajan.
select d.num_dpt, d.nombre_dpt, AVG(e1.sueldo) AS 'Sueldo medio'
from Departamento d, Empleado e, Empleado e1
where e.num_dpt = d.num_dpt AND e.ciudad_empl = 'MADRID' AND e1.num_dpt =
d.num_dpt
group by d.num_dpt, d.nombre_dpt

Q31.- Obtener el nmero y el nombre de los departamentos que tienen dos o


ms empleados que viven en una misma ciudad.
select d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where e.num_dpt = d.num_dpt
group by d.num_dpt, d.nombre_dpt, e.ciudad_empl
having COUNT(*) >= 2

Q32.- Obtener el nmero y el nombre de los departamentos que tienen dos o


ms empleados que viven en ciudades diferentes.
select d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where e.num_dpt = d.num_dpt
group by d.num_dpt, d.nombre_dpt
having COUNT(DISTINCT e.ciudad_empl) >= 2

Pg 5 de 6

Prctica SELECTS MySQL


Daniel Santiago
Q33.- Obtener el nmero y el nombre de los departamentos que no tienen
ningn empleado que viva en Madrid.
select d.num_dpt,
from Departamento
where not exists
AND e.ciudad_empl

d.nombre_dpt
d
(select * from Empleado e where e.num_dpt = d.num_dpt
= 'MADRID')

Q34.- Obtener el nmero y el nombre de los departamentos tales que todos


sus empleados vivan en Madrid. El resultado no debe incluir aquellos
departamentos que no tienen ningn empleado.
select d.num_dpt, d.nombre_dpt
from Departamento d, Empleado e
where d.num_dpt = e.num_dpt AND not exists (select * from Empleado e1
where d.num_dpt = e1.num_dpt AND e1.ciudad_empl <> 'MADRID')

Q35.- Incrementar en 50.000 el presupuesto de los proyectos que tienen algn


empleado que trabaje en Barcelona.
update Proyecto set presupuesto = presupuesto + 50000
where num_proy in (select distinct num_proy from Empleado e, Departamento
d where e.num_dpt = d.num_dpt and d.ciudad = 'BARCELONA')

Q36.- Incrementar en 50.000 el presupuesto de los proyectos que tienen 5 o


ms empleados que trabajen en Barcelona.
update Proyecto set presupuesto = presupuesto + 50000
where num_proy IN (select e.num_proy from Empleado e, Departamento d
where e.num_dpt = d.num_dpt AND d.ciudad = 'BARCELONA' group by
e.num_proy having COUNT(*) >= 5)

Q37.- Incrementar en 50.000 el presupuesto de los proyectos que no tienen


ningn empleado que trabaje en Barcelona.
update Proyecto set presupuesto = presupuesto + 50000
where num_proy NOT IN (select e.num_proy from Empleado e, Departamento d
where e.num_dpt = d.num_dpt AND d.ciudad = 'BARCELONA' group by
e.num_proy)

Q38.- Incrementar en 50.000 el presupuesto de los proyectos tales que todos


sus empleados trabajen en Barcelona. No se quiere incrementar el presupuesto
de aquellos proyectos que no tienen ningn empleado.
update Proyecto set presupuesto = presupuesto + 50000
where num_proy NOT IN (select p.num_proy from Proyecto p, Empleado e,
Departamento d where e.num_proy = p.num_proy AND d.num_dpt = e.num_dpt
AND d.ciudad <> 'BARCELONA') AND num_proy IN (select distinct e1.num_proy
from Empleado e1)

Q39.- Borrar los empleados que estn asignados a los departamentos situados
en el edificio Pau Claris de Barcelona.
delete from Empleado
where num_empl IN (select e.num_empl
from Empleado e, Departamento d
where e.num_dpt = d.num_dpt AND d.edificio = 'PAU CLARIS')

Q40.- Borrar los departamentos que no tienen ningn empleado.


delete from Departamento
where num_dpt NOT IN (select num_dpt from Empleado)

Pg 6 de 6

S-ar putea să vă placă și