Navegador de Archivos
Calendario del Blog
General
Tipos de Joins
Ya que últimamente me ha dado por escribir de SQL, se me antoja escribir de un tema que desconocía cuando programaba en ASP 3.0 pero que siempre era necesario conocer. Me refiero a las "juntas en SQL" (que ojalá fueran reuniones en un bar =/ ) osea los JOIN de SQL. Que si bien es muy necesario conocer que hace exactamente cada tipo de "JOIN", es común encontrarse con "desarrolladores" que hacen uso de los "JOIN" a lo wey!
Recuerdo que varias veces pregunté (obvio a las personas equivocadas) cual era la diferencia y entre los tipos de JOIN y me decían: un INNER JOIN te sirve para obtener el resultado de dos tablas en una consulta y un CROSS JOIN un producto cartesiano de las tablas (ahora que lo analizo bien puede ser que se quisieran deshacer de mi sin explicar mucho o_O!)
OK, la respuesta no está del todo mal, sin embargo creo que primero se debe conocer cuales son:
- INNER JOIN
- LEFT OUTER JOIN (o LEFT JOIN)
- FULL OUTER JOIN
- CROSS JOIN
El primero (INNER JOIN) es la unión de dos tablas a partir de uno más campos obteniendo como resultado los registros que cumplan la condición de unión ("ON"), su uso es el siguiente:
SELECT * FROM Employee E
INNER JOIN Contact C
ON E.ContactID = C.ContactID
En Oracle este ejemplo podría definirse como "EQUI JOIN" y también se emplea lo que se llama "NATURAL JOIN", de tal suerte que la consulta anterior se puede expresar como:
SELECT * FROM Employee E
NATURAL JOIN Contact C
Esto nos permite omitir la condición de "ON", sin embargo hay que tener cuidado al usarlo ya que puede ocasionar resultados ambiguos cuando existen campos con el mismo nombre.
El LEFT OUTER JOIN (o LEFT JOIN): combina dos tablas con la diferencia que selecciona todas las filas de la primer tabla (LEFT -Izquierda) sin importar que tengan o no coincidencia en la segunda.
EL RIGHT OUTER JOIN (o RIGHT OUTER): combina las tablas a la inversa. Obtiene todos los registros de la segunda tabla (RIGHT -Derecha) dejando en NULL aquellos que no tengan coincidencia en la primera.
Un ejemplo más claro lo tenemos con la siguiente consulta:
SELECT C.Nombre, C.NomComercial, E.Entrada
FROM Clientes C
LEFT OUTER JOIN Entradas E
ON C.EstadoCli = E.IdEntrada
La consulta anterior obtendrá todos los registros de la tabla Clientes agregando la columna Entrada de la tabla Entradas aunque en está última no existan datos que coincidan, regresando para los registros sin coincidencia datos de tipo NULL. Esto es muy útil ya que de esta forma podemos filtrar cuando el resultado sea NULL y actualizar/eliminar/copiar registros que no existan en la tabla Clientes. Por ejemplo:
SELECT C.Nombre, C.NomComercial
INTO ClientesSinEntradas
FROM Clientes C
LEFT OUTER JOIN Entradas E
ON C.EstadoCli = E.IdEntrada
WHERE E.Entrada IS NULL
La consulta anterior mandara el resultado a la tabla ClientesSinEntradas cuando no exista relación en la tabla de Entradas
El FULL OUTER JOIN: nos permite obtener todo el universo de las tablas seleccionadas regresando NULL cuando no exista coincidencia en alguna de ellas. De tal suerte que si existieran registros en dos tablas como las siguientes:
Productos
|
Categorias
|
La consulta sería:
SELECT P.IdProducto, P.Producto, P.Precio, C.IdCategoria, C.Categoria
FROM Productos P
FULL OUTER JOIN Categorias C
ON P.IdCategoria = C.IdCategoria
Obteniendo como resultado:
| IdProducto | Producto | Precio | IdCategoria | Categoria |
| 10 | iPad | 499 USD | NULL | NULL |
| 12 | iPhone | 299 USD | 4 | Teléfonos |
| NULL | NULL | NULL | 5 | Teclados |
Por último tenemos el CROSS JOIN que nos da como resultado un producto cartesiano, osea, si tenemos dos tablas A y B, al hacer un CROSS JOIN, estamos haciendo A*B. La forma explicita de hacer esta consulta es:
SELECT *
FROM employee CROSS JOIN department;
Y de forma implícita puede ser con:
SELECT *
FROM employee, department;
- Para saber más: http://en.wikipedia.org/wiki/Join_(SQL)
Estadísticas de visitantes








Comentarios Recientes
- Celulares con Wifi en Como escoger el amor de tu vida.
- master en La diferencia entre un amigo y un novio
- Iván Jaimes en Internet Explorer 8 y la vista compatibilidad
- mauro en Internet Explorer 8 y la vista compatibilidad
- Iván Jaimes en ¿Qué hacer para que te valoren más?
- marcela en ¿Qué hacer para que te valoren más?
- Iván Jaimes en
- karyot en Haces ruido o te gusta volar?
- Iver en Haces ruido o te gusta volar?
- leo_on en Haces ruido o te gusta volar?
- Iván Jaimes en Los detalles hacen la diferencia
- linuxman en Los detalles hacen la diferencia
- Marcelo Araújo en Internet Explorer 8 y la vista compatibilidad
- Iván Jaimes en Código con aroma de mujer
- karyot en Código con aroma de mujer
- Profesor Mamelowsky en Código con aroma de mujer
- karyot en Lo sabroso de la vida
- Iván Jaimes en
- Iván Jaimes en Internet Explorer 8 y la vista compatibilidad
- cordoba en Internet Explorer 8 y la vista compatibilidad

Dejar un comentario