martes, 28 de junio de 2011

Uso de Joins

Para aquellos que hasta ahora incursionan en el mundo de SQL o aquellos que quieren reforzar sus conocimientos, este blog les será útil.


Empezaremos repasando el uso de joins mediante ejemplos sencillos, fáciles de entender.


A continuación veremos la estructura y datos de las tablas empleado y departamento, tomando como ejemplo los trabajadores de una compañía y el área al cual está asociado cada uno.




Tabla Empleado
idEmpleadoNombresApellidosidDepartamento
13Juan Alejandro Gómez 132
58María CamilaRodríguez678
20Lusa PatriciaHenao74
71Jaime AlbertoCastañoNULL





Tabla Departamento
idDepartamento Departamento
132Recursos humanos
678Administrativo
74Gestión
26Ventas


  • INNER JOIN
Permite consultar los datos que deseemos de la intersección de X tablas. En el caso de nuestro ejemplo, contamos con la tabla Empleado, que contiene el campo idDepartamento, que es llave foránea a la tabla Departamento y nos permitirá enlazar las dos tablas. Veamos la estructura de la consulta a través de nuestras tablas ejemplo:


Select e.Nombres,e.Apellidos,d.Departamento
From Empleado e
Inner Join Departamento d ON d.idDepartamento=e.idDepartamento


Si analizamos la estructura de la clausula FROM, colocamos el nombre de una tabla y su respectivo alias seguido de la sentencia INNER JOIN, luego el nombre de la tabla que vamos a intersectar con otro alias diferente, la clausula ON que nos permite definir por que campo queremos realizar el cruce. Si queremos trabajar mas tablas, basta con adicionar más sentencias INNER JOIN sin olvidar los ON.

El resultado de nuestra consulta sera el siguiente:



NombresApellidosDepartamento
Juan AlejandroGómezRecursos humanos
María CamilaRodríguezAdministrativo
Luisa PatriciaHenaoGestión

Como podemos observar, no estamos recibiendo los datos del trabajador Jaime Alberto Castaño porque no tiene un id de departamento asociado.


  • LEFT OUTER JOIN - LEFT JOIN

Este tipo de join permite consultar todos los datos de la tabla que tengamos a la izquierda de la sentencia LEFT, relacionada con los datos que pueda tener con otra tabla. Para nuestro caso utilizamos el campo idDepartamento para unir las dos tablas. Veamos la estructura:


Select e.Nombres,e.Apellidos,d.Departamento
From Empleado e
Left Join Departamento d ON d.idDepartamento=e.idDepartamento
Como podrán ver, la estructura es similar a la del INNER JOIN aunque su funcionamiento es diferente. Su escritura puede o no incluir la palabla OUTER, sin alterar el resultado. A continuación visualizaremos el resultado del query:


NombresApellidosDepartamento
Juan AlejandroGómezRecursos humanos
María CamilaRodríguezAdministrativo
Luisa PatriciaHenaoGestión
Jaime AlbertoCastañoNULL

Si analizamos el resultado de la consulta, podremos apreciar que retorno todos los valores de la tabla Empleado, incluyendo el registro de Jaime Castaño, quien no tiene una dependencia asociada.

  • RIGHT OUTER JOIN - RIGHT JOIN

Es similar al LEFT, aunque permite consultar todos los datos de la tabla que tengamos a la derecha de la sentencia RIGHT, relacionada con los datos que pueda tener con otra tabla. Nuestro query entonces sera el siguiente:


Select e.Nombres,e.Apellidos,d.Departamento
From Empleado e
Right Join Departamento d ON d.idDepartamento=e.idDepartamento
Al igual que en el caso anterior, su escritura puede o no contener la palabra OUTER. El resultado que obtendremos es el siguiente:


NombresApellidosDepartamento
Juan AlejandroGómezRecursos humanos
María CamilaRodríguezAdministrativo
Luisa PatriciaHenaoGestión
NULLNULLVentas

Si analizamos el resultado de la consulta, podremos apreciar que retorno todos los valores de la tabla Departamento, incluyendo la dependencia de ventas, que no tiene empleados asociados.



  • FULL OUTER JOIN

Es un join especial que permite consultar los datos de las dos tablas que se están uniendo independientemente de que hayan registros en cada una de ellas que no se puedan unir entre si. Nuestro query entonces sera el siguiente:


Select e.Nombres,e.Apellidos,d.Departamento
From Empleado e
Full Outer Join Departamento d ON d.idDepartamento=e.idDepartamento 

El resultado de nuestra consulta es el siguiente:


Nombres

ApellidosDepartamento
Juan AlejandroGómezRecursos humanos
María CamilaRodríguezAdministrativo
Luisa PatriciaHenaoGestión
Jaime AlbertoCastañoNULL
NULLNULLVentas











Si analizamos el resultado de la consulta, podremos apreciar que retorno todos los valores de las dos tablas, incluyendo al empleado Jaime Alberto Castaño y la dependencia de ventas, que no tienen asociaciones.


  • CROSS JOIN


    • A través de un Cross Join podemos obtener un punto cruz entre dos tablas. Nuestro join quedaría construido de la siguiente forma:


      Select e.Nombres,e.Apellidos,d.Departamento
      From Empleado e
      Cross Join Departamento d 
      

      El resultado de nuestra consulta es el siguiente:


      Nombres

      ApellidosDepartamento
      Juan AlejandroGómezRecursos humanos
      María CamilaRodríguezAdministrativo
      Luisa PatriciaHenaoGestión
      Jaime AlbertoCastañoVentas
      Juan AlejandroGómezAdministrativo
      María CamilaRodríguezGestión
      Luisa PatriciaHenaoVentas
      Jaime AlbertoCastañoRecursos humanos
      Juan AlejandroGómezGestión
      María CamilaRodríguezVentas
      Luisa PatriciaHenaoRecursos humanos
      Jaime AlbertoCastañoAdministrativo
      Juan AlejandroGómezVentas
      María CamilaRodríguezRecursos humanos
      Luisa PatriciaHenaoAdministrativo
      Jaime AlbertoCastañoGestión





























      Por ser un producto cartesiano, la escritura de este join no involucra una clausula ON, dado que no queremos relacionar las tablas por un campo especifico. Analizando el resultado de la consulta, observaremos que obtenemos todas las posibles combinaciones entre los registros de las tablas.

      No hay comentarios:

      Publicar un comentario