You are on page 1of 11

SELECT BÀSICOS

SELECT * FROM departments; (selecciona todas las columnas)

SELECT department_id, location_id (selecciona algunas columnas)


FROM departments;

SELECT last_name, salary, salary + 300 (prioridad * / + _ )


FROM employees;

SELECT last_name, salary, 12*salary+100


FROM employees;

SELECT last_name, salary, 12*(salary+100)


FROM employees;

SELECT last_name||' '||job_id AS EJEMPLO (concatena)


FROM employees;

SELECT DISTINCT department_id (DISTINCT:duplicados)


FROM employees;

WHERE

SELECT employee_id, last_name, job_id, department_id


FROM employees
WHERE department_id = 90 ;

select last_name,salary (‘’ Caracteres y fecha)


from employees
where last_name='Whalen';

SELECT last_name, salary (operadores)


FROM employees
WHERE salary <= 3000;

BETWEEN(rango de valores)

SELECT last_name, salary


FROM employees
WHERE salary BETWEEN 2500 AND 3500;

IN (si existen esos valores)

SELECT employee_id, last_name, salary, manager_id


FROM employees
WHERE manager_id IN (100, 101, 201);

LIKE (bùsquedas)

SELECT last_name ( _:Solo 1 caracter %: cualquier caracter)


FROM employees WHERE last_name
LIKE '_o%';

NULL

SELECT last_name, manager_id


FROM employees
WHERE manager_id IS NULL;

AND (dos condiciones sean verdaderas)

SELECT last_name, job_id, salary


FROM employees
WHERE salary >=10000 AND job_id LIKE '%MAN%';

OR (requiere que una de las condiciones sea verdadera)

SELECT last_name, job_id, salary


FROM employees
WHERE salary >=10000 OR job_id LIKE '%MAN%';

NOT

SELECT last_name, job_id


FROM employees
WHERE job_id NOT IN ('IT_PROG', 'ST_CLERK'');

SELECT last_name, job_id, salary (PRIORIDADES)


FROM employees
WHERE (job_id = 'SA_REP' OR job_id = 'AD_PRES') AND salary > 15000;

ORDER BY (Ordene filas ASCendente DESCendente)

SELECT last_name, job_id, department_id, hire_date


FROM employees
ORDER BY hire_date ASC/DESC ;

SELECT employee_id, last_name, salary*12 annsal


FROM employees
ORDER BY annsal;

SELECT last_name, department_id, salary


FROM employees
ORDER BY department_id, salary DESC;

FUNCIONES DE MANIPULACIÓN DE MAYÚSCULAS/MINÚSCULAS

SELECT employee_id, last_name, department_id


FROM employees
WHERE LOWER(last_name) = 'higgins';

FUNCIONES DE MANIPULACIÓN DE CARACTERES


FUNCIONES NUMÉRICAS

ROUND: Redondea el valor a los decimales especificados.


ROUND(45.926, 2) 45.93

TRUNC: Trunca el valor a los decimales especificados.


TRUNC(45.926, 2) 45.92

MOD: Devuelve el resto de la división.


MOD(1600, 300) 100

ABS: Calcula el valor absoluto de n.


ABS(-16) 16

CEIL: Calcula el menor numero entero mayor o igual que n.


CEIL(16.7) 17

FLOOR: Calcula el mayor numero entero menor o igual que n.


FLOOR(16.7) 16

POWER: Devuelve m elevado a la n potencia, n debe ser entero


POWER(3,2) 9
SELECT last_name, salary, MOD(salary, 5000)
FROM employees
WHERE job_id = 'SA_REP';

SELECT last_name, hire_date


FROM employees
WHERE last_name like 'G%';

TRABAJO CON FECHAS

SYSDATE: es una función que devuelve: Fecha y Hora

SELECT last_name, (17 june 1987)


TO_CHAR(hire_date, 'fmDD Month YYYY') AS HIREDATE
FROM employees;

SELECT TO_CHAR(salary, '$99,999.00') SALARY (Salary $6000)


FROM employees
WHERE last_name = 'Ernst';

FUNCIONES DE ANIDAMIENTO

NVL: Convierte un valor nulo en un valor real.


Los tipos de dato que se pueden utilizar son fechas, caracteres y numéricos. • Los tipos de dato
deben coincidir:
– NVL(commission_pct,0)
– NVL(hire_date,'01-JAN-97')
– NVL(job_id,'No Job Yet')

SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')


FROM employees
WHERE manager_id IS NULL; (KING -NO MANAGER)

NVL(commission_pct, 0), (convierte los valores nulos a numero real cero)

IF expr1 IS NULL
THEN
expr3
ELSE
expr2
END IF

SELECT last_name, salary, commission_pct,


NVL2(commission_pct,SALary+commission_pct,salary) as COMISIONES
FROM employees WHERE department_id IN (50, 80)

CASE-END

SELECT last_name, job_id, salary,

CASE job_id
WHEN 'IT_PROG' THEN 1.10*salary
WHEN 'ST_CLERK' THEN 1.15*salary
WHEN 'SA_REP' THEN 1.20*salary
ELSE salary
END "CASO DE USO"

FROM EMPLOYEES

DECODE: una sentencia CASE o IF-THEN-ELSE:

SELECT last_name, job_id, salary,


DECODE(job_id,'IT_PROG',1.10*salary,'ST_CLERK',1.15*salary,'SA_REP', 1.20*salary,salary)
NOMBRE
FROM employees;

UNIONES

SELECT e.employee_id, e.last_name, e.department_id, d.department_id,d.location_id


FROM employees e, departments d
WHERE e.department_id = d.department_id;

La condición BETWEEN de Oracle devolverá los registros donde la expresión está dentro del
rango de value1 y value2 (inclusive).

SELECT e.last_name, e.department_id, d.department_name


FROM employees e, departments d
WHERE e.department_id(+) = d.department_id ;

Unión de una Tabla Consigo Misma

SELECT worker.last_name || ' works for '|| manager.last_name


FROM employees worker, employees manager
WHERE worker.manager_id = manager.employee_id ;

La cláusula CROSS JOIN produce varios productos entre dos tablas. • Es lo mismo que un
producto Cartesiano entre las dos tablas.

SELECT last_name, department_name


FROM employees
CROSS JOIN departments ;

La cláusula NATURAL JOIN se basa en todas las columnas de las dos tablas que tienen el
mismo nombre. • Selecciona filas de las dos tablas que tienen los mismos valores en todas las
columnas coincidentes. • Si las columnas que tienen el mismo nombre tienen distintos tipos de
dato, se devuelve un error

SELECT department_id, department_name, location_id, city


FROM departments
NATURAL JOIN locations ;

Creación de Uniones con la Cláusula USING • Si varias columnas tienen los mismos nombres
pero los tipos de dato no coinciden, la cláusula NATURAL JOIN se puede modificar con la
cláusula USING para especificar las columnas que se deben utilizar para una unión de
igualdad. • Utilice la cláusula USING para hacer coincidir solamente una columna cuando
coincidan varias. • No utilice un nombre o alias de tabla en las columnas de referencia. • Las
cláusulas NATURAL JOIN y USING son mutuamente excluyentes.

SELECT e.employee_id, e.last_name, d.location_id


FROM employees e JOIN departments d
USING (department_id) ;

Creación de Uniones con la Cláusula ON • La condición de unión para la unión natural es


básicamente una unión de igualdad de todas las columnas con el mismo nombre. • Para
especificar condiciones arbitrarias o especificar columnas para unir, se utiliza la cláusula ON.
• La condición de unión se separa de otras condiciones de búsqueda.

SELECT e.employee_id, e.last_name, e.department_id,d.department_id, d.location_id


FROM employees e JOIN departments d
ON (e.department_id = d.department_id);

SELECT employee_id, city, department_name


FROM employees e JOIN departments d
ON d.department_id = e.department_id JOIN locations L ON d.location_id = L.location_id;

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_id


FROM employees e JOIN departments d
ON (e.department_id = d.department_id) AND e.manager_id = 149 ;

TIPOS DE FUNCIONES DE GRUPO

• AVG
• COUNT
• MAX
• MIN
• STDDEV
• SUM
• VARIANCE

COUNT(*) devuelve el número de filas de una tabla

SELECT COUNT(*)
FROM employees
WHERE department_id = 50;

COUNT(expr) devuelve el número de filas con valores no nulos para expr. • Visualice el
número de valores de departamento de la tabla EMPLOYEES, excluyendo los valores nulos.

SELECT COUNT(commission_pct)
FROM employees
WHERE department_id = 80;

COUNT(DISTINCT expr) devuelve el número de valores distintos no nulos de expr. •


Visualice el número de valores de departamento distintos de la tabla EMPLOYEES.
SELECT COUNT(DISTINCT department_id)
FROM employees;

Uso de la Cláusula GROUP BY Todas las columnas de la lista SELECT que no estén en las
funciones de grupo deben estar en la cláusula GROUP BY.

SELECT department_id, AVG(salary)


FROM employees
GROUP BY department_id ;

SELECT department_id dept_id, job_id, SUM(salary)


FROM employees
GROUP BY department_id, job_id ;

No se puede utilizar la cláusula WHERE para restringir grupos. • Utilice la cláusula


HAVING para restringir grupos. • No se pueden utilizar funciones de grupo en la cláusula
WHERE

SELECT department_id, MAX(salary)


FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;

SELECT job_id, SUM(salary) PAYROLL


FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);

