Ejercicios SQL Bases de Datos

EJERCICIOS SQL BASES DE DATOS ACTIVIDADES COMPLEMENTARIAS TEMA 3 Tablas EMPLE y DEPART 1) Selecciona el apellido, oficio

Views 254 Downloads 11 File size 21KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

EJERCICIOS SQL BASES DE DATOS ACTIVIDADES COMPLEMENTARIAS TEMA 3 Tablas EMPLE y DEPART 1) Selecciona el apellido, oficio y localidad de los empleados cuyo oficio sea “analista” SELECT APELLIDO, OFICIO, LOC FROM EMPLE, DEPART WHERE OFICIO='ANALISTA'; 2) Obtén los datos de los empleados cuyo director sea “Cerezo” SELECT * FROM EMPLE WHERE DIR= (SELECT EMP_NO FROM EMPLE WHERE OFICIO='DIRECTOR' AND APELLIDO= 'CEREZO'); 3) Obtén los datos de los empleados del departamento “Ventas” SELECT * FROM EMPLE WHERE DEPT_NO=(SELECT DEPT_NO FROM DEPART WHERE NOMBRE='VENTAS'); 4) Obtén los datos de los departamentos que no tengan empleados SELECT * FROM DEPART WHERE DEPT_NO NOT IN (SELECT DISTINCT DEPT_NO FROM EMPLE); 5) Obtén los datos de los departamentos que tengan empleados SELECT * FROM DEPART WHERE EXISTS (SELECT * FROM EMPLE, DEPART WHERE EMPLE.DEPT_NO=DEPART.DEPT_NO); 6) Obtén el apellido y el salario de los empleados que superen el salario de del departamento 20 SELECT APELLIDO, SALARIO FROM EMPLE WHERE SALARIO> (SELECT MAX (SALARIO) FROM EMPLE WHERE DEPT_NO=20) Tabla LIBRERIA 7) Visualiza el tema, estante y ejemplares de las filas de LIBRERIA con ejemplares comprendidos entre 8 y 15. SELECT * FROM LIBRERIA WHERE EJEMPLARES BETWEEN 8 AND 15 8) Visualiza las columnas tema, estante y ejemplares de las filas cuyo estante no este comprendido entre la B y la D. SELECT TEMA, ESTANTE, EJEMPLARES FROM LIBRERIA WHERE ESTANTE NOT BETWEEN 'B' AND 'D'; 9) Visualiza todos los temas de LIBRERIA cuyo número de ejemplares sea inferior a los que hay en medicina. SELECT TEMA FROM LIBRERÍA WHERE EJEMPLARES < (SELECT EJEMPLARES FROM LIBRERIA WHERE TEMA ='MEDICINA'); 10) Visualiza los temas de LIBRERIA cuyo número de ejemplares no este entre 15 y 20, ambos incluidos. SELECT TEMA FROM LIBRERIA WHERE EJEMPLARES NOT BETWEEN 15 AND 20 Tablas ALUMNOS, ASIGNATURAS y NOTAS 11) Visualiza todas las asignaturas que contengan tres letras 'o' en su interior y tengan alumnos matriculados en Madrid. SELECT * FROM ASIGNATURAS WHERE NOMBRE LIKE '%O%' AND COD IN (SELECT COD FROM NOTAS WHERE DNI IN (SELECT DNI FROM ALUMNOS WHERE POBLA='Madrid')); 12) Visualiza los nombres de los alumnos de Madrid que tengan alguna asignatura suspensa. SELECT APENOM FROM ALUMNOS WHERE POBLA='Madrid' AND DNI IN (SELECT DNI FROM NOTAS WHERE NOTA15; select APELLIDO from EMPLE where (to_char (current_date,'YYYY') - to_char (fecha_alt,'YYYY') )> 15; select APELLIDO FROM EMPLE WHERE months_between(sysdate,emple.fecha_alt)>(15*12); 15. Selecciona el apellido de los empleados de la tabla EMPLE que lleven más de 16 años trabajando en el departamento 'VENTAS'. select APELLIDO,(to_char(current_date,'YYYY') - to_char(fecha_alt,'YYYY')) FROM EMPLE WHERE(to_char(current_date,'YYYY') - to_char(fecha_alt,'YYYY'))>16 AND EMPLE.DEPT_NO=(SELECT DEPT_NO FROM DEPART WHERE DNOMBRE='VENTAS'); select APELLIDO FROM EMPLE, depart WHERE months_between(sysdate,emple.fecha_alt)>(16*12) and emple.dept_no=depart.dept_no and dnombre='VENTAS' 16. Visualiza el apellido, el salario y el número de departamento de aquellos empleados de la tabla EMPLE cuyo salario sea el mayor de su departamento. SELECT apellido, salario, dept_no as numero_departamento from emple e where salario=(select max(salario) from emple where emple.dept_no=e.dept_no) order by dept_no; 17. Visualiza el apellido, el salario y el número de departamento de aquellos empledados de la tabla EMPLE cuyo salario supere a la media en su departamento. SELECT apellido, salario, dept_no as numero_departamento from emple e where salario>(select avg(salario) from emple where emple.dept_no=e.dept_no) order by dept_no;

ACTIVIDADES COMPLEMENTARIAS TEMA 5 Tablas EMPLE y DEPART 1) Partiendo de la tabla EMPLE, visualizar por cada oficio de los empleados del departamento 'VENTAS' la suma de salarios. select sum(salario), oficio from emple where dept_no in (select dept_no from depart where dnombre like 'VENTAS') group by oficio; 2) seleccionar aquellos pedidos de la tabla EMPLE cuyo salario sea igual a la media de su salario en su departamento. select apellido, salario from emple where (salario,dept_no) in (select avg(salario),dept_no from emple group by dept_no); 3) A partir de la tabla emple, visualizar el numero de empleados de cada departamento cuyo oficio sea 'EMPLEADO' select dept_no,count(*) from emple where oficio like 'EMPLEADO' group by dept_no; 4) Desde la tabla EMPLE, visualizar el departamento que tenga más empleados cuyo oficio sea 'EMPLEADO' select dept_no, count(*) from emple where oficio like 'EMPLEADO' group by dept_no having count(*)=(select max(count(*)) from emple where oficio like 'EMPLEADO'group by dept_no); 5) A partir de las tablas EMPLE y DEPART, visualizar el número de departamento y el nombre de departamento que tenga más empleados cuyo oficio sea 'EMPLEADO' select dept_no,dnombre from depart where dept_no=(select dept_no from emple where oficio= 'EMPLEADO' group by dept_no having count(*)=(select max(count(*)) from emple where oficio='EMPLEADO' group by dept_no)); 6) Buscar los departamentos que tienen más de dos personas trabajando en la misma profesión select dept_no,count(*) from emple group by dept_no,oficio having count(*)>2;

