Saltar al contenido principal

Operadores de conjunto en SQL: Guía completa

Las operaciones de conjunto en SQL son técnicas para combinar o comparar los resultados de dos o más sentencias SELECT.
Actualizado 30 jul 2024  · 9 min de lectura

Las operaciones de conjunto constituyen la base de SQL y nos permiten combinar, comparar y filtrar datos de múltiples fuentes.

Estas operaciones son indispensables para tareas que van desde la integración y limpieza de datos hasta el análisis avanzado y la elaboración de informes.

En este tutorial, aprenderemos qué son los operadores de conjunto, cómo se utilizan en SQL, sus aplicaciones prácticas, ¡y mucho más!

Si buscas un recurso completo de aprendizaje de SQL, echa un vistazo a este temario de siete cursos de Fundamentos de SQL.

Para los que tengáis prisa, empecemos con una respuesta muy breve sobre qué son las operaciones de conjunto en SQL.

Respuesta corta: ¿Qué son las operaciones de conjunto en SQL?

Las operaciones de conjunto en SQL son técnicas para combinar o comparar los resultados de dos o más sentencias SELECT. Actúan como operaciones matemáticas de conjuntos, permitiéndonos encontrar la unión, la intersección o la diferencia entre las filas devueltas por nuestras consultas. Esto los hace indispensables cuando se analizan datos de múltiples fuentes o perspectivas.

Aquí tienes un resumen rápido de las operaciones del conjunto básico:

  • UNIÓN: Fusiona todas las filas únicas de dos o más sentencias SELECT, eliminando los duplicados.
  • UNIÓN TODOS: Fusiona todas las filas de dos o más sentencias SELECT, manteniendo los duplicados.
  • INTERSECT: Devuelve sólo las filas que aparecen en ambas sentencias SELECT.
  • EXCEPT: Devuelve las filas de la primera sentencia SELECT que no aparecen en la segunda.

Comprender los operadores de conjunto

Los operadores de conjunto son comandos o símbolos especializados que se utilizan para realizar operaciones en los conjuntos de resultados de varias consultas SELECT. Nos permiten realizar tareas como encontrar la unión (todas las filas), la intersección (filas compartidas) y la diferencia (filas únicas) entre distintos conjuntos de datos.

Los operadores de conjunto son herramientas esenciales para la manipulación y el análisis de datos en SQL. Proporcionan un potente medio para consultar y procesar datos de bases de datos relacionales.

Comparación con las operaciones del álgebra relacional

El álgebra relacional es un marco teórico que proporciona una base para comprender las consultas a las bases de datos. Ofrece operaciones abstractas como la proyección, la selección y la unión, arraigadas en principios matemáticos e independientes de sistemas de bases de datos específicos. Piensa en ella como la lógica "entre bastidores" que impulsa nuestras interacciones con la base de datos.

Los operadores de conjuntos en SQL ofrecen una aplicación práctica de estos conceptos en un entorno de base de datos. Nos permiten realizar operaciones de conjunto como la unión, la intersección y la diferencia directamente en los conjuntos de resultados de las consultas SQL.

Mientras que el álgebra relacional proporciona una base formal para las operaciones de bases de datos, los operadores de conjuntos en SQL ofrecen una interfaz estandarizada y fácil de usar para las tareas de manipulación de datos.

Comprender la relación entre los operadores de conjuntos y las operaciones del álgebra relacional permite comprender los fundamentos teóricos de SQL. Permite a los usuarios aprovechar eficazmente estos conceptos en las tareas de consulta y análisis de bases de datos.

Tipos de operadores de conjunto en SQL

Hay tres operadores de conjunto principales en SQL:

  • UNION
  • INTERSECT
  • EXCEPTO (o MENOS en algunos dialectos)

Estos operadores corresponden matemáticamente a los conceptos de unión, intersección y diferencia de conjuntos.

Vamos a profundizar en cada uno de ellos.

El operador UNIÓN

El operador UNION combina los resultados de dos o más consultas SELECT en un único conjunto de resultados, eliminando por defecto las filas duplicadas.

Por ejemplo, supongamos que tenemos dos tablas, employees y contractors, cada una con columnas similares como contractors, department y salary. A efectos de aprendizaje, consideremos estas dos tablas ficticias:

nombre

departamento

salario

Alice

Marketing

65000

Bob

Ventas

70000

Carol

Ingeniería

80000

John

RRHH

55000

Empleados

nombre

departamento

salario

David

Marketing

60000

Eva

Ventas

68000

