Ejercicios SELECT

7,248 views

Published on

Ejercicios resueltos SELECT SQL

Published in: Education
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
7,248
On SlideShare
0
From Embeds
0
Number of Embeds
473
Actions
Shares
0
Downloads
575
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide

Ejercicios SELECT

  1. 1. Práctica SELECTS MySQLDaniel SantiagoCrear la base de datos que se muestra a continuación, con los datos correspondientes, y realizarlas consultas propuestas en lenguaje SQL.Base de datos Empresa I+DDescripció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áneaDatos 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
  2. 2. 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 dondetrabajan.select e.nombre_empl, d.edificiofrom Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND e.num_dpt = 5Q3.- Obtener los números y los nombres de los departamentos situados en Madrid, que tienenempleados 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 > 20000Q4.- Obtener por orden alfabético descendiente los nombres de los empleados que ganan más de20.000 €.select nombre_emplfrom Empleadowhere sueldo > 20000order by nombre_empl DESCQ5.- Obtener para cada departamento cual es el sueldo más grande. Concretamente, se debemostrar el número de departamento y el sueldo más grande.select e.num_dpt, MAX(e.sueldo) AS sueldo maximofrom Empleado eGROUP BY e.num_dptQ6.- Obtener todos los números y los nombres de los empleados que no son del departamentonú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 = BARCELONAQ7.- 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 = MADRIDQ8.- Obtener los nombres de los empleados que ganan más que el empleado número 3. Pàg 2 de 6
  3. 3. Práctica SELECTS MySQLDaniel Santiagoselect e.nombre_emplfrom Empleado e, Empleado e1where e1.num_empl = 3 AND e.sueldo > e1.sueldoQ9.- 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 empleadoasignado.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 elproyecto 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= IBDTELQ12.- Obtener los nombres de los empleados que no trabajan en el proyecto número 2.select e.nombre_emplfrom Empleado ewhere e.num_proy <> 2Q13.- Obtener los números y los nombres de los departamentos que tienen 2 o más empleados enel 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(*) >= 2Q14.- Obtener los números y los nombres de los proyectos que tienen asignados más de 2empleados.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(*) > 2Q15.- 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 = 1Q16.- 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_dptQ17.- 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.ciudadQ18.- Obtener para cada proyecto que tenga más de un empleado trabajando en el mismoedificio, 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
  4. 4. 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(*) > 1Q19.- Obtener los proyectos con un presupuesto más pequeño que el presupuesto del proyectonúmero 1. Concretamente, se pide el número y el nombre de los proyectos y el sueldo promediode los empleados que están asignados.select p.num_proy, p.nombre_proy, AVG(e.sueldo) AS Sueldo mediofrom 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_proyQ20.- Obtener el número y el nombre de los proyectos que tienen un presupuesto más pequeñoque 600.000 € y que todos los empleados que están asignados tienen un sueldo superior o igual a20.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) >=20000Q21.- Obtener los nombres de las ciudades donde viven empleados pero no hay ningúndepartamento.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 situadosen la ciudad de Barcelona. Concretamente, se pide el número y el nombre de estosdepartamentos.select d.num_dpt, d.nombre_dptfrom Departamento dwhere d.ciudad = BARCELONA AND d.num_dpt NOT IN (SELECT e.num_dpt FROMEmpleado 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(*) > 2Q25.- Obtener el número, el nombre y los sueldos de los empleados que tienen un sueldo másalto que el máximo de los sueldos de los empleados que tienen el número de departamento másalto 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
  5. 5. Práctica SELECTS MySQLDaniel SantiagoQ26.- Obtener los datos de todos los empleados completados con los datos del proyectos al queestán asignados.select *from Empleado e, Proyecto pwhere e.num_proy = p.num_proyQ27.- 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 delos 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 <> IBDTELQ28.- Obtener el número y el nombre de los departamentos que tienen algún empleado que viveen Madrid.select d.num_dpt, d.nombre_dptfrom departamento d, Empleado ewhere d.num_dpt = e.num_dpt AND e.ciudad_empl = MADRIDQ29.- Obtener el número y el nombre de los departamentos que tienen más de 5 empleados queviven en Madrid.select d.num_dpt, d.nombre_dptfrom departamento d, Empleado ewhere d.num_dpt = e.num_dpt AND e.ciudad_empl = MADRIDgroup by d.num_dpt, d.nombre_dpthaving COUNT(*) > 5Q30.- 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 losempleados que trabajan.select d.num_dpt, d.nombre_dpt, AVG(e1.sueldo) AS Sueldo mediofrom 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_dptQ31.- Obtener el número y el nombre de los departamentos que tienen dos o más empleados queviven 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(*) >= 2Q32.- Obtener el número y el nombre de los departamentos que tienen dos o más empleados queviven 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) >= 2Q33.- Obtener el número y el nombre de los departamentos que no tienen ningún empleado queviva en Madrid.select d.num_dpt, d.nombre_dptfrom Departamento dwhere not exists (select * from Empleado e where e.num_dpt = d.num_dptAND e.ciudad_empl = MADRID) Pàg 5 de 6
  6. 6. Práctica SELECTS MySQLDaniel SantiagoQ34.- Obtener el número y el nombre de los departamentos tales que todos sus empleados vivanen 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 e1where 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 quetrabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy in (select distinct num_proy from Empleado e, Departamentod 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 quetrabajen en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy IN (select e.num_proy from Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND d.ciudad = BARCELONA group bye.num_proy having COUNT(*) >= 5)Q37.- Incrementar en 50.000 el presupuesto de los proyectos que no tienen ningún empleado quetrabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy NOT IN (select e.num_proy from Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND d.ciudad = BARCELONA group bye.num_proy)Q38.- Incrementar en 50.000 el presupuesto de los proyectos tales que todos sus empleadostrabajen en Barcelona. No se quiere incrementar el presupuesto de aquellos proyectos que notienen 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_dptAND d.ciudad <> BARCELONA) AND num_proy IN (select distinct e1.num_proyfrom Empleado e1)Q39.- Borrar los empleados que están asignados a los departamentos situados en el edificio PauClaris 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
  7. 7. Práctica SELECTS MySQLDaniel SantiagoQ34.- Obtener el número y el nombre de los departamentos tales que todos sus empleados vivanen 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 e1where 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 quetrabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy in (select distinct num_proy from Empleado e, Departamentod 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 quetrabajen en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy IN (select e.num_proy from Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND d.ciudad = BARCELONA group bye.num_proy having COUNT(*) >= 5)Q37.- Incrementar en 50.000 el presupuesto de los proyectos que no tienen ningún empleado quetrabaje en Barcelona.update Proyecto set presupuesto = presupuesto + 50000where num_proy NOT IN (select e.num_proy from Empleado e, Departamento dwhere e.num_dpt = d.num_dpt AND d.ciudad = BARCELONA group bye.num_proy)Q38.- Incrementar en 50.000 el presupuesto de los proyectos tales que todos sus empleadostrabajen en Barcelona. No se quiere incrementar el presupuesto de aquellos proyectos que notienen 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_dptAND d.ciudad <> BARCELONA) AND num_proy IN (select distinct e1.num_proyfrom Empleado e1)Q39.- Borrar los empleados que están asignados a los departamentos situados en el edificio PauClaris 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

×