-- 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 "_____";


-- FUNCIONES.
-- -- Concat() → Concatena valores.
-- 3.1 Muestra el id y el nombre completo de todos los empleados (en una sola columna).
SELECT employee_id, concat(first_name," ", last_name) as "Nombre Completo" FROM employees; 

-- 3.2 Concatena un nuevo campo llamado correo electrónico, que tenga nombre apellido, y @alumno.es.
-- Ejemplo de alumno con id 100 Steven_King@alumno.es.
SELECT concat(first_name,"_", last_name, "@alumno.es") as "Correo Electrónico" from employees;

-- -- Substring() → "Trozos" de dato 
--  Substring(columna,letra por donde empieza, número de caracteres que queremos coger)

-- 3.3 Obten 2 carácteres a partir del segundo caracter del nombre. [Alejandro → le]
SELECT first_name, substring(first_name,2,2) FROM EMPLOYEES;

-- 3.4 Muestra la inicial del nombre.
-- Ejemplo Steven King → SKing@alumnosAMG.es
SELECT substring(first_name,1,1) FROM employees; 

-- 3.5 Muestra el año de contratación de todos los empleados (OJO, únicamente el año).
SELECT substring(hire_date, 1,4) FROM employees;

-- -- LENGTH() → Longitud de dato.
-- 3.6 Muestra la longitud de los nombres de los empleados, y el nombre.
SELECT length(first_name), first_name FROM employees;

-- -- LTRIM() → Eliminación de los carácteres en blanco a la izquierda.
-- -- RTRIM() → Eliminación de los carácteres en blanco a la derecha.
-- -- TRIM() → Eliminación de los carácteres en blanco a la izquierda y derecha.

-- 3.7 Muestra los nombres sin espacios en blanco a la izquierda.
SELECT ltrim(first_name) FROM employees;
-- 3.8 Muestra los nombres sin espacios en blanco a la derecha .
SELECT rtrim(first_name) FROM employees;
-- 3.9 Muestra los nombres sin espacios en blanco a la izquierda y derecha.
SELECT trim(first_name) FROM employees;

-- -- REPLACE() → Reemplazar caracteres o cadena de carácteres 
-- REPLACE(columna, caracter a sustituir, caracter sustituido).
-- Ejemplo REPLACE("Papa", "a", "@"); → P@p@

-- 3.10 Muestra los nombres de los empleados, sustituyendo la 'a' por '1'.
SELECT REPLACE(first_name, "a", "1") FROM employees;

-- 3.11 Muestra los nombres de los empleados, sustituyendo la 'a' por '1', incluyendo mayúsculas y minúsculas.
SELECT REPLACE(REPLACE (first_name, "A", "1"), "a", "1")  FROM employees;
-- first_name Alexander. Tras aplicar REPLACE(first_name, "a", "1") tenemos Alex1nder, pues esto último reemplazamos REPLACE(REPLACE(first_name, "a", "1"), "A", "1")
-- Ejemplo de funcionamiento.
-- Alejandro  
-- → Aplicio el primer replace (El que va dentro) Alejandro → 1lejandro
-- → Aplicio el segundo replace (El que va fuera) Al1j1ndro → 1lej1ndro

-- -- UPPER () → Convierte a mayúsculas la columna o palabra especificada
-- 3.12 Muestra el nombre de los empleados en mayúsculas. 
SELECT upper(FIRST_NAME) FROM EMPLOYEES;
-- -- LOWER () → Convierte a minúsculas la columna o palabra especificada
-- 3.13 Muestra el nombre de los empleados en minúsculas.
SELECT LOWER(first_name) FROM employees;

-- 3.5 FUNCIONES ENTRELAZADAS.
-- 3.5.1 Crea un nuevo campo llamado correo electrónico, utilizando la letra inicial del nombre en minúscula, el apellido completo, y la fecha de contratación 
-- los dos últimos dígitos incluendo @alumno.com.

SELECT concat(lower(substring(first_name,1,1)), LAST_NAME, substring(hire_date,9,2), "@alumno.com") as "CORREO ELECTRÓNICO" FROM EMPLOYEES;
SELECT concat(lower(substring(first_name,1,1)), LAST_NAME, substring(hire_date,LENGTH(hire_date)-1,2), "@alumno.com") as "CORREO ELECTRÓNICO" FROM EMPLOYEES; -- Mejor plantemianeto
-- ALEJANDRO -- LENGTH DE ALEJANDRO 9
-- SUBSTRING("ALEJANDRO", LENGTH("ALEJANDRO")-1,2) → "RO"

-- 3.5.2 Muestra el JOB_ID de todos los empleados, remplazando las vocales por '$' y transformándo todo a minúsculas, 
-- también muestra los campos de nombre, apellidos, salario y fecha de contratación.

SELECT LOWER(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(job_id,"A", "$"),"E","$"),"I","$"),"O","$"),"U","$")), first_name, last_name, salary, hire_date FROM employees;

-- 3.5.3 FUNCIONES DE FECHAS
-- 3.1 Fecha y Hora Actual, junto al nombre.
 SELECT first_name, now() FROM employees;

-- 3.2 Fecha Actual, junto al nombre.
 SELECT first_name, curdate() FROM employees;

-- 3.3 Hora Actual, junto al nombre.
 SELECT first_name, curtime() FROM employees;
 
 -- 3.5.3.1 Muestra nombre, apellido, y fecha y hora actual (fecha y hora en la misma columna)
 SELECT first_name, last_name, now() FROM employees;
 
 -- 3.5.3.2 Muestra la diferencia en días entre la fecha de contratación y la fecha de hoy.
 SELECT DATEDIFF("1999-01-01","1998-01-01") from DUAL; -- Ejemplo de funcionamiento.

 -- 3.5.3.3 Muestra la diferencia en días entre la fecha de contratación y la fecha de hoy.
SELECT DATEDIFF(now(),hire_date) FROM employees;
 
 -- 3.5.3.4 Muestra la diferencia en años entre la fecha de contratación y la fecha de hoy.
SELECT DATEDIFF(now(),hire_date) /365 as "Año de Contratación" FROM employees;






























































































































































