Carol

Ingeniería

75000

Contratistas

Podemos combinar los resultados de ambas tablas utilizando el siguiente comando:

-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;

Esta consulta selecciona las columnas name, department y salary de las tablas employees y contractors y las combina en un único conjunto de resultados. El operador UNION elimina automáticamente las filas duplicadas del conjunto de resultados final.

nombre

departamento

salario

Alice

Marketing

65000

Bob

Ventas

70000

Carol

Ingeniería

80000

John

RRHH

55000

David

Marketing

60000

Eva

Ventas

68000

Observa que Carol, que aparece en ambas tablas, sólo aparece una vez en el resultado. Si quisiéramos conservar las dos instancias de Carol (con sus diferentes salarios), utilizaríamos UNION ALL.

Es importante recordar que el operador UNION no elimina los valores NULL. Si una columna contiene valores NULL en un conjunto de resultados y valores no NULL en la columna correspondiente de otro conjunto de resultados, los valores NULL se conservarán en el conjunto de resultados final producido por el operador UNION.

Si queremos incluir valores NULL en el conjunto de resultados y evitar que el operador UNION los elimine, podemos utilizar en su lugar el operador UNION ALL. Este operador combina los resultados de varias consultas SELECT, incluyendo todas las filas de cada conjunto de resultados, independientemente de si son duplicados o contienen valores NULL.

El operador INTERSECT

El operador INTERSECT sólo devuelve las filas que aparecen en ambos conjuntos de resultados. Piensa que se trata de encontrar a las personas que pertenecen a ambos grupos.

Utilicemos INTERSECT para consultar nuestras tablas anteriores. Por el bien del ejemplo, vamos a consultar sólo las columnas nombre y departamento:

-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;

Esta consulta selecciona las columnas name y department de las tablas de empleados y contratistas y devuelve sólo las filas que existen en ambas tablas en función de todas las columnas seleccionadas.

nombre

departamento

Carol

Ingeniería

El operador INTERSECT trata los valores NULL basándose en reglas de comparación estándar, considerando iguales los valores NULL al comparar las columnas correspondientes. También da como resultado un conjunto vacío cuando se trata de conjuntos de resultados vacíos.

En otras palabras, si un valor NULL está presente en un conjunto de resultados y la columna correspondiente del otro conjunto de resultados contiene un valor no NULL, las filas no se consideran iguales: no se incluirán en el resultado de la intersección.

Además, si uno de los conjuntos de resultados proporcionados al operador INTERSECT está vacío (es decir, no contiene filas), el resultado global de la operación INTERSECT también estará vacío, ya que no hay filas comunes entre un conjunto vacío y cualquier otro conjunto.

El operador EXCEPTAR (MENOS)

El operador EXCEPT recupera las filas presentes en el primer conjunto de resultados pero no en el segundo.

Por ejemplo, supongamos que ejecutamos la siguiente consulta:

-- Using EXCEPT to find employees who are not contractors
SELECT name, department, salary FROM employees
EXCEPT
SELECT name, department, salary FROM contractors;

Las columnas name, department y salary se seleccionan de la tabla employees y sólo devuelven las filas que no existen en la tabla contractors.

nombre

departamento

salario

Alice

Marketing

65000

Bob

Ventas

70000

John

RRHH

55000

El operador EXCEPT también sigue las reglas de comparación estándar para tratar valores NULL. Su comportamiento con conjuntos de resultados vacíos da como resultado un conjunto vacío si el primer conjunto de resultados está vacío o incluye todas las filas del primer conjunto de resultados si el segundo conjunto de resultados está vacío.

Set Operadores: Rendimiento y optimización

El impacto de los operadores de conjuntos en el rendimiento de las consultas en SQL puede variar en función de factores como el tamaño de los conjuntos de datos implicados, la complejidad de las consultas y el sistema de gestión de bases de datos (SGBD) utilizado.

Vamos a desglosar los factores clave y las estrategias de optimización.

Volumen de datos y complejidad de la consulta

Cuando se trabaja con grandes cantidades de datos, los operadores de conjuntos pueden afectar significativamente al rendimiento de la consulta, porque el tamaño de los conjuntos de resultados que hay que combinar, intersecar o comparar aumenta el tiempo de procesamiento necesario para realizar esa operación.

Las consultas complejas que contienen varias subconsultas, uniones u operadores de conjuntos pueden provocar una sobrecarga adicional de procesamiento y afectar al rendimiento de la consulta. Las operaciones encadenadas o las operaciones de conjunto anidadas podrían agravar aún más las consecuencias sobre el rendimiento.

