Volver a la lista de artículos Artículos
Lectura de 6 minutos

Introducción a los operadores de conjuntos de SQL: Unión, Unión Todo, Menos e Intersección

¿Has oído alguna vez términos como unión e intersección en SQL? Son ejemplos de operadores de conjunto, y resultan muy útiles cuando se necesita combinar información de varias tablas o consultas. En este artículo, los veremos con más detalle.

Las consultas SQL nos permiten elegir los fragmentos más importantes de grandes cantidades de información. Por supuesto, no podemos esperar que todos los datos necesarios se almacenen en una sola tabla. Supongamos que queremos presentar todos los aspectos de algún grupo de datos clave en una tabla de resultados (por ejemplo, hacer un informe con los nombres de todos los clientes atendidos por cada departamento de una gran empresa). Estos registros pueden encontrarse en muchas tablas diferentes, por lo que necesitamos operadores de conjunto como la unión y la intersección en SQL para fusionarlos en una sola tabla o para encontrar elementos comunes.

En este tipo de operaciones, tomamos dos o más resultados de las sentencias SELECT y creamos una nueva tabla con los datos recogidos. Para ello, utilizamos un operador de conjunto de SQL. Operadores como MINUS, UNION o INTERSECT son muy utilizados en las consultas SQL. Veamos cómo funcionan.

Las tablas de muestra

Supongamos que tenemos una base de datos muy sencilla que almacena información sobre libros y películas. Sólo tiene dos tablas BOOKS y MOVIESque contienen los títulos de los libros y las películas (respectivamente) y un número de identificación. Al mirar estas tablas, observe que un título aparece en ambas:

Table: BOOKS
ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby

Table: MOVIES
ID Title
1 Iron Man
2 Harry Potter
3 Dr Strange
4 Matrix

El operador UNION Set

¿Y si quisiéramos hacer una tabla con todo el contenido de las tablas BOOKS y MOVIES y la tabla de la película? Este es el momento perfecto para utilizar el operador de conjunto UNION.

UNION combina los resultados de dos sentencias SELECT. Importante: Las sentencias UNION sólo devuelven valores UNIQUE. A continuación, verás un diagrama de Venn que representa esta operación y el código que la realiza:

SELECT * FROM BOOKS
UNION
SELECT * FROM MOVIES

Este es el resultado:

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Dr Strange
7 Matrix

Todos los títulos de libros y películas están ahora en una tabla. Observe que "Harry Potter" -un elemento que aparece en ambas tablas- se muestra sólo una vez en los resultados. Como hemos mencionado antes, el operador de conjunto UNION no devuelve valores duplicados.

El operador de conjunto UNION ALL

Probablemente haya adivinado que UNION ALL es muy similar a UNION, pero con una excepción: UNION ALL devuelve todos los datos de todas las tablas, sin importar si son duplicados o no. Hagamos la misma operación que en el ejemplo de UNION y veamos qué obtenemos:

SELECT * FROM BOOKS
UNION ALL
SELECT * FROM MOVIES

Resultado:

ID Title
1 The Witcher
2 Harry Potter
3 Nineteen Eighty-Four
4 The Great Gatsby
5 Iron Man
6 Harry Potter
7 Dr Strange
8 Matrix

Esta vez, el pequeño asistente aparece dos veces en la tabla de resultados.

Ahora ya conocemos la principal diferencia entre estos dos operadores. Pero, ¿cuándo debemos utilizar UNION y cuándo UNION ALL? En primer lugar, hay que saber que existe una gran diferencia de eficacia entre ambos. Supongamos que tenemos que fusionar dos resultados de consulta que contienen 10.000 elementos cada uno. UNION eliminará los duplicados y ordenará todos los elementos de la tabla de resultados. Este proceso de ordenación lleva mucho tiempo y funciona con un gran número de elementos.

En resumen, UNION puede ser cuatro veces más lento que UNION ALL, que no elimina los duplicados y no ordena los datos. Si no nos importan los duplicados y queremos trabajar rápido, UNION ALL será la solución perfecta. Pero si sabemos que tener elementos únicos es nuestro principal objetivo, entonces UNION será mucho más útil.

El operador de conjunto MINUS

MINUS es un poco diferente. Digamos que queremos ver sólo los títulos de libros que no son también títulos de películas. Tenemos que "restar" todo lo que esté en la tabla BOOKS que también está en la tabla MOVIES tabla. El operador de conjunto MINUS está diseñado para este tipo de tarea.

SELECT * FROM BOOKS
MINUS
SELECT * FROM MOVIES

El resultado:

ID Title
1 The Witcher
2 Nineteen Eighty-Four
3 The Great Gatsby

Ahora "Harry Potter" no aparece en la tabla de resultados; es el título de un libro y de una película. Gracias al operador de conjunto MINUS podemos ver sólo los títulos que aparecen en la primera tabla y no están presentes en la segunda.

Por cierto, algunas bases de datos utilizan la palabra clave EXCEPT en lugar de MINUS. No se preocupe, la función y los resultados son exactamente los mismos.

El operador de conjunto INTERSECT

Bien, ya sabemos cómo sumar y restar algunos elementos utilizando los operadores UNION y MINUS. Pero, ¿qué debemos hacer si necesitamos saber qué tienen en común dos consultas?

Esta es la función principal del operador INTERSECT. Veamos cómo funciona.

SELECT * FROM BOOKS
INTERSECT
SELECT * FROM MOVIES

Y el resultado:

ID Title
1 Harry Potter

Ya sabes que "Harry Potter" (y sólo "Harry Potter") está presente en ambas tablas. Por tanto, es el único elemento de la tabla de resultados.

Menos, Unión, Intersección en SQL: Consejos prácticos

Hay algunas cosas que hay que recordar sobre el menos, la unión y la intersección en SQL:

  1. Si los nombres o alias de las columnas que se comparan son diferentes, la columna resultante se llamará después de la columna de la primera consulta SELECT.
  2. Se pueden utilizar los resultados de la consulta o las tablas con operadores de unión.
  3. Las columnas que se comparan deben ser del mismo tipo y de igual número.
  4. La tabla de resultados siempre tendrá más columnas de mayor precisión.

Los operadores MINUS, UNION y INTERSECT siempre ordenarán los resultados devueltos; UNION ALL no. Si queremos un determinado orden o tipo de ordenación, siempre podemos utilizar un ORDER BY al final de la consulta. Pero hay que tener en cuenta que esto ordenará toda la consulta. No podemos usar ORDER BY antes de un operador de conjunto SQL o intentar ordenar cada SELECT por separado.

También debemos mencionar que podemos usar operadores de conjunto como menos, unión e intersección en SQL en todo tipo de consultas. No necesitamos seleccionar todos los registros de ambas tablas, sino que podemos trabajar con los resultados de las consultas existentes.

Es increíble lo que podemos hacer con operadores de conjunto como menos, unión e intersección en SQL. Gracias a ellos, podemos encontrar y presentar fácilmente datos interesantes. Obtenga experiencia práctica en el trabajo con operadores de conjuntos SQL y otras funciones con el curso LearnSQL.es's SQL para principiantes. Inicie un nuevo y emocionante viaje de datos de la forma adecuada