Ejercicios SELECT

8
Práctica SELECTS MySQL Daniel Santiago Crear la base de datos que se muestra a continuación, con los datos correspondientes, y realizar las consultas propuestas en lenguaje SQL. Base de datos Empresa I+D Descripción de los atributos de las tablas Tabla Departamento num_dpt INTEGER Llave primaria nombre_dpt VARCHAR(20) planta INTEGER edificio VARCHAR(30) ciudad_dpt VARCHAR(20) Tabla Proyecto num_proy INTEGER Llave primaria nombre_proy VARCHAR(10) producto VARCHAR(20) presupuesto INTEGER Tabla Empleado num_empl INTEGER Llave primaria nombre_empl VARCHAR(30) sueldo INTEGER ciudad_empl VARCHAR(20) num_dpt INTEGER Llave foránea num_proy INTEGER Llave foránea Datos que hay que introducir: insert into Departamento values (1, 'DIRECCION', 10, 'PAU CLARIS', 'BARCELONA') Pàg 1 de 8

description

Ejercicios resueltos SELECT SQL

Transcript of Ejercicios SELECT

Page 1: Ejercicios SELECT

Práctica SELECTS MySQLDaniel Santiago

Crear la base de datos que se muestra a continuación, con los datos correspondientes, y realizar las consultas propuestas en lenguaje SQL.

Base de datos Empresa I+D

Descripción de los atributos de las tablas Tabla Departamento

num_dpt INTEGER Llave primarianombre_dpt VARCHAR(20)planta INTEGERedificio VARCHAR(30)ciudad_dpt VARCHAR(20)

Tabla Proyectonum_proy INTEGER Llave primarianombre_proy VARCHAR(10)producto VARCHAR(20)presupuesto INTEGER

Tabla Empleadonum_empl INTEGER Llave primarianombre_empl VARCHAR(30)sueldo INTEGERciudad_empl VARCHAR(20)num_dpt INTEGER Llave foráneanum_proy INTEGER Llave foránea

Datos que hay que introducir:insert into Departamento values (1, 'DIRECCION', 10, 'PAU CLARIS', 'BARCELONA')insert into Departamento values (2, 'DIRECCION', 8, 'RIOS ROSAS', 'MADRID')insert into Departamento values (3, 'MARQUETING', 1, 'PAU CLARIS', 'BARCELONA')insert into Departamento values (4, 'CALIDAD', 5, 'RIOS ROSAS', 'MADRID')insert into Departamento values (5, 'PRODUCCION', 1, 'PAU CLARIS', 'BARCELONA')insert into Departamento values (6, 'RRHH', 1, 'PAU CLARIS', 'BARCELONA')

insert into Proyecto values (1, 'IBDTEL', 'TELEVISION', 1000000)

Pàg 1 de 6

Page 2: Ejercicios SELECT

Práctica SELECTS MySQLDaniel Santiagoinsert into Proyecto values (2, 'IBDVID', 'VIDEO', 500000)insert into Proyecto values (3, 'IBDTEF', 'TELEFONIA', 750000)insert into Proyecto values (4, 'IBDRAD', 'RADIO', 250000)insert into Proyecto values (5, 'IBDCOM', 'COMUNICACIONES', 500000)

