# data[].attributes.headline
1. Indica el orden de creación de las tablas y explica por qué.

# data[].attributes.subject
1. Indica el orden de creación de las tablas y explica por qué.

# data[].attributes.body
El orden de creación de tablas es cuando hay dependencias entre ellas, como claves foráneas. La tabla referenciada debe crearse antes de la tabla que contiene la clave foránea. Este orden asegura la integridad referencial y evita conflictos

# data[].attributes.body
Primero que las comas indica si es a nivel tabla o columna, ahora se tendría que ver así la creación de la tabla:

CREATE TABLE employees (

EMPLOYEE_ID NUMBER(6) PRIMARY KEY,

FIRST_NAME VARCHAR2(20),

LAST_NAME VARCHAR2(25) NOT NULL,

EMAIL VARCHAR2(25) NOT NULL,

PHONE_NUMBER VARCHAR2(20),

HIRE_DATE DATE DEFAULT SYSDATE NOT NULL,

JOB_ID VARCHAR2(10),

SALARY NUMBER(8,2),

COMMISSION_PCT NUMBER(2,2),

MANAGER_ID NUMBER(6) REFERENCES employees(EMPLOYEE_ID),

DEPARTMENT_ID NUMBER(4),

CONSTRAINT LAST_NAME_NN CHECK (LAST_NAME IS NOT NULL),

CONSTRAINT EMAIL_NN CHECK (EMAIL IS NOT NULL),

CONSTRAINT HIRE_DATE_NN CHECK (HIRE_DATE IS NOT NULL),

CONSTRAINT FK_JOB_ID FOREIGN KEY (JOB_ID) REFERENCES job(JOB_ID)

);

# data[].attributes.body
INSERT INTO employeer(employee_id, first_name. last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)

VALUES (123123, 'Alex', 'Jimenez', 'a.jimenez@gmail.com', '634634634', sysdate, '2323232323', 123,123.00, 12.32, 2342);

# data[].attributes.body
No esta hecha, pero seria esta la solución:

UPDATE employees

SET first_name = 'Andres'

WHERE employee_id = 157;

# data[].attributes.headline
5. Crea la copia de la tabla de empleados y que tenga en esa copia un tipo de trabajo que empiece por AD

# data[].attributes.subject
5. Crea la copia de la tabla de empleados y que tenga en esa copia un tipo de trabajo que empiece por AD

# data[].attributes.body
La solución seria:

CREATE TABLE copy_emp_ad AS

SELECT *

FROM employees

WHERE job_id LIKE 'AD%';

# data[].attributes.headline
6. Añade la columna miembros a la tabla de departamentos

# data[].attributes.subject
6. Añade la columna miembros a la tabla de departamentos

# data[].attributes.body
La solución seria:

ALTER TABLE departments

ADD miembros INT;

# data[].attributes.headline
7. Elimina la restricciónes de NN al email de la tabla employees

# data[].attributes.subject
7. Elimina la restricciónes de NN al email de la tabla employees

# data[].attributes.body
La solución seria:

ALTER TABLE employees

ALTER COLUMN email DROP NOT NULL;

# data[].attributes.headline
8. Añade la restricción de unicidad en el campo department_name

# data[].attributes.subject
8. Añade la restricción de unicidad en el campo department_name

# data[].attributes.body
La solución seria:

ALTER TABLE departments

ADD CONSTRAINT unique_department_name UNIQUE (department_name);

# data[].attributes.headline
9. Elimina a los empleados del departamento 20 y del departamento 50

# data[].attributes.subject
9. Elimina a los empleados del departamento 20 y del departamento 50

# data[].attributes.body
La solución seria:

DELETE FROM employees

WHERE department_id IN (20, 50);

# data[].attributes.headline
13. Muestra los empleados que contengan en su nombre, la letra que introduzca el usuario por pantalla 

# data[].attributes.subject
13. Muestra los empleados que contengan en su nombre, la letra que introduzca el usuario por pantalla 

# data[].attributes.body
La solución seria:

SELECT *

FROM employees

WHERE first_name LIKE '%' || '&letra' || '%';

# data[].attributes.headline
14. Mostrar los diferentes tipos de trabajos en la tabla employees

# data[].attributes.subject
14. Mostrar los diferentes tipos de trabajos en la tabla employees

# data[].attributes.body
DESCRIBE employees;

SELECT DISTINCT job_title

FROM employees;

# data[].attributes.headline
15. Muestra el salario anual de los empleados. Se mostrará la divisa local, ya que esta consulta se va a realizar en diferentes países.

