Vous êtes sur la page 1sur 23

Módulo 4

Consulta de tablas múltiples

Paco Márquez Urbina


pmarquez@sistemasunica.edu.pe
Descripción general del módulo

• Entender los join


• Consultando con uniones internas
• Consultando con uniones externas
• Consultar con uniones cruzadas y uniones
automáticas
Lección 1: Entender las uniones

• La cláusula FROM y las tablas virtuales


• Unirse a la terminología: producto cartesiano
• Descripción general de los tipos de unión
• Opciones de sintaxis de T-SQL
• Demostración: Entender las uniones
La cláusula FROM y las tablas virtuales

• La cláusula FROM determina las tablas fuente


que se usarán en la instrucción SELECT
• La cláusula FROM puede contener tablas y
operadores
• El conjunto de resultados de la cláusula FROM es
una tabla virtual
• Las operaciones lógicas posteriores en la instrucción
SELECT consumen esta tabla virtual
• La cláusula FROM puede establecer alias de tabla
para su uso en fases posteriores de consulta
Terminología del Join: producto cartesiano
• Características de un producto cartesiano
• Salida o resultado intermedio de la cláusula FROM
• Combina todas las combinaciones posibles de dos
conjuntos
• En consultas T-SQL, generalmente no deseado
• Caso especial: tabla de números Name Product
Davis Alice Mutton
Davis Crab Meat
Name Product Davis Ipoh Coffee
Davis Alice Mutton Funk Alice Mutton
Funk Crab Meat Funk Crab Meat
King Ipoh Coffee Funk Ipoh Coffee
King Alice Mutton
King Crab Meat
King Ipoh Coffee
Descripción general de los tipos de Join

• Unir tipos en cláusulas FROM especifica las


operaciones realizadas en la tabla virtual:

Join Type Description


Cross Combines all rows in both tables (creates
Cartesian product)
Inner Starts with Cartesian product; applies filter
to match rows between tables based on
predicate
Outer Starts with Cartesian product; all rows from
designated table preserved, matching rows
from other table retrieved. Additional
NULLs inserted as placeholders
Opciones de sintaxis de T-SQL

• ANSI SQL-92
• Tablas unidas por el operador JOIN en la clausula FROM
• Sintaxis preferida
SELECT ...
FROM Table1 JOIN Table2
ON <on_predicate>

• ANSI SQL-89
• Tablas unidas por comas en la clausula FROM
• No recomendado: productos cartesianos accidentales

SELECT ...
FROM Table1, Table2
WHERE <where_predicate>
Demostración: Entender las uniones

En esta demostración, verás cómo:


• Usa combinaciones
Lección 2: consultar con combinaciones internas

• Entender las uniones internas


• Sintaxis de unión interna
• Ejemplos de unión interna
• Demostración: consultar con combinaciones
internas
Entender los join internos

• Devuelve solo las filas donde se encuentra una


coincidencia en ambas tablas de entrada
• Coincide con las filas según los atributos
proporcionados en el predicado
• Cláusula ON en la sintaxis SQL-92 (preferida)
• Cláusula WHERE en la sintaxis de SQL-89

• ¿Por qué filtrar en la cláusula ON?


• La separación lógica entre filtrado con fines de
combinación y filtrado da como resultado DONDE
• Por lo general, no hay diferencia para el
optimizador de consultas
• Si el operador predicado join es =, también
conocido como equi-join
Sintaxis de unión interna

• Tablas de lista en la cláusula FROM separadas por el


operador JOIN
• Alias preferidos de la tabla
• El orden de las tablas no importa
FROM t1 JOIN t2
ON t1.column = t2.column

SELECT o.orderid,
o.orderdate,
od.productid,
od.unitprice,
od.qty
FROM Sales.Orders AS o
JOIN Sales.OrderDetails AS od
ON o.orderid = od.orderid;
Ejemplos de join interno

• Únase basado en el atributo de coincidencia


única
SELECT ...
FROM Production.Categories AS C
JOIN Production.Products AS P
ON C.categoryid = P.categoryid;

• Unir en base a múltiples atributos coincidentes


(unión compuesta)
-- List cities and countries where both --
customers and employees live
SELECT DISTINCT e.city, e.country
FROM Sales.Customers AS c
JOIN HR.Employees AS e
ON c.city = e.city AND
c.country = e.country;
Demostración: consultar con combinaciones
internas
En esta demostración, verás cómo:
• Usa combinaciones internas
Lección 3: consultar con join externos

• Comprender los join externos