1.5.1 Modelo de Prueba Historial de Trabajadores

Para el presente cuaderno se muestra el diseño de la base de datos de Historial de trabajadores, el


cual está contenido en el usuario HR predefinido por el gestor Oracle 10g, mostrando una relación de
siete tablas, la cual será usado como ejemplo para demostrar los problemas propuestos.

Esta base de datos presenta las siguientes entidades, tal como se aprecia en la tabla 2.

Entidades (tablas) Descripción


Contiene la relación de empleados
Empleados (Employees) consignados en la organización.
Contiene la relación de departamentos
Departamentos (Departments) existentes en la organización.
Contiene la dirección u ubicación de
Localidades (Locations), cada departamento.

Contiene la relación de los nombres de


Ciudades (Countries) los países.

Contiene la relación de los nombres de


Regiones (Regions) los continentes.

Contiene la relación de los nombres de


los puestos consignados en la
Puestos (Jobs)
organización.

Contiene la relación del historial de


Historial de Puestos puestos por empleados, consignando la
(Job_History) fecha de inicio y fin de cada empleado.

Tabla 2. Relación de tablas para el modelo Historial de trabajadores

Las tablas que forman parte del modelo Historial de trabajadores, se relacionan teniendo en cuenta
las siguientes asociaciones:

 Un departamento consigna muchos empleados, y un empleado está contenido en muchos


departamentos. Propio de esta relación se genera la tabla Historial de Puestos (Job_History).

 Un departamento tiene asignado un gerente.

 Un empleado tiene asignado un puesto.

 Un departamento tiene asignado una localidad, una ciudad y una región.

La estructura de este modelo ha sido elaborada en base al análisis de la base de datos propuesta por
el motor Oracle, la cual se presenta en la figura 5:
Figura 5: Diseño de la base de datos de Historial de Trabajadores.

Escritura de Sentencias SQL SELECT Básicas

You might also like