INTRODUCCIÓN AL LENGUAJE SQL

UTILIZANDO POSTGRESQL
Clase 8: Combinación de consultas SQL

................................................... 6 EXCEPT ................................. INTERSECT y EXCEPT.......... 2 UNION...................................................................Contenido Introducción ...... INTERSECT y EXCEPT....................................................... 4 INTERSECT ... vamos a explicar en detalle los operadores UNION.................... 8 Bibliografía .............. que tiene la siguiente estructura: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL................................... la comparación de los resultados de varias consultas y su combinación y por otro................................................................................................................................. para esto utilizaremos una tabla de ejemplo llamada tabla1................ es necesario que en cada resultado exista la misma cantidad de campos y que los campos a comparar tengan tipos de datos compatibles..................................................... 12 Introducción Para comparar los resultados de varias consultas y combinarlos en un nuevo resultado basado en esa comparación existen los operadores UNION................................ Como vamos a comparar varias consultas.. Cabe aclarar que no es necesario que tengan el mismo nombre......................................................................... la combinación de datos de varias tablas en una consulta: para esto último usamos JOIN estableciendo una relación por uno o varios campos con otras tablas.......................................................... AÑO 2013.............................................. PÁGINA 2 ................ A continuación.......... Debemos diferenciar por un lado.................

PÁGINA 3 .Las consultas que vamos a utilizar para combinar serán las siguientes: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. AÑO 2013.

UNION La sintaxis para combinar dos consultas mediante la cláusula UNION es la siguiente (Los corchetes ([]) indican que el elemento es opcional): consulta1 UNION [ALL] consulta2 Esta sintaxis. Gráficamente. AÑO 2013. Para conservar los registros duplicados se usa UNION ALL en lugar de UNION. pero podrían ser cualquier consulta siempre y cuando se respete que la salida contenga la misma cantidad de campos y que los tipos de datos de los campos sean compatibles para la comparación.Las dos consultas planteadas para los ejemplos se hacen sobre la misma tabla (tabla1). en general esto implica campos numéricos con campos numéricos y campos de texto con campos de texto. Los registros duplicados se eliminan. PÁGINA 4 . podemos ver que el resultado está formado por todos los registros de la primera y de la segunda consulta: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. agrega el resultado de la consulta2 al resultado de la consulta1.

estos son los resultados que se obtienen: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. PÁGINA 5 .consulta1 UNION consulta2 Combinando las consultas del ejemplo. AÑO 2013.

PÁGINA 6 . AÑO 2013. si quisiéramos ver las localizaciones que tienen Jardín de Infantes o Primaria de 6 años o ambas ofertas en la modalidad Común.Por ejemplo. podríamos escribir la siguiente consulta: SELECT id_localizacion c_estado=1 UNION SELECT id_localizacion c_estado=1. Esto es así para todas las combinaciones de consultas. teniendo en cuenta sólo ofertas activas.oferta_local WHERE c_oferta=102 AND Podemos notar que la primera consulta que interviene se escribe sin el punto y coma (. INTERSECT La sintaxis para combinar dos consultas mediante la clausula INTERSECT es la siguiente (Los corchetes ([]) indican que el elemento es opcional): INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL.oferta_local WHERE c_oferta=101 AND FROM ra2011.) al final ya que la consulta completa está formada por las consultas que intervienen y el operador UNION finalizando después de la segunda consulta. FROM ra2011.

AÑO 2013. podemos ver que el resultado está formado por todos los registros que existen en ambas consultas: consulta1 INTERSECT consulta2 Combinando las consultas del ejemplo. Los registros duplicados se eliminan. PÁGINA 7 . estos son los resultados que se obtienen: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. Para conservar los registros duplicados se usa INTERSECT ALL en lugar de INTERSECT.consulta1 INTERSECT [ALL] consulta2 El resultado de la combinación. Gráficamente. contiene solamente los registros que aparecen en ambas consultas: consulta1 y consulta2.

