Ejercicios de autoevaluacion
Ejercicios de autoevaluacion Dataprix 25 September, 2009 - 10:05Con la actividad anterior hemos practicado sentencias de definición y control del SQL. Mediante las sentencias de manipulación hemos insertado filas y, si nos hubiésemos equivocado, también habríamos borrado y modificado alguna fila. Con los ejercicios de autoevaluación practicaremos la parte de sentencias de manipulación que no hemos tratado todavía: las consultas. Los ejercicios que proponemos se harán sobre la base de datos relacional BDUOC que ha ido apareciendo a lo largo de esta unidad.
1. Obtened los códigos y los nombres y apellidos de los empleados, ordenados alfabéticamente de forma descendente por apellido y, en caso de repeticiones, por nombre.
2. Consultad el código y el nombre de los proyectos de los clientes que son de Barcelona.
3. Obtened los nombres y las ciudades de los departamentos que trabajan en los proyectos número 3 y número 4.
4. De todos los empleados que perciben un sueldo de entre 50.000 y 80.000 euros, buscad los códigos de empleado y los nombres de los proyectos que tienen asignados.
5. Buscad el nombre, la ciudad y el teléfono de los departamentos donde trabajan los empleados del proyecto GESCOM.
6. Obtened los códigos y los nombres y apellidos de los empleados que trabajan en los proyectos de precio más alto.
7. Averiguad cuál es el sueldo más alto de cada departamento. Concretamente, es necesario dar el nombre y la ciudad del departamento y el sueldo más elevado.
8. Obtened los códigos y los nombres de los clientes que tienen más de un proyecto contratado.
9. Averiguad los códigos y los nombres de los proyectos cuyos empleados asignados tienen un sueldo superior a 30.000 euros.
10. Buscad los nombres y las ciudades de los departamentos que no tienen ningún empleado asignado.
Solucionario
Solucionario Dataprix 25 September, 2009 - 10:131. SELECT apellido_empl, nombre_empl, codigo_empl FROM empleados ORDER BY apellido_empl DESC, nombre_empl DESC;
2.
Con el SQL92 introductorio, la solución sería: SELECT p.codigo_proyec, p.nombre_proyec FROM proyectos p, clientes c WHERE c.ciudad = ‘Barcelona’ and c.codigo_cli = p.codigo_cliente;
Con el SQL92 intermedio o con el completo, la solución sería: SELECT p.codigo_proyec, p.nombre_proyec FROM proyectos p JOIN clientes c ON c.codigo_cli = p.codigo_cliente WHERE c.ciudad = ‘Barcelona’;
3. SELECT DISTINCT e.nombre_dep, e.ciudad_dep FROM empleados e WHERE e.num_proyec IN (3,4);
4.
Con el SQL92 introductorio, la solución sería: SELECT e.codigo_empl, p.nombre_proyec FROM empleados e, proyectos p WHERE e.sueldo BETWEEN 5.0E+4 AND 8.0E+4 and e. num_proyec = p.codigo_proyec;
Con el SQL92 intermedio o con el completo, la solución sería: SELECT e.codigo_empl, p.nombre_proyec FROM empleados e JOIN proyectos p ON e.num_proyec = p.codigo_proyec WHERE e.sueldo BETWEEN 5.0E+4 AND 8.0E+4;
5.
Con el SQL92 introductorio, la solución sería: SELECT DISTINCT d.* FROM departamentos d, empleados e, proyectos p WHERE p. nombre_proyec = ‘GESCOM’ and d.nombre_dep = e.nombre_dep AND d.ciudad_dep = e.ciudad_dep and e. num_proyec = p.codigo_proyec;
Con el SQL92 intermedio o con el completo, la solución sería: SELECT DISTINCT d.nombre_dep, d.ciudad_dep, d.telefono FROM (departamentos dNATURAL JOIN empleados e) JOIN proyectos p ON e.num_proyec = p.codigo_proyec WHERE p.nombre_proyec = ‘GESCOM’;
6.
Con el SQL92 introductorio, la solución sería: SELECT e.codigo_empl, e.nombre_empl, e.apellido_empl FROM proyectos p, empleados e WHERE e.num_proyec = p.codigo_proyec and p.precio = (SELECT MAX(p1. precio) FROM proyectos p1);
Con el SQL92 intermedio o con el completo, la solución sería: SELECT e.codigo_empl, e.nombre_empl, e.apellido_empl FROM empleados e JOIN proyectos p ON e.num_proyec = p.codigo_proyec WHERE p.precio = (SELECT MAX(p1.precio) FROM proyectos p1);
7. SELECT nombre_dep, ciudad_dep, MAX(sueldo) AS sueldo_maximo FROM empleados GROUP BY nombre_dep, ciudad_dep;
8.
Con el SQL92 introductorio, la solución sería: SELECT c.codigo_cli, c.nombre_cli FROM proyectos p, clientes c WHERE c.codigo_cli = p.codigo_cliente GROUP BY c.codigo_cli, c.nombre_cli HAVING COUNT(*) > 1;
Con el SQL92 intermedio o con el completo, la solución sería: SELECT c.codigo_cli, c.nombre_cli FROM proyectos p JOIN clientes c ON c.codigo_cliente = p.codigo_cliente GROUP BY c.codigo_cli, c.nombre cli HAVING COUNT(*) > 1;
9.
Con el SQL92 introductorio, la solución sería: SELECT p.codigo_proyec, p.nombre_proyec FROM proyectos p, empleados e WHERE e.num_proyec = p.codigo_proyec GROUP BY p.codigo_proyec, p.nombre_proyec HAVING MIN(e.sueldo) > 3.0E+4;
Con el SQL92 intermedio o con el completo, la solución sería:SELECT p.codigo_proyec, p.nombre_proyec FROM empleados e JOIN proyectos p ON e.num_proyec = p.codigo_proyec GROUP BY p.codigo_proyec, p.nombre_proyec HAVING MIN(e.sueldo)>3.0E+4;
10.
SELECT d.nombre_dep, d.ciudad_dep FROM departamentos d WHERE NOT EXISTS (SELECT * FROM empleados e WHERE e.nombre_dep = d.nombre_dep AND e.ciudad_dep = d.ciudad_dep);
o bien: SELECT nombre_dep, ciudad_dep FROM departamentos EXCEPT SELECT nombre_dep, ciudad_dep FROM empleados;