Está en la página 1de 6

SQL.

Clausulas avanzadas de selección

1. Calcula cuanto ganan en total todos los empleados

Select sum (salary)


From empleados

2. Calcula cuanto ganan en total cada uno de los grupos de empleados clasificados por tipo de
trabajo (Job_id)

Select job_id, sum(salary)


From employees
Group by job_id

3. Calcula el máximo sueldo para cada uno de los grupos de empleados clasificados por tipo de
trabajo (Job_id)

Select job_id, max (salary)


From employees
Group by job_id

4. Calcula el sueldo medio de los empleados de cada departamento y después el sueldo medio de los
empleados por tipo de trabajo.
Select department_id, avg (salary)
From employees
Group by department_id

Select job_id, avg (salary)


From employees
Group by job_id

5. Calcula cuantos empleados hay en cada departamento.

SELECT department_id, count (*)


FROM EMPLOYEES
GROUP BY department_id

6. Calcula cuantos empleados hay de cada tipo de empleo.

SELECT job_id, count (*)


FROM EMPLOYEES
GROUP BY job_id

7. Selecciona cuanto ganan en total todos los empleados que son Stock Manager (job_id=
ST_MAN)

Select job_id, sum(salary)


Where job_id=’ST_MAN’
From employees
groupby job_id
SQL. Clausulas avanzadas de selección

Select job_id, sum(salary)


From employees
groupby job_id
having job_id=’ST_MAN’

Valen cualquiera de las dos opciones.

7. Visualiza el identificador de continente y el nº de paises en la tabla countries que tiene cada


continente (region_id)

select region_id, count(*)


from countries
group by region_id;

8. Visualiza los nombres de los continentes con más de seis paises en la tabla countries

select region_name from regions


where region_id in (select region_id
from countries
group by region_id
having count(*)>6)

9 Visualiza el nº de paises que tienen cada uno de los continentes cuyo identificador de region es 1,
2o3

select region_id, count(*)


from paises
where region_id in (1,2,3)
group by region_id;

10. En la tabla empleados, visualiza para cada uno de los jefes, manager_id, el nº de empleados que
están a su cargo.y la media de los salarios de estos empleados.

Select manager_id, count(*), avg(salary)


From employees
Group by manager_id

11. Modifica la consulta anterior para que aparezca además del código del jefe, su nombre y
apellido.

Select e.manager_id, m.first_name, m.last_name, count(*), avg(e.salary)


From employees e, employees m
Where e.manager_id=m.employee_id
Group by e.manager_id, m.first_name, m.last_name
SQL. Clausulas avanzadas de selección

12 . Lo mismo que en el ejercicio 10, pero en este caso visualiza solo para aquellos jefes que tienen
más de 7 empleados a su cargo y ordenados por nº de empleados.

Select manager_id, count(*), avg(salary)


From employees
Group by manager_id
Having count(*)>=7
order by count(*)

13. Visualiza los departamentos con más de cuatro empleados

Select department_id, count(*)


From employees
Group by department_id
Having count(*)>4

14. Busca el nº máximo número de empleados de algún departamento.

Select max(count(*)) from employees group by department_id;

15. Utiliza la consulta anterior para encontrar el nombre del departamento que más empleados tiene.

select e. department_id, department_name, count(*)


from employees e, departments d
where e.department_id=d.department_id
group by e.department_id, department_name
having count(*)=(Select max(count(*)) from employees group by department_id)

16. Selecciona para cada jefe, cuanto ganan en total sus empleados, pero solo para aquellos casos en
los que la media del salario de sus empleados sea mayor que 3000.

Select manager_id, sum(salary)


From employees
Group by manager_id
having avg(salary)>3000;

17. Selecciona para cada jefe cuantos empleados tiene a su cargo y cuanto ganan en total pero solo
para aquellos jefes con más de 6 empleados a su cargo.

Select manager_id, count(*), sum(salary) from employees


Group by manager_id
having count(*)>6

18. Lo mismo qeu en la consulta anterior pero solo para aquellos jefes cuyo código sea 100, 121 o
122.

Select manager_id, count(*), sum(salary)


SQL. Clausulas avanzadas de selección

From employees
where manager_id in (100, 121, 122)
Group by manager_id
having count(*)>6
order by manager_id

19. Calcular el número de empleados que realizan cada OFICIO en cada DEPARTAMENTO. Los
datos que se visualizan son: departamento, oficio y número de empleados

SELECT dept_no, oficio, COUNT(*) FROM emple


GROUP BY dept_no, oficio;

20. Encuentra el nombre del departamento que paga más dinero al mes entre todos sus empleados y
cuanto es ese dinero