en este sentido funciona como la diferencia entre consulta 1 y consulta2. Como este operador funciona como la diferencia entre dos consultas no es lo mismo escribir: consulta1 EXCEPT [ALL] consulta2 que: consulta2 EXCEPT [ALL] consulta1 INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. AÑO 2013. teniendo en cuenta sólo ofertas activas. podríamos escribir la siguiente consulta: SELECT id_localizacion c_estado=1 INTERSECT SELECT id_localizacion c_estado=1.Para ver las localizaciones que tiene Jardín de Infantes y Primaria de 6 años de la modalidad Común.oferta_local WHERE c_oferta=101 AND FROM ra2011.oferta_local WHERE c_oferta=102 AND EXCEPT La sintaxis para combinar dos consultas mediante la cláusula EXCEPT es la siguiente (Los corchetes ([]) indican que el elemento es opcional): consulta1 EXCEPT [ALL] consulta2 El resultado contiene los registros de la primera consulta si no existen en la segunda consulta. Los registros duplicados se eliminan. Para conservar los registros duplicados se usa EXCEPT ALL en lugar de EXCEPT. PÁGINA 8 . FROM ra2011.

estos son los resultados que se obtienen: INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. podemos ver que el resultado está formado por todos los registros de una consulta siempre y cuando no existan en la otra consulta: consulta1 EXCEPT consulta2 consulta2 EXCEPT consulta1 Combinando las consultas de ejemplo. AÑO 2013. El segundo caso devuelve los registros de la consulta2 siempre y cuando no existan en la consulta1.El primer caso devuelve los registros de la consulta1 siempre y cuando no existan en la consulta2. Gráficamente. PÁGINA 9 .

a} a {h. AÑO 2013. podríamos escribir la siguiente consulta: SELECT id_localizacion c_estado=1 EXCEPT SELECT id_localizacion c_estado=1.e. por lo tanto el resultado de la consulta “SELECT nombre FROM tabla1 WHERE codigo>9.” cambia de {h. y puede apreciarse la diferencia entre EXCEPT y EXCEPT ALL: Para ver las localizaciones que tienen Jardín de Infantes y no tienen Primaria de 6 años de la modalidad Común. PÁGINA 10 .oferta_local WHERE c_oferta=102 AND INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL.Para ver el resultado de EXCEPT ALL eliminamos el registro con el código 28 y el valor “h”.e.f. FROM ra2011.oferta_local WHERE c_oferta=101 AND FROM ra2011.f.a}. teniendo en cuenta solo ofertas activas.h.

) que cumplen con ciertas condiciones y posteriormente usarlos en otras consultas.oferta_local WHERE c_oferta=102 AND FROM ra2011. se verá con mayor profundidad en la clase 9. AÑO 2013. se hace un JOIN a una consulta.oferta_local WHERE c_oferta=101 AND UNION. PÁGINA 11 . podríamos escribir la siguiente consulta: SELECT id_localizacion c_estado=1 EXCEPT SELECT id_localizacion c_estado=1. INTERSECT y EXCEPT son particularmente útiles para determinar grupos de entidades (localizaciones. ámbito y sector de aquellas localizaciones que tienen Jardín de Infantes y no tienen Primaria de 6 años de la modalidad Común de la siguiente forma: Este tipo de consultas. etc. nombre. establecimientos.Para ver las localizaciones que tienen Primaria de 6 años y no tienen Jardín de Infantes de la modalidad Común. Por ejemplo. teniendo en cuenta sólo ofertas activas. podríamos listar cueanexo. INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL. donde en lugar de hacer un JOIN a una tabla. FROM ra2011. ofertas locales.

4/interactive/index.html [consulta julio 2011] The PostgreSQL Global Development Group. AÑO 2013. 9.org/docs/8.org/docs/8.4/interactive/sql.postgresql. URL: http://www. The SQL Language [en línea].html [consulta julio 2011] The PostgreSQL Global Development Group. PostgreSQL 8.postgresql.postgresql.4/interactive/sql-commands. URL: línea].12 Documentation [en línea].postgresql. PÁGINA 12 .org/docs/8.4.html [consulta julio 2011] The PostgreSQL Global Development Group.html [consulta julio 2011] INTRODUCCIÓN AL LENGUAJE SQL UTILIZANDO POSTGRESQL.4/interactive/queries-union. Combining queries [en línea].Bibliografía The PostgreSQL Global Development Group. SQL Commands [en http://www. URL: http://www. URL: http://www.18.org/docs/8.