# data[].attributes.subject
15. Muestra el salario anual de los empleados. Se mostrará la divisa local, ya que esta consulta se va a realizar en diferentes países.

# data[].attributes.body
No he podido hacerla con el cambio de divisas

La solución parcial seria:

SELECT

employee_id,

first_name,

last_name,

salary * 12 AS annual_salary

FROM

employees;

# data[].attributes.headline
16. Muestra los empleados del departamento 50 que han sido contratados un martes y que tengan un salario inferior a 8000. Ordénalo por el salario.

# data[].attributes.subject
16. Muestra los empleados del departamento 50 que han sido contratados un martes y que tengan un salario inferior a 8000. Ordénalo por el salario.

# data[].attributes.body
La solución seria:

SELECT *

FROM employees

WHERE department_id = 50

AND TO_CHAR(hire_date, 'DAY') = 'TUESDAY'

AND salary < 8000

ORDER BY salary;

# data[].attributes.headline
17.  Calcula el salario mensual y el anual, teniendo en cuenta la comisión. Ordena por departamento y después por salario.

# data[].attributes.subject
17.  Calcula el salario mensual y el anual, teniendo en cuenta la comisión. Ordena por departamento y después por salario.

# data[].attributes.body
La solución seria:

SELECT

employee_id,

first_name,

last_name,

salary + NVL(commission_pct * salary, 0) AS monthly_salary,

(salary + NVL(commission_pct salary, 0)) 12 AS annual_salary,

department_id

FROM

employees

ORDER BY

department_id, monthly_salary;

# data[].attributes.headline
18. Calcula los meses que llevan contratados los trabajadores cuyo job_id contenga la letra m en cualquier posición. Redondea los meses

# data[].attributes.subject
18. Calcula los meses que llevan contratados los trabajadores cuyo job_id contenga la letra m en cualquier posición. Redondea los meses

# data[].attributes.body
La solución seria:

SELECT

employee_id,

first_name,

last_name,

ROUND(MONTHS_BETWEEN(SYSDATE, hire_date)) AS meses_contratado

FROM

employees

WHERE

UPPER(job_id) LIKE '%M%';

# data[].attributes.headline
19. Muestra  los empleados y su login de usuario, que estará formado por la primera letra de su nombre y las cuatro primeras letras de apellido. Ordénalo por nombre de usuarios

# data[].attributes.subject
19. Muestra  los empleados y su login de usuario, que estará formado por la primera letra de su nombre y las cuatro primeras letras de apellido. Ordénalo por nombre de usuarios

# data[].attributes.headline
20. Muestra la fecha de renovación del contrato de los empleados con id. La fecha sera 6 meses después de contratación. También se calculará una fecha de aviso 15 días antes de la fecha de renovación

# data[].attributes.subject
20. Muestra la fecha de renovación del contrato de los empleados con id. La fecha sera 6 meses después de contratación. También se calculará una fecha de aviso 15 días antes de la fecha de renovación

# data[].attributes.body
La solución es:

SELECT

employee_id,

hire_date,

ADD_MONTHS(hire_date, 6) AS fecha_renovacion,

ADD_MONTHS(hire_date, 6) - INTERVAL '15' DAY AS fecha_aviso_renovacion

FROM

employees;

# data[].attributes.headline
21. Muestra los empleados que no tienen departamento.

# data[].attributes.subject
21. Muestra los empleados que no tienen departamento.

# data[].attributes.body
La solución es:

SELECT

e.employee_id,

e.first_name,

e.last_name,

'No tiene departamento' AS departamento

FROM

employees e

LEFT JOIN

departments d ON e.department_id = d.department_id

WHERE

d.department_id IS NULL;

# data[].attributes.headline
22. Muestra los empleados que contienen en su apellido el texto que introduce el usuario por pantalla

# data[].attributes.subject
22. Muestra los empleados que contienen en su apellido el texto que introduce el usuario por pantalla

# data[].attributes.body
La solución es:

ACCEPT texto_apellido CHAR PROMPT 'Introduce el texto del apellido: '

SELECT *

FROM employees

WHERE UPPER(last_name) LIKE '%' || UPPER('&texto_apellido') || '%';

# data[].attributes.headline
23. Muestra los empleados que tienen un salario mayor a 8000 y han sido contratados un día 17 o un 24

# data[].attributes.subject
23. Muestra los empleados que tienen un salario mayor a 8000 y han sido contratados un día 17 o un 24

# data[].attributes.body
La solución seria:

SELECT *

FROM employees

WHERE salary > 8000

AND (EXTRACT(DAY FROM hire_date) = 17 OR EXTRACT(DAY FROM hire_date) = 24);