select e. department_id, department_name, sum(e.salary)


from employees e, departments d
where e.department_id=d.department_id
group by e.department_id, department_name
having sum(salary)=(Select max(sum(salary)) from employees group by department_id)

21. Visualizar los departamentos en los que el salario medio es mayor o igual que la media de todos
los salarios
SELECT department_id, AVG(salary) FROM employees
GROUP BY department_id
HAVING AVG(salary) >=(SELECT AVG(salary) FROM employees);

22. Visualizar el número de empleados del departamento ‘VENTAS’

SELECT COUNT(*) FROM employees


WHERE department_id=(select department_id from departments
where department_name='SALES')

23. ¿Cuantos departamentos distintos hay en Seatle?

select location_id, count(*)


from departments
where location_id=(select location_id from locations where city='Seattle')
group by location_id

24. Encuentra cuantos departementos hay en total entre Canada y Estados unidos

select location_id, count(*)


from departments
where location_id in(select location_id from locations where country_id in (select country_id
from countries where country_name in ('Canada', 'United States of America')))
group by location_id

25. Encuantra los nombres de los empleados más antiguos de cada departamento
SQL. Clausulas avanzadas de selección
select first_name, last_name, department_id
from employees
where employee_id in ( select employee_id from employees where ( hire_date,
department_id)in (select min(hire_date),department_id from employees
group by department_id))

26. Disponemos de tres tablas: ALUM contiene los nombres de los alumnos que hay actualmente en
el centro, NUEVOS contiene los nombres de los futuros alumnos y ANTIGUOS contiene los
nombres de antiguos alumnos del centro. La descripción es la misma para los tres. Visualizar los
nombres de los alumnos actuales y de los futuros alumnos
SELECT nombre FROM alum
UNION
SELECT nombre FROM nuevos;

27. Obtener los nombres de alumnos que están actualmente en el centro y que estuvieron en el
centro hace ya un tiempo.

SELECT nombre FROM alum


INTERSECT
SELECT nombre FROM antiguos;

O bien
SELECT nombre FROM alum
WHERE nombre IN (SELECT nombre FROM antiguos);

28. Obtener los nombres y la localidad de alumnos que están actualmente en el centro y que nunca
estuvieron anteriormente en él.

SELECT nombre, localidad FROM alum


MINUS
SELECT nombre, localidad FROM antiguos;
También se puede hacer empleando el operador NOT IN

SELECT nombre, localidad FROM alum


WHERE nombre NOT IN
(SELECT nombre FROM antiguos) ;

29. Seleccionar los nombres de la tabla ALUM que estén en NUEVOS y no estén en ANTIGUOS

SELECT nombre FROM alum


WHERE nombre IN (SELECT nombre FROM nuevos
MINUS
SELECT nombre FROM antiguos);
O bien
SELECT nombre FROM alum
WHERE nombre IN (SELECT nombre FROM nuevos)
AND
nombre NOT IN ( SELECT nombre FROM antiguos);

30. Seleccionar los nombres de la tabla ALUM que estén en NUEVOS o estén en ANTIGUOS.
SELECT nombre FROM alum
SQL. Clausulas avanzadas de selección
WHERE nombre IN (SELECT nombre FROM nuevos
UNION
SELECT nombre FROM antiguos);

31. 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 ANTIGUOS
UNION
SELECT NOMBRE FROM NUEVOS);

32. Visualizar los nombres de los alumnos dela tabla ALUM que aparezcan en estas dos tablas:
ANTIGUOS y NUEVOS

SQL> SELECT NOMBRE FROM ALUM SQL> SELECT NOMBRE FROM ALUM
2 WHERE NOMBRE IN 2 INTERSECT
3 (SELECT NOMBRE FROM NUEVOS 3 (SELECT NOMBRE FROM NUEVOS
4 INTERSECT 4 INTERSECT
5 SELECT NOMBRE FROM ANTIGUOS); 5 SELECT NOMBRE FROM ANTIGUOS);

33. Visualizar aquellos nombres de la tabla ALUM que no están en la tabla ANTIGUOS ni en la
tabla NUEVOS

SQL> SELECT NOMBRE FROM ALUM SQL> SELECT NOMBRE FROM ALUM
2 MINUS 2 WHERE NOMBRE NOT IN
3 (SELECT NOMBRE FROM ANTIGUOS 3 (SELECT NOMBRE FROM ANTIGUOS
4 UNION 4 UNION
5 SELECT NOMBRE FROM NUEVOS); 5 SELECT NOMBRE FROM NUEVOS);