Primeros pasos con PostGIS (Parte III)


Hasta ahora vimos algunos ejemplos de consultas SQL que se pueden hacer sobre una tabla, a continuación vamos a ver consultas que se pueden hacer sobre dos o más tablas.


CLÁUSULA JOIN

La cláusula JOIN se utiliza para combinar filas de dos o más tablas, según una columna relacionada entre ellas.


● INNER JOIN

Los registros que vamos a obtener son todos aquellos en los que el campo común exista en las dos tablas. Los registros de la tabla que su campo en común no coincida el de la otra tabla y viceversa, los omite.

Para nuestro ejemplo, hemos creado una tabla impuestos que contiene un campo rubro, que se relaciona con el campo rubro de la tabla lugares y otro campo booleano pago que nos dice si ese rubro paga impuestos.

Esta sería la sentencia:

					
SELECT lugares.id,lugares.nombre,lugares.geom,lugares.rubro,impuestos.pago
FROM lugares INNER JOIN impuestos ON lugares.rubro=impuestos.rubro;
					
				


● LEFT OUTER JOIN

Los registros que vamos a obtener son todos aquellos en los que el campo común exista en las dos tablas, también los registros de la primera tabla que no sean comunes con la segunda tabla (En nuestro caso todos los registros de la primera tabla tienen su correspondiente en la segunda, pero ello la salida es igual a la de INNER JOIN).

					
SELECT lugares.id,lugares.nombre,lugares.geom,impuestos.rubro,impuestos.pago
FROM lugares LEFT JOIN impuestos ON lugares.rubro=impuestos.rubro;
					
				


● RIGHT OUTER JOIN

Los registros que vamos a obtener son todos aquellos en los que el campo común exista en las dos tablas, también los registros de la segunda tabla que no sean comunes.

					
SELECT lugares.id,lugares.nombre,lugares.geom,impuestos.rubro,impuestos.pago
FROM lugares RIGHT JOIN impuestos ON lugares.rubro=impuestos.rubro;
					
				


● FULL OUTER JOIN

Los registros que vamos a obtener son todos aquellos en los que el campo común exista en las dos tablas y también los registros de ambas tablas que no sean comunes.

					
SELECT lugares.id,lugares.nombre,lugares.geom,impuestos.rubro,impuestos.pago FROM
lugares FULL JOIN impuestos ON lugares.rubro=impuestos.rubro;
					
				


● CROSS JOIN

Es un join que no se utiliza mucho. El resultado que obtenemos son todos los registros de la primera tabla combinados con cada uno de los registros de la segunda tabla. No se incluye ningún predicado que filtre el resultado.

					
SELECT lugares.id,lugares.nombre,lugares.geom,impuestos.rubro,impuestos.pago
FROM lugares CROSS JOIN impuestos
					
				


CLÁUSULA UNION

El operador UNION se utiliza para combinar el conjunto de resultados de dos o más sentencias SELECT de dos o más tablas. Para que se pueda realizar la unión se deben cumplir:

  • Cada instrucción SELECT dentro de UNION debe tener el mismo número de columnas.
  • Las columnas también deben tener tipos de datos similares.
  • Las columnas de cada instrucción SELECT también deben estar en el mismo orden.

Para nuestro caso hemos creado una tabla calles con los mismos campos que la tabla avenidas que habíamos creado para los ejemplos anteriores.

Las dos tablas son las siguientes:

					
SELECT nombre, geom FROM calles UNION SELECT nombre, geom from avenidas
					
				


Dentro del operador UNION podemos complejizar tanto como necesitemos la consulta, agregando ORDER BY, WHERE…

También podemos usar la sentencia UNION ALL, en vez de UNION, esta sentencia duplica los registros que sean comunes en la salida. si estamos seguros que todos los registros son únicos es una buena opción ya que es más rápida que UNION y no necesita que los campos estén en el mismo orden.




Sobre el Autor


Pedro Calás Blasco

Cartógrafo. Valenciano por el Mundo. He vivido en Mexico, Brasil y Argentina. Entusiasta de los mapas y las tecnologías Web Mapping. Fundador y coordinador de Mapearte. impulsamos y desarrollamos proyectos que contribuyan al desarrollo social a través de las tecnologías.


¿Eres desarrollador? Únete a la red