Técnicas de indexación y optimización

Una indexación adecuada de las columnas implicadas en las operaciones de conjunto puede mejorar significativamente el rendimiento de las consultas. Los índices ayudan al motor de la base de datos a localizar y recuperar rápidamente las filas relevantes, reduciendo la necesidad de escanear toda la tabla y mejorando los tiempos de ejecución de las consultas.

Para mejorar el rendimiento de las consultas en las que intervienen operadores de conjuntos, los administradores y desarrolladores de bases de datos pueden utilizar técnicas de optimización como la reescritura de consultas, el análisis del plan de consultas y la optimización del esquema de la base de datos. También pueden utilizarse técnicas como la caché de consultas y las vistas materializadas para precalcular y almacenar los resultados de consultas complejas, reduciendo la sobrecarga computacional de las operaciones de conjunto.

Motor de base de datos y recursos de hardware

El rendimiento de las operaciones de conjunto puede variar en función del motor de base de datos subyacente y de sus capacidades de optimización. Los distintos SGBD pueden emplear diferentes estrategias de optimización y algoritmos para procesar las operaciones de conjunto, lo que provoca variaciones en el rendimiento.

La disponibilidad de recursos de hardware, como CPU, memoria y E/S de disco, también influye en el rendimiento de las consultas que implican operadores de conjuntos. Unos recursos de hardware adecuados pueden ayudar a mitigar los cuellos de botella en el rendimiento y garantizar una ejecución eficaz de las consultas.

Operadores de conjuntos en la práctica: Un estudio de caso

Los operadores de conjuntos no son sólo herramientas teóricas; tienen aplicaciones en el mundo real que pueden influir significativamente en las decisiones empresariales. Veamos un ejemplo simplificado de cómo una empresa puede utilizar operadores de conjuntos para segmentar su base de clientes para campañas de marketing dirigidas.

El escenario

Imagina una empresa que vende tanto en Internet como en tiendas físicas. Tienen dos conjuntos de datos distintos:

  1. Compras en línea: Identificación del cliente, historial de compras, datos demográficos y ubicación de los compradores online.
  2. Transacciones en tienda: Información similar para los clientes que compraron en persona.

Utilizar operadores de conjunto

Para obtener una imagen completa de todos los clientes, la empresa utilizaría primero UNION para combinar ambos conjuntos de datos en una sola tabla, eliminando cualquier duplicado. Esto les proporciona una visión unificada de toda su base de clientes.

A continuación, podrían utilizar INTERSECT para identificar a los clientes que han comprado tanto en Internet como en la tienda. Este segmento es especialmente valioso, ya que están muy comprometidos con la marca a través de múltiples canales.

Para encontrar oportunidades de promoción entre canales, la empresa podría utilizar EXCEPTO. Por ejemplo, SELECT * FROM online_purchases EXCEPT SELECT * FROM in_store_transactions encontraría clientes que sólo han comprado por Internet, pero no en tiendas. La empresa podría entonces dirigirse a estos clientes con promociones que les animaran a visitar un local físico.

Más allá de la segmentación

Con estos segmentos identificados, la empresa puede ir más allá, refinándolos en función de factores adicionales como los demográficos o el historial de compras. Este conocimiento granular de sus clientes les permite adaptar las campañas de marketing con mayor precisión.

Limitaciones y consideraciones

Al utilizar operadores de conjunto en SQL, es esencial tener en cuenta varias limitaciones y factores que pueden afectar al rendimiento de la consulta, a la precisión de los resultados y a la facilidad de uso en general.

Compatibilidad de tipos de datos y valores NULL

Las columnas correspondientes de los conjuntos de resultados deben tener tipos de datos compatibles. Garantiza la coherencia y compatibilidad de los datos entre los conjuntos de resultados para evitar errores y resultados inesperados.

Los operadores de conjunto pueden tratar los valores NULL de forma diferente según el SGBD y el operador concreto. Para evitar errores, los desarrolladores deben entender cómo se tratan los valores NULL.

Impacto en el rendimiento y filas duplicadas

Las operaciones de conjunto pueden afectar significativamente al rendimiento de las consultas, sobre todo cuando se trata de conjuntos de datos grandes o complejos. Factores como la indexación, la optimización de las consultas y los recursos de hardware pueden influir en el rendimiento. Las técnicas de optimización y las estrategias de ajuste del rendimiento son esenciales para mitigar los cuellos de botella en el rendimiento.

