Beruflich Dokumente
Kultur Dokumente
Aprendizaje Esperado :
Construir sentencias de recuperación y manipulación, de una base de datos
relacional, según sintaxis, restricciones del lenguaje, requisitos de la lógica
negocios, requisitos de información y sistema de gestión de base de datos.
……………….…...….…………….………………
………………….…….….…..…………….……… …………....…..…………………..……..………
…… ……………………..………………..……………
……………….………..………………….………………...….…
…..…………….………..………………………..………...….…
Obteniendo Datos de Múltiples Tablas
JOINS
• Sintaxis:
………………………………………………………………………………………...…
………………………………………………………….…………………………….….
Creando Joins con la cláusula NATURAL JOINS
• La cláusula NATURAL JOIN se basa en todas las columnas de las
dos tablas que tienen el mismo nombre.
• Ejemplo:
SELECT department_id, department_name, location_id, city
FROM departments NATURAL JOIN locations;
…………………………………………………………..…………………….…………………………………....…….…
……………………………………………………………………………….……………………………………………….
Creando Joins con la cláusula NATURAL JOINS
• Ejemplo:
SELECT department_id, department_name, location_id, city
FROM departments NATURAL JOIN locations
WHERE department_id IN(20 , 50);
Creando Joins con la cláusula USING
• Si varias columnas tienen los mismos nombres, pero los tipos de
datos no coinciden, utilizando la cláusula USING se especifican las
columnas para la combinación de igualdad.
• Ejemplo:
SELECT employee_id, last_name, department_id, location_id
FROM employees JOIN departments
USING (department_id)
ORDER BY employee_id;
…………………………………………………………..………..…………………....…….…
……………………………………………………………………..…………………………….
Creando Joins con la cláusula USING
• Ejemplo:
• Ejemplo:
Sentencia incorrecta Sentencia correcta
SELECT l.city, d.department_name SELECT l.city, d.department_name
FROM locations l JOIN departments d FROM locations l JOIN departments d
USING (location_id) USING (location_id)
WHERE d.location_id = 1400; WHERE location_id = 1400;
Creando Joins con la cláusula ON
• Para especificar las columnas por las cuales se quiere unir dos
tablas, se debe utilizar la cláusula ON.
• Ejemplo:
SELECT e.employee_id , e.last_name , e.department_id "DEPTO.EMPLOYEES",
d.department_id "DEPTO.DEPARTMENTS", d.location_id
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
ORDER BY e.employee_id;
…………………………………………………………………….………..…………………....…….…
………………………………………………..……………………………..…………………………….
Creando Joins con la cláusula ON
• Ejemplo:
…………………………………………………..……………………..……
………………………………………………..……………………….…….
Creando Joins en Tres Sentidos
• Un Join en tres sentidos es la unión de tres tablas y se ejecutan de
izquierda a derecha. La condición del primer join puede referenciar
sólo columnas de las tablas del primer Join. La condición del
segundo join puede referenciar columnas de las tres tablas.
• Ejemplo:
SELECT emp.employee_id, dep.department_name, loc.city
FROM employees emp JOIN departments dep
USING(department_id)
JOIN locations loc
USING(location_id);
………………………………………………………………….…………....…….…
………………………………………………..……………………………………….
Creando Joins en Tres Sentidos
• Ejemplo:
………………………………………………………………….…………....…….…
………………………………………………..……………………………………….
Agregando Condiciones Adicionales a un Join
• Para agregar una condición a la cláusula USING se debe agregar la
cláusula WHERE.
• Ejemplo:
SELECT employee_id, salary, e.manager_id, department_id, department_name
FROM employees e JOIN departments
USING(department_id)
WHERE e.manager_id IN(149,100)
AND salary < 10000;
Agregando Condiciones Adicionales a un Join
• Para agregar una condición a la cláusula ON se puede agregar la
cláusula AND ó utilizar la cláusula de condición WHERE.
• Ejemplo:
SELECT e.employee_id, e.salary, SELECT e.employee_id, e.salary,
e.manager_id, e.department_id, e.manager_id, e.department_id,
d.department_name d.department_name
FROM employees e JOIN departments d FROM employees e JOIN departments d
ON (e.department_id = d.department_id) ON(e.department_id = d.department_id)
AND e.manager_id IN(149,100) WHERE e.manager_id IN(149,100)
AND salary < 10000; AND salary < 10000;
Join sobre la misma tabla o Self-Join
¿Cuál es el nombre del Jefe de cada Empleado?
TABLA
EMPLOYEES
…………………..….…...….………….……………
………………………….….…..……….……………
Join sobre la misma tabla o Self-Join
• Ejemplo:
SELECT e.employee_id "Id Empleado", e.last_name "Empleado",
e.manager_id "Id Jefe", m.last_name "Jefe"
FROM employees e JOIN employees m
ON (e.manager_id = m.employee_id)
ORDER BY e.employee_id;
…………………..….…...………………………………..………….……………
………………………….….…..……….……………………………………….…
Nonequijoins
¿Cuál es el Grado de cada Empleado de acuerdo a su Salario?
TABLA EMPLOYEES
TABLA JOB_GRADES
…………..………………..….……………...…….…
……………..………………………….…………..….
Nonequijoins
• Ejemplo:
SELECT e.employee_id, e.last_name, e.salary, j.grade_level
FROM employees e JOIN job_grades j
ON e.salary BETWEEN j.lowest_sal AND j.highest_sal
ORDER BY e.employee_id;
…………..……………………..….…………….................................…….…
…………..……………………..….…………….................................…….…
Outer Join o Uniones Externas
¿Porqué en el resultado del Join no aparece el empleado 178?
TABLA EMPLOYEES
SELECT employee_id, department_id, department_name
FROM employees JOIN departments
USING (department_id)
ORDER BY employee_id;
……………………………………………….....…….…
…………………………………………………..……….
……………………………………………….....…….…
…………………………………………………..……….
………………………………………………………………….……....…….…
………………………………………………..………………………………….
………………………………………………………………….……....…….…
………………………………………………..………………………………….
Outer Joins o Uniones Externas
OUTER JOIN
• Ejemplo:
SELECT emp.employee_id, dep.department_id, dep.department_name
FROM employees emp LEFT OUTER JOIN departments dep
ON(emp.department_id = dep.department_id)
ORDER BY emp.employee_id;
……………………………………………………………..….....…….…
………………………………………………………..…………..……….
……………………………………………………………..….....…….…
………………………………………………………..…………..……….
Right Outer Join
• Retorna el resultado del Inner Join y las filas de la tabla a la derecha
del Join que no existen en la tabla de la izquierda del Join.
• Ejemplo:
SELECT emp.employee_id, dep.department_id, dep.department_name
FROM employees emp RIGHT OUTER JOIN departments dep
ON(emp.department_id = dep.department_id)
ORDER BY emp.employee_id;
……………………………………………………………..…….....…….…
………………………………………….……..………………..…..……….
……………………………………………………………..…….....…….…
………………………………………….……..………………..…..……….
……………………………………………………………..…….....…….…
………………………………………….……..………………..…..……….
Full Outer Join
• Retorna el resultado del Inner Join, las filas de un Left Outer Join y
las filas de Right Outer Join.
• Ejemplo:
SELECT emp.employee_id, dep.department_id, dep.department_name
FROM employees emp FULL OUTER JOIN departments dep
ON(emp.department_id = dep.department_id)
ORDER BY emp.employee_id;
……………………………………………………………..…..…………......…
………………………………………….……..…………………………..….….
……………………………………………………………..…..…………......…
………………………………………….……..…………………………..….….
……………………………………………………………..…..…………......…
………………………………………….……..…………………………..….….
Resumen de la Clase
• Se explicó cómo obtener en una sentencia SELECT datos de
diferentes tablas.
• Se describieron los tipos de Join de tablas.
• Se explicó cómo calificar las columnas de una tabla y cómo usar
alias de tablas
• Se explicó cómo crear Join usando cláusula NATURAL JOIN.
• Se explicó cómo crear Join usando cláusula USING.
• Se explicó cómo crear Join usando cláusula ON.
• Se explicó cómo incorporar condiciones adicionales en una
sentencia con Join de tablas.
• Se explicó cómo crear Outer Join: LEFT OUTER Join , RIGTH
OUTER Join y FULL OUTER Join.