Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
de base de datos
Prof. Carlos Takano
Semana 3
Joins
Joins
Tipos
INNER
JOIN
OUTER JOIN (LEFT, RIGHT Y FULL)
CROSS JOIN (producto cartesiano)
Tipos de join
INNER JOIN
INNER JOIN
JOIN Ejemplo 1
/*
La condicin indica qu columnas se van a
comparar para hacer el JOIN
Los alias de tablas se usan para evitar
ambigedad cuando hay varias columnas
con el mismo nombre
JOIN e INNER JOIN son equivalentes
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
JOIN Ejemplo 2
/*
La condicin de JOIN tambin se puede
especificar en la clusula WHERE
Se recomienda utilizar la sintaxis del
ejemplo anterior (estndar ANSI)
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id
JOIN Ejemplo 3
/*
Los JOIN se realizan por pares de tablas
En el ejemplo, se une EMPLOYEES con
DEPARTMENTS y el resultado se une con
LOCATIONS
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id=d.department_id)
JOIN locations l
ON (d.location_id = l.location_id)
WHERE l.city <> 'Seattle'
JOIN Ejemplo 4
/*
Para hacer join de una tabla consigo
misma, se debe incluir ms de una vez
en la clusula FROM
*/
SELECT e.first_name, e.last_name,
m.last_name manager
FROM employees e JOIN employees m
ON (e.manager_id = m.employee_id)
JOIN Ejemplo 5
/*
Si se usa LEFT JOIN, se incluye en el
resultado todas las filas de la tabla
que est a la izquierda de la clusula
JOIN (EMPLOYEES)
LEFT OUTER JOIN es equivalente a LEFT JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e LEFT JOIN departments d
ON (e.department_id = d.department_id)
JOIN Ejemplo 6
/*
Si se usa RIGHT JOIN, se incluye en el
resultado todas las filas de la tabla
que est a la derecha de la clusula
JOIN (DEPARTMENTS)
RIGHT OUTER JOIN es equivalente a RIGHT
JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e RIGHT JOIN departments d
ON (e.department_id = d.department_id)
JOIN Ejemplo 7
/*
Si se usa FULL JOIN, se incluye en el
resultado las filas de ambas tablas
involucradas
FULL OUTER JOIN es equivalente a FULL JOIN
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e FULL JOIN departments d
ON (e.department_id = d.department_id)
La clusula ORDER BY
Clusula ORDER BY
Si no se especifica ORDER BY, no se
puede establecer con seguridad en qu
orden devolver las filas la base de datos
Cada criterio de ordenacin puede ser
una expresin, un alias de columna o la
posicin de una columna en la clusula
SELECT
ORDER BY Ejemplo 1
/*
Ordena por sueldo en forma ascendente
(valor por omisin o default)
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
JOIN locations l
ON (d.location_id = l.location_id)
WHERE l.city <> 'Sydney'
ORDER BY e.salary
ORDER BY Ejemplo 2
/*
Especificar criterios para ordenar por
posicin de columna en la clusula SELECT
DESC ordena en forma descendente
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
ORDER BY 4 DESC, 1
ORDER BY Ejemplo 3
/*
Permite ordenar segn el valor de una
expresin, incluso basada en columnas
que no aparecen en la clusula SELECT
*/
SELECT e.employee_id, e.first_name,
e.last_name, d.department_name
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
ORDER BY TO_CHAR(hire_date,'YYYY'),
e.employee_id
DISTINCT
DISTINCT Ejemplo 1
/*
DISTINCT elimina filas duplicadas
Devuelve una fila por cada cdigo de
puesto que ocupan los empleados
*/
SELECT DISTINCT job_id
FROM employees
DISTINCT Ejemplo 2
/*
DISTINCT elimina filas duplicadas
Devuelve una fila por cada combinacin de
cdigo de puesto y cdigo de departamento
*/
SELECT DISTINCT job_id, department_id
FROM employees
Funciones de grupo
Clusula GROUP BY
Permite aplicar funciones de totalizacin o
resumen, agrupando las filas segn lo
requerido
Devuelve una fila de informacin
totalizada por cada grupo, aplicando
funciones como SUM, COUNT, AVG, MIN,
MAX, entre otras
GROUP BY Ejemplo 1
/*
GROUP BY va despus de WHERE
Primero se aplica el filtro, despus se agrupa
En la clusula GROUP BY deben aparecer todas las
expresiones que aparecen en la clusula SELECT y
no son funciones de grupo
*/
SELECT
FROM
ON
WHERE
GROUP
GROUP BY Ejemplo 2
/*
HAVING permite filtrar filas despus de agrupar
Es "El WHERE del GROUP BY"
*/
SELECT d.location_id, d.department_id, MAX(e.salary)
FROM employees e JOIN departments d
ON e.department_id = d.department_id
WHERE d.location_id = 1700
GROUP BY d.location_id, d.department_id
HAVING COUNT(*) > 5
Operadores de conjuntos
Operadores de conjuntos
UNION y UNION ALL
INTERSECT
DIFFERENCE
En
UNION
A
UNION
UNION Ejemplo 1
/*
UNION elimina duplicados
UNION ALL no elimina duplicados
*/
SELECT
FROM
WHERE
UNION
SELECT
FROM
WHERE
manager_id
departments
manager_id IS NOT NULL
manager_id
employees
manager_id IS NOT NULL;
INTERSECT
A
INTERSECT
INTERSECT Ejemplo 1
/*
INTERSECT devuelve las filas comunes
*/
SELECT
FROM
WHERE
INTERSECT
SELECT
FROM
WHERE
manager_id
departments
manager_id IS NOT NULL
manager_id
employees
manager_id IS NOT NULL
DIFFERENCE
A
B
BA
DIFFERENCE
A difference B
Atencin: (A B) (B A)
manager_id
departments
manager_id IS NOT NULL
manager_id
employees
manager_id IS NOT NULL