T-SQL JOIN, OUTER JOIN, FULL JOIN, SELF JOIN, CROSS JOIN

Permite realizar consultas entre varias tablas relacionadas (JOIN).

La base de datos usada para los ejemplos es AdventureWorks2014 de Microsoft

JOIN (INNER JOIN):

Permite combinar dos tablas, se llama combinación interna y solo devuelve aquellas filas coincidentes en ambas tablas.

Las condiciones de las relaciones de las tablas se pueden establecer en el FROM o en el WHERE, se recomienda establecer en el bloque del FROM. (para evitar productos cartesianos involuntarios).

Los valores NULL se omiten y no forman parte del resultado.

 

Ejemplo:

Relacionamos el Employee ( 290 rows) con sus EmployeePayHistory (316)

El resultado son 316 líneas con los datos del Employee y sus EmployeePayHistory

Consulta inner join

Ejemplo (con Null)

Vamos a relacionar  el Employee ( 290 rows) con los JobCandidate (13 rows)

Resultado: Obtenemos 2 filas debido a que en la tabla JobCandidate el BussinessEntityID es NULL excepto en dos casos y el JOIN omite los Nulls

 

OUTER JOIN (LEFT JOIN, RIGHT JOIN):

Relacionando mediante OUTER JOIN  devuelve todas las filas de una de las tablas, la tabla será según la relación que hagamos LEFT O RIGHT

Ejemplo LEFT JOIN:

Resultado: Devuelve todos los Employee (290 rows) y el valor de  JobCandidateID si tiene relación, sino un NULL

 

Ejemplo RIGHT JOIN:

Resultado: Devuelve todas las filas de la tabla JobCandidate (13 rows) y los valores de Employee que coincide en la relación sino NULL

 

FULL JOIN:

Obtiene los resultados de ambas tablas ya cumplan la condición de la relación o no.

Resultado: Obtenemos las 290 rows de clientes y las 13 rows de JobCandicate, como están relacionadas 2 rows, nos devuelve 301 rows,

Full query

 

SELF JOIN:

Relaciona la misma tabla, no es muy común su uso, en este caso la consulta por cada empleado de Marketing le obtiene el responsable, es necesario establecer alias en las tablas para diferenciar los campos.

Resultado:

Self Join, resultado consulta

CROSS JOIN:

Combina cada fila de la primera tabla con la segunda tabla. Son productos cartesianos.

Ejemplo:

Por cada empleado de Production Technician – WC1 (17 rows)  hago un CROSS JOIN con los posibles franjas horarias (3 rows).

Resultado: son 51 filas=17 empleados x 3 franjas horarias

Se podría usar por ejemplo en una empresa de servicios para unir un cliente con todos los servicios y luego ver que servicios a usado y cuales no.

Espero que os sea útil.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *