TRANSACT SQL - Consultas de Combinación

Creado por David Miralpeix, Modificado el Fri, 16 Feb 2024 a las 12:25 PM por David Miralpeix

Consultas de Combinación

 

Hasta ahora todos los ejemplos mostrados requieren datos de una sola tabla, pero es habitual tener que extraer información de varias tablas a la vez.

Las vinculaciones entre varias tablas que se realizan mediante la cláusula INNER, esta cláusula combina registros de dos tablas siempre que haya concordancia de valores en un campo común.

 

Sintaxis Básica:

SELECT * FROM tabla1 INNER JOIN tabla2 ON tabla1.campo1 = tabla2.campo2
SELECT * FROM tabla1 LEFT JOIN tabla2 ON tabla1.campo1 = tabla2.campo2
SELECT * FROM tabla1 RIGHT JOIN tabla2 ON tabla1.campo1 = tabla2.campo2

Donde campo1 y campo2 son los nombres de los campos que se combinan. Estos campos deben ser del mismo tipo de datos.

 

Ejemplos:

 

SELECT DISTINCT (Cliente) FROM Clientes_Datos C
INNER JOIN Pedidos_Cli_Cabecera P ON C.IdCliente =P.IdCliente

En este ejemplo se muestran todos los clientes de nuestra base de datos a los que se ha realizado algún pedido. Obsérvese que omitiendo la palabra DISTINCT un mismo cliente saldría repetido tantas veces como pedidos tuviese asociados.

 

SELECT DISTINCT (Cliente) FROM Clientes_Datos C
LEFT JOIN Pedidos_Cli_Cabecera P ON C.IdCliente =P.IdCliente

En este otro ejemplo se mostrarían todos los clientes, tuviesen o no pedidos asociados

 

SELECT Albaranes_Cli_Cab.IdAlbaran, 
Facturas_Cli_Cab.IdFactura,
Pedidos_Cli_Lineas.*
FROM Pedidos_Cli_Lineas
INNER JOIN Albaranes_Cli_Cab ON
Pedidos_Cli_Lineas.IdAlbaran = Albaranes_Cli_Cab.IdAlbaran
LEFT JOIN Facturas_Cli_Cab ON
Pedidos_Cli_Lineas.IdFactura = Facturas_Cli_Cab.IdFactura

En este ejemplo se muestra la información de los pedidos albaraneados facturados y no facturados. Si el pedido no esta facturado la columna IdFactura aparecerá rellenada con nulos, por el contrario la columna IdAlbaran siempre tendrá un dato valido ya que se ha combinado con la cláusula INNER en vez de LEFT

Si empleamos la cláusula INNER en una consulta se seleccionarán sólo aquellos registros de la tabla que hayamos escrito a la izquierda de INNER JOIN que contengan al menos un registro de la tabla que hayamos escrito a la derecha. Las cláusulas LEFT y RIGHT actúan de un modo diferente.

LEFT toma todos los registros coincidentes en ambas tablas y también los registros de la tabla de la izquierda aunque no tengan ningún registro coincidente en la tabla derecha. RIGHT realiza la misma operación pero al contrario, toma todos los registros coincidentes en ambas tablas y los registros de la tabla de la derecha aunque no tenga ningún registro en la tabla de la izquierda .

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo