2010-04-23 10 views
5

A menudo me preguntan en una entrevista que "¿qué es una combinación externa en SQL"?¿Cuáles son algunos buenos ejemplos donde se usa OUTER JOIN de SQL?

Si bien se puede responder, me pregunto lo que podría haber algunos ejemplos clásicos y buenas de la vida real, donde se utiliza un JOIN exterior (IZQUIERDA)?

+0

posible duplicado de http://stackoverflow.com/questions/1101343/what-is-the-purpose-or-use-case-for-an-outer-join-in-sql –

Respuesta

6

En la base de datos Northwind en la tabla de clientes y pedidos.

Haciendo una combinación interna sólo le dará a los clientes que han realizado pedidos.

Al realizar una unión externa obtendrá todos los clientes y los pedidos de los clientes que han realizado pedidos.

3

Un LEFT OUTER JOIN se puede utilizar cuando se desea que todos los registros de una de, así como los registros de otra tabla, si los hubiere.

Por ejemplo, la tabla dada User y Address, donde Address tiene una FK a User y podría haber 0 o más direcciones por usuario:

select * 
from User u 
left outer join Address a on u.UserID = a.UserID 

Esto asegurará que usted reciba todos los User registros, independientemente de si hay fue un registro correspondiente Address o no.

Si desea mostrar todos los usuarios que no tienen direcciones, se puede hacer esto:

select * 
from User u 
left outer join Address a on u.UserID = a.UserID 
where a.UserID is null 
3

ejemplo clásico es cutomers y órdenes. Algunos clientes tienen pedidos y otros no. Desea mostrar una lista de clientes con ventas totales. Por lo que hacer una combinación externa izquierda desde el cliente hasta el orden y obtener:

cliente A: $ 100; Cliente B: $ 0; cliente C: $ 500

en lugar de:

cliente A: $ 100; cliente C: $ 500

1

obtener una lista de todos los clientes, incluyendo los detalles de los pedidos que han hecho. Es posible que algunos clientes no hayan realizado pedidos y, por lo tanto, un INNER JOIN los excluiría de esta lista.

SELECT 
    * 
FROM 
    Customer 
LEFT OUTER JOIN 
    Order 
ON 
    Customer.CustomerId = Order.CustomerId 
2

Aquí se muestra un ejemplo:

Necesito una lista de todos los clientes, con sus vales, también necesito los clientes que no utilizan los vales.

SELECT * 
FROM Customer 
LEFT OUTER JOIN Voucher 
ON Customer.CustomerId = Voucher.CustomerId 
6

Para añadir a la respuesta de Robin Day, también se puede usar una combinación externa izquierda para agarrar solamente los clientes que no han realizado pedidos mediante la comprobación de NULL.


SELECT * 
FROM Customer 
    LEFT OUTER JOIN Order 
    ON Customer.CustomerId = Order.CustomerId 
WHERE Order.CustomerId IS NULL 
Cuestiones relacionadas