Tablas ALUMNOS, ANTIGUOS y NUEVOS 7) Visualizar los nombres de los alumnos de la tabla ALUM que aparezcan en alguna de estas tablas: NUEVOS y ANTIGUOS. select nombre from alum intersect (select nombre from nuevos union select nombre from antiguos); 8) Escribir las distintas formas en que se puede poner la consulta anterior llegando al mismo resultado select nombre from alum where nombre in(select nombre from nuevo) union select nombre from antiguo); select nombre from alum where nombre in (select nombre from nuevo) or nombre in (select nombre from antiguo); 9) Visualizar aquellos nombres de la tabla ALUM que no esten en la tabla ANTIGUOS ni en la tabla NUEVOS select nombre from alum minus select nombre from antiguos minus select nombre from nuevos;

Tablas PERSONAL, PROFESORES Y CENTROS 10) Realizar una consulta en la que aparezca por cada centro y en cada especialidad el numero de profesores. Si el centro no tiene profesores debe aparecer un 0 en la columna de profesores. select nombre,especialidad,count(*) from centros,profesores group by cod_centro,especialidad; select nombre,especialidad,count(dni) from centros,profesores group by cod_centro having (centros.cod_centro = profesores.cod_centro); 12) Obtener la especialidad con menos empleados select especialidad from profesores where apellidos = (select min(apellidos) from profesores);

ACTIVIDADES COMPLEMENTARIAS TEMA 6 Tablas PERSONAL, PROFESORES y CENTROS 1) Modifica el numero de plazas con un valor igual a la mitad en aquellos centros con menos de dos profesores update centros set num_plazas = num_plazas/2 where cod_centro in (select cod_centro from profesores group by cod_centro having count(*) (select comision from emple where apellido like 'SÁNCHEZ'); 9) Mostrar el nombre salario y nº de departamento de aquellos empleados que ganan el salario maximo de su departamento select apellido,salario, dept_no from emple where salario in (select max(salario) from emple group by dept_no); 10) Mostrar el nombre del departamento que tanga mas empleados cuyo oficio sea presidente select dnombre from depart group by dnombre having count(*) = (select max(count(*)) from emple where oficio like 'PRESIDENTE' group by dept_no); 11) Mostrar el numero de directores de la tabla emple que sean dep departamento producción select count(oficio) from emple where oficio = 'DIRECTOR' and dept_no = (select dept_no from depart where dnombre = 'PRODUCCIÓN');