SELECT * FROM HR.EMPLOYEES;
SELECT * FROM HR.JOBS;
--SELECT * FROM HR.DEPARTMENTS;
--SELECT * FROM HR.LOCATIONS;
--SELECT * FROM HR.COUNTRIES;
--SELECT * FROM HR.REGIONS;

--Ejercicio 1. Obten todos los nombres,  apellidos y salarios de los clientes que tengan un salario superior o igual a 5.000  y además su job_id sea 'IT_PROG'

SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES --No quiero todos los atributos, quiero nombre apellidos y salario.
WHERE SALARY >= 5000
AND JOB_ID = 'IT_PROG'; --IMPORTANTE: El uso de comillas simples.

--Ejercicio 2. Obten todos los nombres,  apellidos y salarios y fecha de contratación de los clientes que tengan un salario inferior a 10.000  
-- y además su job_id sea o bien  "IT_PROG" o "PU_CLERK", y además su nombre empieza por A.
SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM HR.EMPLOYEES
WHERE SALARY <10000
AND 
(JOB_ID = 'IT_PROG' 
OR JOB_ID = 'PU_CLERK') --IMPORTANTE. Uso de parténtesis para aclarar consultas Y / O.
AND FIRST_NAME LIKE 'A%'; --IMPORTANTE: Uso de like y '%' para obtener registros que [Empiecen por, Terminen en, Contenga]

--Ejercicio 3. Obten todos los nombres,  apellidos y salarios y fecha de contratación de los clientes que tengan un salario entre a 5.000 y 7500  
-- y además su nombre empiece por A o termine por O, y por último que su fecha de contratación sea superior a 01/12/2010
SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM HR.EMPLOYEES
WHERE 
--(SALARY > 5000 AND SALARY < 7500)
SALARY BETWEEN 5000 AND 7500
AND  (FIRST_NAME LIKE 'A%' OR FIRST_NAME LIKE '%O')
AND HIRE_DATE > TO_DATE('1/12/2010','DD/MM/YYYY');

--Ejercicios 4. Obten el nombre, apellidos de los empleados y nombre del trabajo que desempeñan (JOIN con JOB_ID) 
--se filtrata por los que el nombre del trabajo sea Programmer

SELECT FIRST_NAME, LAST_NAME, JOBS.JOB_TITLE FROM HR.EMPLOYEES, HR.JOBS --FROM Se especifica de donde procede la información de la consulta.
WHERE JOB_TITLE = 'Programmer'
AND EMPLOYEES.JOB_ID = JOBS.JOB_ID; -- En el where se indica como se relacionan las tablas

--Ejercicios 5. Obten el nombre, apellidos de los empleados, sueldo y donde el salario mínimo del trabajo es superior a 4000 
SELECT FIRST_NAME, LAST_NAME, SALARY FROM HR.EMPLOYEES, HR.JOBS
WHERE EMPLOYEES.JOB_ID = JOBS.JOB_ID
AND JOBS.MIN_SALARY > 4000;

--Ejercico 6. Indica la cantidad de personas que tiene cada tipo de trabajo (job_id)
SELECT JOB_ID, COUNT(EMPLOYEE_ID) FROM HR.EMPLOYEES
GROUP BY JOB_ID;

--Ejercico 7. Indica la cantidad de personas que tiene cada descripción de trabajo (job_title)
SELECT JOB_TITLE, COUNT(EMPLOYEE_ID)  FROM HR.EMPLOYEES, HR.JOBS
WHERE EMPLOYEES.JOB_ID = JOBS.JOB_ID
GROUP BY JOB_TITLE;
-- CUIDADO: ¿GROUP BY es la última instancia? Si siempre que, no haya ORDER BY ni HAVING.

--Ejercico 8. Indica la cantidad de personas que tiene cada descripción de trabajo (job_title), y solo muestres aquellas que su salario 
--es superior a 3000, y se su agrupación sea superior a 3 empleados, ordene el resultado por la cantidad de empleados descendentemente.
SELECT JOB_TITLE, COUNT(EMPLOYEE_ID) "CANTIDAD EMPLEADOS"  FROM HR.EMPLOYEES, HR.JOBS
WHERE EMPLOYEES.JOB_ID = JOBS.JOB_ID
AND SALARY > 4000
GROUP BY JOB_TITLE
--HAVING "CANTIDAD EMPLEADOS">3
HAVING COUNT(EMPLOYEE_ID)>3
ORDER BY COUNT(EMPLOYEE_ID) DESC;

--Ejercicio 9. Muestra todos los jefes de departamento. (HR.DEPARTMENTS.MANAGER_ID), incluyendo el nombre del departamento.

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_NAME  FROM HR.EMPLOYEES, HR.DEPARTMENTS
WHERE EMPLOYEE_ID IN (SELECT MANAGER_ID FROM HR.DEPARTMENTS)
AND EMPLOYEES.DEPartment_id = DEPARTMENTS.DEPARTMENT_ID;