-- 1 → SELECT (Filtro de columnas.)

-- 1.1 Muestra toda la información de los empleados.
 SELECT * FROM EMPLOYEES; 

-- 1.2 Muestra el id, nombre y apellido de todos los empleados.
SELECT employee_id, first_name, last_name FROM EMPLOYEES; 
 -- Advertencia: FROM sirve para hacer referencia a la tabla que vamos a consultar.

 -- Diferencación entre tablas columnas y filas. Ejemplo de Colegio.
 -- Tabla: Colegio | Columnas "de los edificios del colegio" | Filas "de los alumnos".
 -- SELECT: Es como la linterna que alumbra las diferentes columan "del colegio".

 -- 1.3 Muestra el id, nombre y apellido mostrando las columnas con su seudónimo en Español.
SELECT employee_id as "id", first_name as "nombre", last_name as "apellido" FROM EMPLOYEES;

-- 1.4 Muestra el id, email y fecha de contratación con su seudónimo en Español de todos los empleados
-- SELECT employee_id AS ID, email AS CORREO, hire_date AS FECHA CONTRATO FROM EMPLOYEES ❌
-- Importante: Debe ir siempre entre comillas dobles los alias.
SELECT employee_id AS "ID", email AS "CORREO", hire_date AS "FECHA CONTRATO" FROM EMPLOYEES;

-- 1.5 Muestra el id de los departamentos.
SELECT department_id from departments;

------

-- 2 → WHERE (Filtro de filas)

-- 2.1 Obtén todos los empleados que tengan por nombre "David"
SELECT * FROM employees WHERE first_name="David"; 

-- 2.2 Obtén los empleados que tengan un salario superior a 5000
SELECT * FROM employees WHERE salary > 5000;

-- 2.3 Obtén los empleados que tengan un salario igual o inferior a 3000
SELECT * FROM employees WHERE salary <= 3000;

-- 2.4 Obtén el id de empleado, nombre, apellido y fecha de contratación de aquellos empleados que tengan un id mayor que 180.
SELECT employee_id, first_name, last_name, hire_date FROM employees WHERE employee_id > 180;

--- 2.5 CONDICIONES ANIDADAS.

-- 2.5.1 Obtén los empleados que tengan un salario superior a 5.000 Y ADEMÁS su JOB_ID sea igual a IT_PROG.
SELECT * FROM employees WHERE salary > 5000 AND job_id  = "IT_PROG";
-- Utlizamos AND para añdir una condición Y

-- 2.5.2 Obtén los empleados que tengan un salario superior a 5.000 o BIEN su JOB_ID sea igual a IT_PROG.
SELECT * FROM employees WHERE salary > 5000 OR job_id  = "IT_PROG";
-- Utlizamos OR para añdir una condición O

--- 2.6 Muestra todos los empleados que su id sea diferente de 101.
SELECT * from employees WHERE employee_id <> 101;
-- Para poner que un valor un es igual a utilizamos <>.

-- 2.6.1 Muestra todos los empleados que ganen un salario diferente de 9000 y de 8000
select * from employees where salary <> 8000 and salary <> 9000;

--- Más tipos de condiciones WHERE

-- 2.7 Muestra el id, nombre, apellido y salario de los empleados que tengan el id 108, 110, 112, 113.
SELECT employee_id, first_name, last_name, salary FROM employees WHERE EMPLOYEE_ID = 108 AND 110 AND  112 AND 113; # ❌

SELECT employee_id, first_name, last_name, salary FROM employees WHERE EMPLOYEE_ID = 108 OR employee_id = 110 OR employee_id = 112 OR  employee_id = 113;
-- Error Común. Cada vez que se añada una condición después de un AND o OR, tienes que indicar la columna el relacionador (=,>,<..) y el valor en cuestión.
-- Error Común. Diferencia entre Y, O, a nivel conceptual y práctico.

-- Formá más sencilla.
-- Cláusula IN dentro de WHERE.
SELECT employee_id, first_name, last_name, salary FROM employees WHERE EMPLOYEE_ID IN (108,110,112,113);

-- 2.8 Muestra el id, nombre y id de departamento, de todos los empleados que tengan un salario de 6000, 4800, 6900, 3100. 
SELECT EMPLOYEE_ID, FIRST_NAME, DEPARTMENT_ID FROM EMPLOYEES WHERE SALARY IN (6000, 4800, 6900, 3100);

-- 2.9 Muestra el salario y departamento de los empleados que tenga como id de departamento 90,100,50,60.
SELECT SALARY, DEPARTMENT_ID FROM EMPLOYEES WHERE DEPARTMENT_ID IN (90, 100, 50, 60);

-- 2.10 Muestra el id, nombre, apellido, salario y job_id de aquellso empleados que su jefe (manager_id) sea alguno de los siguientes 103,108,114,100 y 102, y además su job_id sea IT_PROG y su nombre sea Alexander.
SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, SALARY, JOB_ID FROM EMPLOYEES WHERE MANAGER_ID IN (103, 108, 100, 102, 114) AND JOB_ID = "IT_PROG" AND first_NAME = "Alexander";

-- 2.11 Muestra los empleados que su jefe no sea ninguno de los siguientes 103, 101, 108, 100, 114.
-- En lugar de utilizar IN, utilizamos NOT IN.
SELECT * FROM employees WHERE MANAGER_ID NOT IN (103, 101, 108, 100, 114);

-- 2.12 Muestra los empleados que tengan un salario entre 7000 y 9000.
SELECT * FROM EMPLOYEES WHERE SALARY >= 7000 AND SALARY <= 9000;

-- Forma más sencilla BETWEEN.
SELECT * FROM EMPLOYEES WHERE SALARY BETWEEN 7000 AND 9000;

-- 2.13 Hay un empleado que es el JEFE SUPREMO, ¿Cómo sabemos cual es?, es sencillo, solo tenemos que ver filtrar por el único usuario que no tiene jefe (manager_id)
-- IS NULL
SELECT * FROM employees WHERE manager_id is null;

-- 2.14 Ahora queremos mostrar todos los empleados excepctuando el jefe.
-- IS NOT NULL.
SELECT * FROM employees WHERE manager_id is NOT null;

-- LIKE
-- → %
-- 2.15 Muestra los empleados que su nombre comience por A.
 SELECT * FROM employees WHERE first_name LIKE "A%";
-- "%" Cualquier cosa.

-- 2.16 Muestra los empleados que su apellido termina por a.
SELECT * FROM employees WHERE last_name LIKE "%a";

-- 2.17 Muestra todos los empleados que su nombre contenga una w.
SELECT * FROM employees WHERE first_name LIKE "%w%";

-- 2.18 Muestra los empleados que su nombre comienza por L le siga la E y y tenga 3 carácteres.
-- → _
SELECT * FROM employees WHERE first_name LIKE "LE_";

-- 2.19 Muestra aquellos empleados que tengan 5 carácteres en su nombre.
SELECT * FROM EMPLOYEES WHERE FIRST_NAME LIKE "_____";

-- 2.20 Muestra aquellos empleados que tengan 5 carácteres en su nombre y 5 en su apellido.
SELECT * FROM EMPLOYEES WHERE FIRST_NAME LIKE "_____" AND LAST_NAME LIKE "_____";