• Sintaxis de unión externa
• Ejemplos de unión externa
• Demostración: consultar con combinaciones
externas
Comprender los join externos

• Devuelve todas las filas de una tabla y las filas


correspondientes de la segunda tabla
• Las filas de una mesa están "conservadas"
• Designado con la palabra clave IZQUIERDA, DERECHA, LLENA
• Todas las filas desde la salida de tabla conservada al conjunto de
resultados
• Coincidencias de otra tabla recuperada
• Se agregaron filas adicionales a los resultados para las filas
no coincidentes
• NULL agregados en lugares donde los atributos no coinciden
• Ejemplo: devuelva todos los clientes y para aquellos que
hayan realizado pedidos, devuelva la información de su
pedido. Los clientes sin pedidos coincidentes mostrarán
NULL para los detalles de la orden.
Sintaxis Outer Join

• Devuelve todas las filas de la primera tabla, solo las


coincidencias de la segunda:
FROM t1 LEFT OUTER JOIN t2 ON
t1.col = t2.col

• Devuelve todas las filas de la segunda tabla, solo las


coincidencias de la primera:
FROM t1 RIGHT OUTER JOIN t2 ON
t1.col = t2.col

• Devuelve solo las filas de la primera mesa sin


coincidencias en la segunda:
FROM t1 LEFT OUTER JOIN t2 ON
t1.col = t2.col
WHERE t2.col IS NULL
Sintaxis de join externo

• Todos los clientes con detalles de pedido si


están presentes:
SELECT c.custid, c.contactname, o.orderid,
o.orderdate
FROM Sales.Customers AS C
LEFT OUTER JOIN Sales.Orders AS O
ON c.custid = o.custid;

• Clientes que no hicieron pedidos:

SELECT c.custid, c.contactname, o.orderid,


o.orderdate
FROM Sales.Customers AS C LEFT OUTER JOIN
Sales.Orders AS O
ON c.custid = o.custid
WHERE o.orderid IS NULL;
Lección 4: consultar con uniones cruzadas y
uniones automáticas

• Entender las uniones cruzadas


• Sintaxis de unión cruzada
• Ejemplos de unión cruzada
• Entenderse se une a uno mismo
• Ejemplos de Self Join
• Demostración: consultar con uniones cruzadas y
uniones con la misma tabla
Entender las uniones cruzadas

• Combina cada fila de la primera tabla con cada


fila de la segunda tabla
• Todas las combinaciones posibles de salida
• Base lógica para uniones internas y externas
• La unión interna comienza con el producto
cartesiano, agrega el filtro
• La unión externa toma salida cartesiana, filtrada,
agrega las filas que no coinciden (con marcadores de
posición NULL)
• Debido a la salida del producto cartesiano, no
suele ser una forma deseada de unión
Algunas excepciones útiles:
• Tabla de números, generando datos para pruebas
Sintaxis de unión cruzada

• No se realizó ninguna coincidencia, no se


utilizó ninguna cláusula ON
• Devuelva todas las filas de la tabla izquierda
combinadas con cada fila de la tabla derecha
(sintaxis ANSI SQL-92):
SELECT ...
FROM t1 CROSS JOIN t2

• Devuelva todas las filas de la tabla izquierda


combinadas con cada fila de la tabla derecha
(sintaxis ANSI SQL-89):
SELECT ...
FROM t1, t2
Ejemplos de unión cruzada

• Cree datos de prueba devolviendo todas las


combinaciones de dos entradas:
SELECT e1.firstname, e2.lastname
FROM HR.Employees AS e1
CROSS JOIN HR.Employees AS e2;
Entender la union con sigo mismo

• ¿Por qué usar autoinstrucciones?


• Compara filas en la misma tabla entre sí

• Crea dos instancias de la misma tabla en la


cláusula FROM
• Se requiere al menos un alias
• Ejemplo: Devolver a todos los empleados
y el nombre del jefe del empleado
Ejemplos de Self Join
• Devuelva a todos los empleados la
identificación del gerente del empleado
cuando exista un administrador (unión
interna): SELECT e.empid, e.lastname,
e.title, e.mgrid, m.lastname
FROM HR.Employees AS e
JOIN HR.Employees AS m
ON e.mgrid=m.empid ;

• Devuelva a todos los empleados con ID de


administrador (unión externa). Esto devolverá
NULL para el CEO:
SELECT e. empid, e.lastname,
e.title, m.mgrid
FROM HR.Employees AS e
LEFT OUTER JOIN HR.Employees AS m
ON e.mgrid=m.empid;

Vous aimerez peut-être aussi