1. 10/07/25 I D A T 1
CONSULTAS A PARTIR DE
MULTIPLES TABLAS
Prof. Javier Rosales Guerra
2. 10/07/25 I D A T 2
Consultas a partir de múltiples
tablas
La mayoría de consultas requiere que se lean datos de
dos o más tablas, por ejemplo:
Una lista de las facturas con sus respectivos montos
(tablas Facturas y Detalle de Facturas)
Una lista de productos con sus respectivos
proveedores (tablas Productos y Proveedores)
Lista de ordenes de compra donde muestre el nombre
del proveedor, el nombre del producto, el importe de
la orden (tablas Proveedor, Producto, Orden y Orden
Detalle)
3. 10/07/25 I D A T 3
JOIN
La instrucción JOIN permite seleccionar columnas de una
o más tablas y las visualiza en un único conjunto de
resultados.
SELECT Lista_de_Campos
FROM Tabla1
Tipo_join JOIN Tabla2 ON Condición_del_join
Lista_de_Campos: Es la lista de columnas que se
desea mostrar en la consulta
Tipo_join: Es el tipo de join que se desea utilizar
INNER (Interior), OUTER (exterior) o CROSS
(irrestricto).
Condicion_del_join: Determina en base a qué campos
de las tablas se establece la relación entre las tablas
4. 10/07/25 I D A T 4
Tipos de Join
La sentencia JOIN en SQL permite combinar registros de
dos o más tablas en una base de datos relacional.
En el Lenguaje de Consultas Estructurado (SQL), hay tres
tipos de JOIN: interno (Inner), externo(Outer), y cruzado
(Cross).
Tipo de Join Resultado
Inner Join Solo las filas que cumplen la condición de la combinación
Cross Join Todas las combinaciones posibles entre las filas de las tablas
a combinar
Outer Join Las filas que cumplen la condición de la combinación y
además las filas que no satisfacen la combinación, estas
filas pueden provenir de la tabla izquierda (left outer join),
de la tabla derecha (right outer join), o de ambas tablas
(full outer join)
5. 10/07/25 I D A T 5
Tablas de ejemplo
Tabla: Empleados Tabla: Departamentos
CREATE TABLE
EMPLEADOS(
APELLIDOS VARCHAR(25),
IDDPTO CHAR(2)
)
CREATE TABLE
DEPARTAMENTOS(
IDDPTO CHAR(2),
NOMDPTO VARCHAR(30)
)
6. 10/07/25 I D A T 6
Tablas de ejemplo
La tabla Empleados contiene a los empleados con el
número del departamento al que pertenecen
La tabla Departamentos, contiene el nombre de los
departamentos de la empresa
Existe un empleado que tiene asignado un número de
departamento que no se encuentra en la tabla
Departamento s (Mena)
En la tabla Departamento existe un departamento al
cual no pertenece empleado alguno (Marketing).
7. 10/07/25 I D A T 7
Combinación interna (INNER
JOIN)
Con esta operación se calcula el producto cruzado de
todos los registros.
Cada registro en la tabla A es combinado con cada
registro de la tabla B; pero sólo permanecen aquellos
registros en la tabla combinada que satisfacen las
condiciones que se especifiquen.
Este es el tipo de JOIN más utilizado por lo que es
considerado el tipo de combinación predeterminado
8. 10/07/25 I D A T 8
Combinación interna (INNER
JOIN)
SQL especifica dos formas diferentes para expresar
estas combinaciones.
La primera, conocida como explícita:
Usa la palabra JOIN
La segunda es implícita:
Usa ',' para separar las tablas a combinar en la
sentencia FROM de la declaración SELECT.
Entonces siempre se genera el producto cruzado del
cual se seleccionan las combinaciones que cumplan lo
que indica la sentencia WHERE.
9. 10/07/25 I D A T 9
INNER JOIN explícita:
Ejemplo:
SELECT *
FROM empleados
INNER JOIN departamentos
ON Empleados.IDdpto = Departamentos.IdDpto
10. 10/07/25 I D A T 10
INNER JOIN implícita:
Ejemplo:
SELECT *
FROM Empleados, Departamentos
WHERE Empleados.IdDpto = Departamentos.IdDpto
11. 10/07/25 I D A T 11
Combinación interna (INNER
JOIN)
El empleado Mena y el departamento de Marketing no
son presentados en los resultados ya que ninguno de
éstos tiene registros correspondientes en la otra
tabla.
No existe un departamento con número 50.
12. 10/07/25 I D A T 12
theta-join.
A la combinación que utiliza comparaciones dentro del
predicado JOIN se le llama theta-join.
SELECT *
FROM Empleados
INNER JOIN Departamentos
ON Empleados.IdDpto < Departamentos.IdDpto
13. 10/07/25 I D A T 13
Clasificación de INNER JOIN
Las operaciones INNER JOIN puede ser clasificadas
como:
De equivalencia
Naturales y
Cruzadas
14. 10/07/25 I D A T 14
De equivalencia (equi-join)
Usa comparaciones de igualdad en el predicado JOIN.
Cuando se usan operadores, tales como < o > no se puede
clasificar en este rango.
Ejemplo:
SELECT *
FROM Empleados
INNER JOIN Departamentos
ON Empleados.IdDpto = Departamentos.IdDpto
15. 10/07/25 I D A T 15
Natural (Natural join)
Es una especialización de la combinación de equivalencia,
anteriormente mencionada.
En este caso se comparan todas las columnas que tengan el
mismo nombre en ambas tablas.
La tabla resultante contiene sólo una columna por cada par
de columnas con el mismo nombre.
16. 10/07/25 I D A T 16
Cruzada (Cross join)
Presenta el producto cartesiano
de todos los registros de las
dos tablas.
El código SQL para realizar este
producto cartesiano enuncia las
tablas que serán combinadas,
pero no incluye algún predicado
que filtre el resultado.
Ejemplo:
SELECT *
FROM Empleados CROSS JOIN
Departamentos
17. 10/07/25 I D A T 17
Cruzada implícita
Ejemplo:
SELECT *
FROM Empleados,
Departamentos
18. 10/07/25 I D A T 18
Combinación externa (OUTER JOIN)
Mediante esta operación no se requiere que cada registro en
las tablas a tratar tenga un registro equivalente en la otra
tabla.
El registro es mantenido en la tabla combinada si no existe
otro registro que le corresponda.
En SQL no existe una notación implícita para las
combinaciones externas.
Este tipo de operación se subdivide dependiendo de la tabla
a la cual se le admitirán los registros que no tienen
correspondencia, ya sean de:
Tabla Izquierda
Tabla derecha o
Combinación completa.
19. 10/07/25 I D A T 19
De tabla izquierda (LEFT OUTER
JOIN)
El resultado de esta operación siempre contiene todos los
registros de la tabla de la izquierda (la primera tabla que se
menciona en la consulta), aun cuando no exista un registro
correspondiente en la tabla de la derecha, para uno de la
izquierda.
La sentencia LEFT OUTER JOIN retorna la pareja de todos los
valores de la tabla izquierda con los valores de la tabla de la
derecha correspondientes, o retorna un valor nulo NULL en
caso de no correspondencia.
A diferencia del resultado presentado en los ejemplos A y B (de
combinación interna) donde no se mostraba el empleado cuyo
departamento no existía; en el siguiente ejemplo se presentarán
los empleados con su respectivo departamento, e inclusive se
presentará el empleado, cuyo departamento no existe.
20. 10/07/25 I D A T 20
De tabla izquierda (LEFT OUTER
JOIN)
Ejemplo:
SELECT distinct *
FROM Empleados
LEFT OUTER JOIN Departamentos
ON Empleados.IdDpto = Departamentos.IdDpto
21. 10/07/25 I D A T 21
De tabla derecha (RIGHT OUTER
JOIN)
Esta operación es inversa a la anterior; el resultado de esta
operación siempre contiene todos los registros de la tabla
de la derecha (la segunda tabla que se menciona en la
consulta), aun cuando no exista un registro correspondiente
en la tabla de la izquierda, para uno de la derecha.
La sentencia RIGHT OUTER JOIN retorna la pareja de
todos los valores de la tabla derecha con los valores de la
tabla de la izquierda correspondientes, o retorna un valor
nulo NULL en caso de no correspondencia.
22. 10/07/25 I D A T 22
De tabla derecha (RIGHT OUTER
JOIN)
Ejemplo:
SELECT *
FROM Empleados
RIGHT OUTER JOIN Departamentos
ON Empleados.IdDpto = Departamentos.IdDpto
23. 10/07/25 I D A T 23
Combinación completa (FULL OUTER
JOIN)
Esta operación presenta los resultados de tabla izquierda y
tabla derecha aunque no tengan correspondencia en la otra
tabla.
La tabla combinada contendrá, entonces, todos los registros
de ambas tablas y presentará valores nulos NULLs para
registros sin pareja.
Ejemplo:
SELECT *
FROM Empleados
FULL OUTER JOIN Departamentos
ON Empleados.IdDpto = Departamentos.IdDpto