insert into Empleado values (1, 'CARME', 40000, 'MATARO', 1, 1)insert into Empleado values (2, 'EUGENIA', 35000, 'TOLEDO', 2, 2)insert into Empleado values (3, 'JOSEP', 25000, 'SITGES', 3, 1)insert into Empleado values (4, 'RICARDO', 40000, 'BARCELONA', 1, 1)insert into Empleado values (11, 'NURIA', 20000, 'VIC', 3, 2)insert into Empleado values (12, 'NURIA', 20000, 'MATARO', 5, 5)insert into Empleado values (13, 'ALBERT', 20000, 'BARCELONA', 1, 5)insert into Empleado values (14, 'MANEL', 30000, 'TERRASA', 4, 3)insert into Empleado values (15, 'JORDI', 30000, 'BARCELONA', 5, 3)insert into Empleado values (20, 'MARIA', 18000, 'GETAFE', 5, 2)insert into Empleado values (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, sueldofrom Empleadowhere num_dpt IN (1, 2, 3)

Q2.- Obtener los nombres de los empleados del departamento número 5 y del edificio donde trabajan.select e.nombre_empl, d.edificiofrom Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND e.num_dpt = 5

Q3.- Obtener los números y los nombres de los departamentos situados en Madrid, que tienen empleados que ganan más de 20.000 €.select distinct d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere d.ciudad = 'MADRID' AND d.num_dpt = e.num_dpt AND e.sueldo > 20000

Q4.- Obtener por orden alfabético descendiente los nombres de los empleados que ganan más de 20.000 €.select nombre_emplfrom Empleadowhere sueldo > 20000order by nombre_empl DESC

Q5.- Obtener para cada departamento cual es el sueldo más grande. Concretamente, se debe mostrar el número de departamento y el sueldo más grande.select e.num_dpt, MAX(e.sueldo) AS 'sueldo maximo'from Empleado eGROUP BY e.num_dpt

Q6.- Obtener todos los números y los nombres de los empleados que no son del departamento número 1 y que trabajan en Barcelona.select e.num_empl, e.nombre_emplfrom Empleado e, Departamento dwhere 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 dwhere e.num_dpt = d.num_dpt AND d.ciudad = 'MADRID'

Q8.- Obtener los nombres de los empleados que ganan más que el empleado número 3.

Pàg 2 de 6

Page 3: Ejercicios SELECT

Práctica SELECTS MySQLDaniel Santiagoselect e.nombre_emplfrom Empleado e, Empleado e1where e1.num_empl = 3 AND e.sueldo > e1.sueldo

Q9.- Obtener el nombre de los empleados que ganan el sueldo más alto.select e.nombre_emplfrom Empleado ewhere e.sueldo = (SELECT MAX (sueldo) FROM Empleado)

Q10.- Obtener los números y los nombres de los proyectos que no tienen ningún empleado asignado.select p.num_proy, p.nombre_proyfrom Proyecto pwhere 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_dptfrom Departamento d, Empleado e, Proyecto pwhere 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 número 2.select e.nombre_emplfrom Empleado ewhere e.num_proy <> 2

Q13.- Obtener los números y los nombres de los departamentos que tienen 2 o más empleados en el proyecto 1.select d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere e.num_dpt = d.num_dpt AND e.num_proy = 1group by d.num_dpt, d.nombre_dpthaving COUNT(*) >= 2

Q14.- Obtener los números y los nombres de los proyectos que tienen asignados más de 2 empleados.select p.num_proy, p.nombre_proyfrom Proyecto p, Empleado ewhere e.num_proy = p.num_proygroup by p.num_proy, p.nombre_proyhaving COUNT(*) > 2

Q15.- Obtener los productos que tienen asignados los empleados del departamento número 1.select distinct p.productofrom Proyecto p, Empleado ewhere 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 número 2.select d.nombre_dpt, p.nombre_proyfrom Departamento d, Proyecto p, Empleado ewhere e. num_empl = 2 AND e.num_proy = p.num_proy AND e.num_dpt = d.num_dpt

Q17.- Obtener el número 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_emplfrom Departamento d, Empleado ewhere e.num_dpt = d.num_dpt AND e.ciudad_empl = d.ciudad

Q18.- Obtener para cada proyecto que tenga más de un empleado trabajando en el mismo edificio, el número y el nombre del proyecto y el nombre del edificio.select p.num_proy, p.nombre_proy, d.edificio

Pàg 3 de 6

Page 4: Ejercicios SELECT

Práctica SELECTS MySQLDaniel Santiagofrom Proyecto p, Departamento d, Empleado ewhere e.num_dpt = d.num_dpt AND p.num_proy = e.num_proygroup by p.num_proy, p.nombre_proy, d.edificiohaving COUNT(*) > 1

Q19.- Obtener los proyectos con un presupuesto más pequeño que el presupuesto del proyecto número 1. Concretamente, se pide el número y el nombre de los proyectos y el sueldo promedio de los empleados que están asignados.select p.num_proy, p.nombre_proy, AVG(e.sueldo) AS 'Sueldo medio'from Proyecto p, Proyecto p1, Empleado ewhere p1.num_proy = 3 AND p.presupuesto < p1.presupuesto AND e.num_proy = p.num_proygroup by p.num_proy, p.nombre_proy

Q20.- Obtener el número y el nombre de los proyectos que tienen un presupuesto más pequeño que 600.000 € y que todos los empleados que están asignados tienen un sueldo superior o igual a 20.000 €.select p.num_proy, p.nombre_proyfrom Proyecto p, Empleado ewhere p.presupuesto < 600000 AND e.num_proy = p.num_proygroup by p.num_proy, p.nombre_proyhaving MIN(e.sueldo) >=20000

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

Q22.- Obtener los departamentos que tienen más empleados que el departamento número 3. Concretamente, se pide el número y el nombre de estos departamentos.select d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere d.num_dpt = e.num_dptgroup by d.num_dpt, d.nombre_dpthaving COUNT(*) > (SELECT COUNT(*) FROM Empleado e1 WHERE e1.num_dpt = 3)

Q23.- Obtener los departamentos que no tienen ningún empleado asignado y que están situados en la ciudad de Barcelona. Concretamente, se pide el número y el nombre de estos departamentos.select d.num_dpt, d.nombre_dptfrom Departamento dwhere d.ciudad = 'BARCELONA' AND d.num_dpt NOT IN (SELECT e.num_dpt FROM Empleado e)

Q24.- Obtener los proyectos que tienen asignados más de dos empleados de la misma ciudad. Concretamente, se pide el número, el nombre y el presupuesto de estos proyectos.select p.num_proy, p.nombre_proy, p.presupuestofrom Proyecto p, Empleado ewhere p.num_proy = e.num_proygroup by p.num_proy, p.nombre_proy, p.presupuesto, e.ciudad_emplhaving count(*) > 2

Q25.- Obtener el número, el nombre y los sueldos de los empleados que tienen un sueldo más alto que el máximo de los sueldos de los empleados que tienen el número de departamento más alto de la relación empleados.select e.num_empl, e.nombre_empl, e.sueldofrom Empleado ewhere e.sueldo > (SELECT MAX(e1.sueldo) FROM Empleado e1 WHERE e1.num_dpt = (SELECT MAX(e2.num_dpt) FROM Empleado e2))

Pàg 4 de 6

Page 5: Ejercicios SELECT

Práctica SELECTS MySQLDaniel SantiagoQ26.- Obtener los datos de todos los empleados completados con los datos del proyectos al que están asignados.select *from Empleado e, Proyecto pwhere 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 están 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 están asignados.select *from Empleado e, Proyecto pwhere e.num_proy = p.num_proy AND e.ciudad_empl = 'MADRID' AND e.sueldo >= 35000 AND p.nombre_proy <> 'IBDTEL'

Q28.- Obtener el número y el nombre de los departamentos que tienen algún empleado que vive en Madrid.select d.num_dpt, d.nombre_dptfrom departamento d, Empleado ewhere d.num_dpt = e.num_dpt AND e.ciudad_empl = 'MADRID'

Q29.- Obtener el número y el nombre de los departamentos que tienen más de 5 empleados que viven en Madrid.select d.num_dpt, d.nombre_dptfrom departamento d, Empleado ewhere d.num_dpt = e.num_dpt AND e.ciudad_empl = 'MADRID'group by d.num_dpt, d.nombre_dpthaving COUNT(*) > 5

Q30.- Obtener los departamentos que tienen algún empleado que vive en Madrid. Concretamente, se pide el número 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 e1where e.num_dpt = d.num_dpt AND e.ciudad_empl = 'MADRID' AND e1.num_dpt = d.num_dptgroup by d.num_dpt, d.nombre_dpt

Q31.- Obtener el número y el nombre de los departamentos que tienen dos o más empleados que viven en una misma ciudad.select d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere e.num_dpt = d.num_dptgroup by d.num_dpt, d.nombre_dpt, e.ciudad_emplhaving COUNT(*) >= 2

Q32.- Obtener el número y el nombre de los departamentos que tienen dos o más empleados que viven en ciudades diferentes.select d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere e.num_dpt = d.num_dptgroup by d.num_dpt, d.nombre_dpthaving COUNT(DISTINCT e.ciudad_empl) >= 2

Q33.- Obtener el número y el nombre de los departamentos que no tienen ningún empleado que viva en Madrid.select d.num_dpt, d.nombre_dptfrom Departamento dwhere not exists (select * from Empleado e where e.num_dpt = d.num_dpt AND e.ciudad_empl = 'MADRID')

Pàg 5 de 6

Page 6: Ejercicios SELECT

Práctica SELECTS MySQLDaniel SantiagoQ34.- Obtener el número y el nombre de los departamentos tales que todos sus empleados vivan en Madrid. El resultado no debe incluir aquellos departamentos que no tienen ningún empleado.select d.num_dpt, d.nombre_dptfrom Departamento d, Empleado ewhere 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 algún empleado que trabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where 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 más empleados que trabajen en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where 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 ningún empleado que trabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where 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 ningún empleado.update Proyecto set presupuesto = presupuesto + 50000where 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 están asignados a los departamentos situados en el edificio Pau Claris de Barcelona.delete from Empleadowhere num_empl IN (select e.num_emplfrom Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND d.edificio = 'PAU CLARIS')

Q40.- Borrar los departamentos que no tienen ningún empleado.delete from Departamentowhere num_dpt NOT IN (select num_dpt from Empleado)

Pàg 6 de 6