Professional Documents
Culture Documents
Lenguajes 2021
Lenguajes 2021
--OPERADORES relacionales
select e.first_name,e.last_name, e.salary from employees e where salary > 4000;
select e.first_name,e.last_name, e.salary from employees e where salary < 4000;
select e.first_name,e.last_name, e.salary from employees e where salary >= 4000;
select e.first_name,e.last_name, e.salary from employees e where salary <= 4000;
select e.first_name,e.last_name, e.salary from employees e where salary != 4000;
select e.first_name,e.last_name, e.salary from employees e where salary ^= 4000;
select e.first_name,e.last_name, e.salary from employees e where NOT(salary =
4000);
select e.first_name,e.last_name, e.salary from employees e where job_id <>
'SA_REP';
select e.first_name,e.last_name, e.salary from employees e where e.first_name NOT
LIKE 'Alberto';
SELECT * FROM EMPLOYEES WHERE first_name = SOME ('Alberto','David','Daniel');
SELECT * FROM EMPLOYEES WHERE SALARY = SOME (6600,8000);
SELECT * FROM EMPLOYEES WHERE first_name NOT IN ('Alberto','David','Daniel');
SELECT * FROM EMPLOYEES WHERE SALARY NOT IN (6600,8000);
--FECHAS
/* TO_CHAR Convierte una fecha y hora o un valor de intervalo de DATE, TIMESTAMP
a VARCHAR2 en el formato especificado.
Si omite el formato, la fecha se convierte en un valor VARCHAR2 de la siguiente
manera: */
select to_char(sysdate,'DD-mon-yy') from dual;
select to_char(sysdate,'Dd-mm-yy') from dual;
select to_char(sysdate,'Day month -yyyy') from dual;
select to_char(sysdate,'yyyy') from dual;
select to_char(sysdate,'Day month -yyyy','NLS_DATE_LANGUAGE = Spanish') from dual;
select to_char(sysdate,'Day month -yyyy','NLS_DATE_LANGUAGE = Russian') from dual;
--FUNCIONES ANALÍTICAS
--CONTAR
SELECT COUNT(*) "Total de empleados" FROM employees;
SELECT COUNT(commission_pct) "Personas con comision" FROM employees;
SELECT COUNT(DISTINCT manager_id) "Total Administradores" FROM employees;
SELECT COUNT(DISTINCT first_name) "Nombres distintos" FROM employees;
--La desviación estándar es la medida de dispersión más común, que indica qué tan
dispersos están los datos con respecto a la media
SELECT STDDEV(salary) "Desviacion estandar" FROM employees;
SELECT TRUNC(STDDEV(salary),2) "Desviacion estandar" FROM employees;
--TRIM
SELECT employee_id, TRIM(LEADING 0 FROM hire_date) FROM employees;
SELECT employee_id, TRIM(TRAILING 0 FROM SALARY) FROM employees;
SELECT TRIM(LEADING 'A' FROM first_name) FROM employees;
--RPAD Y LEPAD
SELECT LPAD(First_name,15,'-') "LPAD example" FROM employees;
SELECT RPAD('Cargando',11,'.') "LPAD example" FROM DUAL;
--REPLACE
SELECT REPLACE('JACK','J','BL') "Reemplazo" FROM DUAL;
--UPPER Y LOWER
SELECT UPPER(last_name) "En mayusculas" FROM employees;
SELECT LOWER(last_name) "En minusculas" FROM employees;
--CONCAT
SELECT CONCAT('Hola soy ',first_name) "Puesto" FROM employees;
SELECT CONCAT(CONCAT(first_name, ' trabaja como '),job_id) "Puesto" FROM employees;
--SUBSTR A PARTIR DE UN INDICE DADO OBTIENE UN TROZO DEL TEXTO, EL INDICE SE TOMA
EN CUENTA
SELECT SUBSTR('MAGALY',3,4) "Substring" FROM DUAL;
------------------------------------
------------------------------------
SOLUCION TAREA 1
------------------------------------
-- 1. Crear un tabla test de dos columnas ( Nombre varchar2(40), puesto
varchar2(10))
CREATE TABLE TEST (
ID NUMBER(4) GENERATED BY DEFAULT ON NULL AS IDENTITY,
NOMBRE varchar2(40),
PUESTO varchar2(30));
DESC TEST;
--5. Crear una tabla test2 basado en un select de la tabla de empleados, escoja las
columnas que guste.
CREATE TABLE TEST2 AS SELECT employee_id,first_name FROM EMPLOYEES;
--9.Hacer un update a varios registros a un 10% cuando el salario sea menor a 5000
y el departamento no sea 30.
update employees set salary = salary + (salary*.10)
where salary < 5000 and department_id <> 30
--13. Ejecute un select donde se impriman en pantalla los tres tipo de alias que
podemos usar.
select first_name as "NOMBRE",first_name nombre, first_name "NOMBRE2" FROM
employees
--14. Ejecute un select donde extraiga los datos de los empleados que tengan como
departamento 50 y que ganen más de 4000.
SELECT first_name from employees
where salary > 4000 and department_id = 50
--15. Desarrolle una consulta que liste el código, nombre y apellido de los
empleados y sus respectivos jefes con título Empleado y Jefe concatene y utilice
alias.
select 'El empleado con id ' || employee_id || ' se llama ' || first_name ||
' y su jefe tiene como identificador: ' || manager_id as "Información " from
employees;
------------------------------------------------------
Tarea#2
------------------------------------------------------
-- HR schema excercises
SELECT first_name
FROM employees
WHERE TO_CHAR(hire_date, 'YYYY') = '2001';
/* 20. Mostrar datos de los empleados que han ingresado este año */
UPDATE EMPLOYEES
SET SALARY = 8000
WHERE EMPLOYEE_ID = 115 AND SALARY < 6000;
------------------- JOINS
/* 50. Mostrar los detalles de los puestos ocupados por cualquier empleado
que actualmente tenga más de 15000 de salario*/
SELECT JH.*
FROM JOB_HISTORY JH
JOIN EMPLOYEES E ON (JH.EMPLOYEE_ID = E.EMPLOYEE_ID)
WHERE SALARY > 15000;
/* 52. Mostrar nombre de los empleados que ingresaron antes que su manager*/
SELECT E1.FIRST_NAME
FROM EMPLOYEES E1 JOIN EMPLOYEES E2 ON (E1.MANAGER_ID=E2.EMPLOYEE_ID)
WHERE E1.HIRE_DATE < E2.HIRE_DATE;
/* 53. Mostrar nombre, job_title para los puestos que un empleado tuvo
anteriormente y que duró menos de 6 meses */
SELECT FIRST_NAME, JOB_TITLE
FROM EMPLOYEES E
JOIN JOB_HISTORY JH ON (JH.EMPLOYEE_ID = E.EMPLOYEE_ID)
JOIN JOBS J ON( JH.JOB_ID = J.JOB_ID)
WHERE MONTHS_BETWEEN(END_DATE,START_DATE) < 6 ;
SELECT TO_CHAR(HIRE_DATE,'MON-YY')
FROM EMPLOYEES
JOIN DEPARTMENTS USING (DEPARTMENT_ID)
JOIN LOCATIONS USING (LOCATION_ID)
WHERE CITY = 'Seattle'
GROUP BY TO_CHAR(HIRE_DATE,'MON-YY')
HAVING COUNT(*) > 5;
-------- SUBQUERIES
SELECT *
FROM DEPARTMENTS
WHERE DEPARTMENT_ID IN
(SELECT DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID
HAVING MAX(SALARY)>10000);
SELECT FIRST_NAME
FROM EMPLOYEES
WHERE EMPLOYEE_ID IN
(SELECT MANAGER_ID FROM EMPLOYEES
GROUP BY MANAGER_ID
HAVING COUNT(*)>5);
SELECT *
FROM JOBS
WHERE JOB_ID IN
(SELECT JOB_ID FROM EMPLOYEES WHERE EMPLOYEE_ID IN
(SELECT EMPLOYEE_ID FROM JOB_HISTORY WHERE JOB_ID='IT_PROG'));
SELECT SALARY
FROM EMPLOYEES main
WHERE 2 = (SELECT COUNT( DISTINCT SALARY )
FROM EMPLOYEES
WHERE SALARY > main.SALARY);