Por defecto, los operadores de conjunto eliminan las filas duplicadas del conjunto de resultados. Sin embargo, en algunos casos, puede ser necesario conservar filas duplicadas. Es importante comprender el comportamiento de los operadores de conjuntos con respecto a las filas duplicadas y utilizar las técnicas adecuadas para tratar los duplicados si es necesario.

Ordenación de los resultados y limitaciones de memoria

Los operadores de conjunto no garantizan el orden de los resultados en la salida final. Si es esencial preservar el orden de los resultados, pueden ser necesarias operaciones de ordenación adicionales después de aplicar los operadores de conjunto.

Las operaciones de Conjunto pueden consumir mucha memoria y recursos, sobre todo cuando se trata de grandes conjuntos de datos. Hay que tener en cuenta las restricciones de memoria y las limitaciones de recursos para evitar la degradación del rendimiento o la inestabilidad del sistema.

Complejidad, mantenibilidad y compatibilidad entre SGBD

Las consultas complejas que implican varios operadores de conjuntos, subconsultas y uniones pueden ser difíciles de entender, mantener y depurar. Para mejorar la legibilidad y la capacidad de mantenimiento, las consultas deben ser concisas, estar bien documentadas y ser modulares.

Los operadores de conjunto pueden tener variaciones de sintaxis y comportamiento en los distintos sistemas gestores de bases de datos (SGBD). Conocer estas diferencias es vital a la hora de escribir consultas SQL para la compatibilidad entre plataformas.

Conclusión

En resumen, los operadores de conjunto son componentes básicos de SQL e indispensables para una manipulación eficaz de los datos.

Abarcan funciones como UNIÓN, INTERSECCIÓN y EXCEPCIÓN, y nos proporcionan capacidades versátiles de análisis de datos.

Si quieres saber más, consulta este curso sobre Cómo unir datos en SQL.

Preguntas frecuentes sobre operadores SQL

¿Cuál es la diferencia entre UNION ALL y UNION?

UNION ALL incluye todas las filas de ambas consultas, aunque haya duplicados. UNION elimina las filas duplicadas.

¿En qué se diferencia UNION de JOIN en SQL?

UNION combina los resultados de las consultas verticalmente, añadiendo filas de una consulta a otra. JOIN combina las tablas horizontalmente, haciendo coincidir las filas en función de una columna relacionada y creando un conjunto de resultados más amplio.

¿Existen consideraciones de rendimiento cuando se utilizan operaciones de conjunto?

Las operaciones con conjuntos pueden ser costosas desde el punto de vista informático, sobre todo cuando se trata de grandes conjuntos de datos. Es importante optimizar las consultas individuales y utilizar índices siempre que sea posible para mejorar el rendimiento.

Temas

¡Más información sobre SQL!

curso

Introduction to SQL

2 hr
741.3K
Learn how to create and query relational databases using SQL in just two hours.
Ver detallesRight Arrow
Comienza El Curso
Ver másRight Arrow
Relacionado

tutorial

Seleccionar varias columnas en SQL

Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
DataCamp Team's photo

DataCamp Team

3 min

tutorial

Cómo utilizar GROUP BY y HAVING en SQL

Una guía intuitiva para descubrir los dos comandos SQL más populares para agregar filas de tu conjunto de datos
Eugenia Anello's photo

Eugenia Anello

6 min

tutorial

Ejemplos y tutoriales de consultas SQL

Si quiere iniciarse en SQL, nosotros le ayudamos. En este tutorial de SQL, le presentaremos las consultas SQL, una potente herramienta que nos permite trabajar con los datos almacenados en una base de datos. Verá cómo escribir consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Tutorial de Python sobre conjuntos y teoría de conjuntos

Aprende sobre los conjuntos en Python: qué son, cómo crearlos, cuándo usarlos, funciones incorporadas y su relación con las operaciones de la teoría de conjuntos.
DataCamp Team's photo

DataCamp Team

13 min

tutorial

Función SQL COALESCE

COALESCE() es una de las funciones más útiles de SQL. Lee este tutorial para aprender a dominarlo.
Travis Tang 's photo

Travis Tang

4 min

tutorial

Cómo utilizar un alias SQL para simplificar tus consultas

Explora cómo el uso de un alias SQL simplifica tanto los nombres de las columnas como los de las tablas. Aprende por qué utilizar un alias SQL es clave para mejorar la legibilidad y gestionar uniones complejas.
Allan Ouko's photo

Allan Ouko

9 min

See MoreSee More