Sei sulla pagina 1di 49

Base de Datos Base de Datos

L105 L105 L105 L105


Ing. Eduardo Yataco Silva Ing. Eduardo Yataco Silva
AGENDA AGENDA
Funciones CASE/DECODE
SubQuerys
Joins
Operadores Operadores
Ejercicios
CASE CASE
Syntaxis
CASE expr WHEN comparison_expr1 THEN return_expr1
[WHEN comparison_expr2 THEN return_expr2
WHEN comparison_exprn THEN return_exprn
ELSE else_expr]
END END
DECODE DECODE
Syntaxis
DECODE(col|expression, search1, result1
[, search2, result2,...,]
[, default])
CASE / DECODE CASE / DECODE
Para los Empleados, mostrar:
Apellido del Empleado
Trabajo del Empleado
Salario del Empleado Salario del Empleado
Incremento de Salario.
CASE / DECODE CASE / DECODE
Donde el Incremento de Salario ser:
Si Trabajo es IT_PROG, el incremento en
10%
Si Trabajo es ST_CLERK, el incremento Si Trabajo es ST_CLERK, el incremento
en 15%
Si Trabajo es SA_REP, el incremento en
20%
Otros 0%
CASE / DECODE CASE / DECODE
SELECT last_name AS "Apellido",
job_id AS "Rol",
salary AS "Salario",
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 As "Incremento_Salario"
FROM employees;
SELECT last_name AS "Apellido",
job_id AS "Rol",
salary AS "Salario",
DECODE(job_id, 'IT_PROG', 1.10*salary,
'ST_CLERK', 1.15*salary,
'SA_REP', 1.20*salary,
salary) As "Incremento_Salario"
FROM employees;
SUBQUERY SUBQUERY
Syntaxis
SELECT select_list
FROM table
WHERE expr operator
(SELECT select_list
FROM table);
La subconsulta (consulta interna) se ejecuta
antes de la consulta principal (consulta
externa).
El resultado de la subconsulta es utilizado
por la consulta principal.
FROM table);
SUBQUERY SUBQUERY
Incluya las subconsultas entre parntesis.
Coloque subconsultas en el lado derecho
de la condicin de comparacin.
Use operadores de una sola fila con Use operadores de una sola fila con
subconsultas que devuelven una sola fila.
Use operadores de mltiples filas con
subconsultas que devuelven mltiples
registros.
SUBQUERY SUBQUERY
Para los Empleados cuyo Salario (salary)
sea mayor al Salario del Empleado cuyo
apellidos es Abel, seleccione:
Apellidos (last_name) Apellidos (last_name)
Salario (salary)
SUBQUERY SUBQUERY
SELECT last_name, salary
FROM employees
WHERE salary > (SELECT salary
FROM employees FROM employees
WHERE last_name = 'Abel');
SUBQUERY SUBQUERY
Para los Empleados que cumplan lo
siguiente:
Rol sea igual al del empleado 141
Salarios mayores al salario del empleado 143 Salarios mayores al salario del empleado 143
Seleccione:
Apellidos (last_name)
Rol (job_id)
Salario (salary)
SUBQUERY SUBQUERY
SELECT last_name, job_id, salary
FROM employees
WHERE job_id = (SELECT job_id
FROM employees FROM employees
WHERE employee_id = 141)
AND salary > (SELECT salary
FROM employees
WHERE employee_id = 143);
SUBQUERY SUBQUERY
Para los Empleados que tienen como
Salario el Salario Mnimo de los
Empleados, seleccione:
Apellidos (last_name) Apellidos (last_name)
Rol (job_id)
Salario (salary)
SUBQUERY SUBQUERY
SELECT last_name, job_id, salary
FROM employees
WHERE salary = (SELECT MIN(salary) WHERE salary = (SELECT MIN(salary)
FROM employees);
SUBQUERY SUBQUERY
Seleccione:
Departamento (department_id)
Salario Mnimo de los empleados de dicho
departamento departamento
Para aquellos departamentos cuyo salario
mnimo sea mayor al salario mnimo del
departamento 50.
SUBQUERY SUBQUERY
SELECT department_id, MIN(salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) > (SELECT MIN(salary) HAVING MIN(salary) > (SELECT MIN(salary)
FROM employees
WHERE department_id = 50);
JOINS JOINS
Syntaxis
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2;
Un Join es usado para consultar datos de
mas de una tabla.
Las filas se combinan relacionando valores
comunes.
JOINS JOINS
SQL ANSI
SELECT table1.column, table2.column
FROM table1
[[NATURAL JOIN table2] |
[JOIN table2 USING (column_name)] |
[JOIN table2 [JOIN table2
ON (table1.colum_name = table2.column_name)]]
JOINS JOINS
NATURAL JOIN
JOIN de 2 tablas basado en el mismo
nombre de columna.
JOIN USING JOIN USING
JOIN basado en el nombre de una columna.
JOIN ON
JOIN basado en la condicin de la clausula
ON
JOINS JOINS
Seleccione:
Cdigo de regin
Descripcin de la regin
Descripcin del pas. Descripcin del pas.
JOINS JOINS
SELECT r.region_id AS "Region_Codigo",
r.region_name AS "Region_Nombre",
c.country_name AS "Pais_Nombre"
FROM regions r, FROM regions r,
countries c
WHERE r.region_id = c.region_id
JOINS JOINS
SELECT region_id AS "Region_Codigo",
r.region_name AS "Region_Nombre",
c.country_name AS "Pais_Nombre"
FROM regions r NATURAL JOIN countries c;
SELECT region_id AS "Region_Codigo",
r.region_name AS "Region_Nombre", r.region_name AS "Region_Nombre",
c.country_name AS "Pais_Nombre"
FROM regions r JOIN countries c
USING(region_id);
SELECT r.region_id AS "Region_Codigo",
r.region_name AS "Region_Nombre",
c.country_name AS "Pais_Nombre"
FROM regions r JOIN countries c
ON (r.region_id = c.region_id);
OUTER JOINS OUTER JOINS
Syntaxis
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 (+) = table2.column2;
SELECT table1.column, table2.column
FROM table1, table2
WHERE table1.column1 = table2.column2 (+);
OUTER JOINS OUTER JOINS
La ausencia de filas puede ser obtenida
colocando el operador (+).
El operador es colocado del lado que es
deficiente en informacin. deficiente en informacin.
El efecto el operador es crear una o mas
filas nulas, la cual es asociada con una o
mas filas de la tabla no deficiente.
JOINS JOINS
SQL ANSI
SELECT table1.column, table2.column
FROM table1
[[LEFT|RIGHT|FULL] OUTER JOIN table2
ON (table1.colum_name = table2.column_name)] ON (table1.colum_name = table2.column_name)]
JOINS JOINS
Seleccione:
Descripciones del pas
Descripcin de la ciudad
Para los pases que comiencen con la letra Para los pases que comiencen con la letra
I, tenga el pas ciudades registradas o no.
JOINS JOINS
SELECT c.country_name AS "Pais",
l.city AS "Ciudad"
FROM countries c,
locations l locations l
WHERE c.country_id = l.country_id(+)
AND c.country_name LIKE 'I%';
JOINS JOINS
SELECT c.country_name AS "Pais",
l.city AS "Ciudad"
FROM countries c NATURAL LEFT JOIN locations l
WHERE c.country_name LIKE 'I%';
SELECT c.country_name AS "Pais",
l.city AS "Ciudad" l.city AS "Ciudad"
FROM countries c LEFT JOIN locations l
USING(country_id)
WHERE c.country_name LIKE 'I%';
SELECT c.country_name AS "Pais",
l.city AS "Ciudad"
FROM countries c LEFT OUTER JOIN locations l
ON (c.country_id = l.country_id)
WHERE c.country_name LIKE 'I%';
OPERADORES OPERADORES
UNION/UNION ALL
INTERSECT
MINUS
OPERADOR: OPERADOR: UNION UNION
El operador UNION devuelve los
resultados de ambos querys despus de
eliminar los duplicados.
OPERADOR: OPERADOR: UNION UNION
SELECT employee_id, job_id
FROM employees
UNION UNION
SELECT employee_id, job_id
FROM job_history;
OPERADOR: OPERADOR: UNION UNION ALL ALL
El operador UNION ALL devuelve los
resultados de ambos querys incluyendo la
informacin duplicada.
OPERADOR: OPERADOR: UNION UNION ALL ALL
SELECT employee_id, job_id
FROM employees
UNION ALL UNION ALL
SELECT employee_id, job_id
FROM job_history;
OPERADOR: OPERADOR: INTERSECT INTERSECT
El operador INTERSECT devuelve las filas
que son comunes a ambas consultas.
OPERADOR: OPERADOR: INTERSECT INTERSECT
SELECT employee_id, job_id
FROM employees
INTERSECT INTERSECT
SELECT employee_id, job_id
FROM job_history;
OPERADOR: OPERADOR: MINUS MINUS
El operador MINUS devuelve las filas de
la primera consulta que no estn
presentes en la segunda consulta.
OPERADOR: OPERADOR: MINUS MINUS
SELECT employee_id, job_id
FROM employees FROM employees
MINUS
SELECT employee_id, job_id
FROM job_history;
EJERCICIOS EJERCICIOS
Mostrar el % Impositivo aplicable a los
Empleados del Departamento 80, segn:
Rango de Salario Porcentaje Impositivo
$0.001,999.99 00%
$2,000.003,999.99 09%
$4,000.005,999.99 20%
$6,000.007,999.99 30%
$8,000.009,999.99 40%
$10,000.0011,999.99 42%
$12,000.0013,999.99 44%
$14,000.00 o mayor 45%
EJERCICIOS EJERCICIOS
SELECT last_name AS "Apellido",
salary AS "Salario",
DECODE (TRUNC(salary/2000, 0),
0, '0.00 %',
1, '0.09 %',
2, '0.20 %', 2, '0.20 %',
3, '0.30 %',
4, '0.40 %',
5, '0.42 %',
6, '0.44 %',
'0.45 %') AS "%_Impuesto"
FROM employees
WHERE department_id = 80;
EJERCICIOS EJERCICIOS
SELECT last_name AS "Apellido",
salary AS "Salario",
CASE TRUNC(salary/2000, 0) WHEN 0 THEN '0.00 %'
WHEN 1 THEN '0.09 %'
WHEN 2 THEN '0.20 %'
WHEN 3 THEN '0.30 %' WHEN 3 THEN '0.30 %'
WHEN 4 THEN '0.40 %'
WHEN 5 THEN '0.42 %'
WHEN 6 THEN '0.44 %
ELSE '0.45 % END AS "%_Impuesto"
FROM employees
WHERE department_id = 80;
EJERCICIOS EJERCICIOS
Seleccione los siguientes datos de los
Empleados:
Apellido del Empleado
Salario del Empleado Salario del Empleado
Indicador de Comisin
Indicar si el Empleado recibi o no
Comisin
EJERCICIOS EJERCICIOS
SELECT last_name AS "Apellido",
salary AS "Salario", salary AS "Salario",
DECODE(commission_pct, NULL, 'No', 'Si') AS "Ind_Comision"
FROM employees;
EJERCICIOS EJERCICIOS
Seleccione:
Cdigo del Departamento
Descripcin del Departamento
Cantidad de Empleados Cantidad de Empleados
Siempre y cuando la Cantidad de
Empleados de los Departamentos
seleccionados sea igual a la cantidad
mxima de empleados de todos los
Departamentos.
EJERCICIOS EJERCICIOS
SELECT d.department_id AS "Codigo",
d.department_name AS "Descripcion",
COUNT(*) AS "Cantidad"
FROM departments d,
employees e
WHERE d.department_id = e.department_id
GROUP BY d.department_id, d.department_name
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM employees
GROUP BY department_id);
EJERCICIOS EJERCICIOS
Seleccione:
Cdigo del Departamento
Salario Mnimo del Departamento
Siempre y cuando el Salario Promedio de Siempre y cuando el Salario Promedio de
los Departamentos seleccionados sea igual
al Maximo Salario Promedio de todos los
Departamentos.
EJERCICIOS EJERCICIOS
SELECT department_id AS "Codigo",
MIN(salary) AS "Minimo"
FROM employees FROM employees
GROUP BY department_id
HAVING AVG(salary) = (SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id);
Gracias !!! Gracias !!! Gracias !!! Gracias !!!
Ing. Eduardo Ing. Eduardo Yataco Yataco Silva Silva

Potrebbero piacerti anche