Course
As operações de conjunto formam a base do SQL e nos permitem combinar, comparar e filtrar dados de várias fontes.
Essas operações são indispensáveis para tarefas que vão desde a integração e limpeza de dados até análises e relatórios avançados.
Neste tutorial, você aprenderá o que são operadores de conjunto, como eles são usados no SQL, suas aplicações práticas e muito mais!
Se você está procurando um recurso completo de aprendizado de SQL, confira este programa de habilidades SQL Fundamentals de sete cursos.
Para você que está com pressa, vamos começar com uma resposta bem curta sobre o que são operações de conjunto no SQL.
Resposta curta: O que são operações de conjunto no SQL?
As operações de conjunto no SQL são técnicas para combinar ou comparar os resultados de dois ou mais comandos SELECT. Elas funcionam como operações de conjuntos matemáticos, permitindo que você encontre a união, a interseção ou a diferença entre as linhas retornadas por nossas consultas. Isso os torna indispensáveis ao analisar dados de várias fontes ou perspectivas.
Aqui está uma visão geral rápida das operações do conjunto principal:
- UNIÃO: Mescla todas as linhas exclusivas de dois ou mais comandos SELECT, eliminando as duplicatas.
- UNION ALL: Mescla todas as linhas de dois ou mais comandos SELECT, mantendo as duplicatas.
- INTERSECT: Retorna apenas as linhas que aparecem em ambas as instruções SELECT.
- EXCETO: Retorna as linhas do primeiro comando SELECT que não aparecem no segundo.
Entendendo os operadores de conjunto
Os operadores de conjunto são comandos ou símbolos especializados usados para executar operações nos conjuntos de resultados de várias consultas SELECT. Eles nos permitem realizar tarefas como encontrar a união (todas as linhas), a interseção (linhas compartilhadas) e a diferença (linhas exclusivas) entre conjuntos de dados diferentes.
Os operadores de conjunto são ferramentas essenciais para a manipulação e análise de dados no SQL. Eles oferecem um meio eficiente de consultar e processar dados de bancos de dados relacionais.
Comparação com operações de álgebra relacional
A álgebra relacional é uma estrutura teórica que fornece uma base para a compreensão de consultas a bancos de dados. Ele oferece operações abstratas como projeção, seleção e união, baseadas em princípios matemáticos e independentes de sistemas de banco de dados específicos. Pense nisso como a lógica "por trás das cenas" que alimenta nossas interações com o banco de dados.
Os operadores de conjunto no SQL oferecem uma implementação prática desses conceitos em um ambiente de banco de dados. Eles nos permitem realizar operações de conjunto como união, interseção e diferença diretamente nos conjuntos de resultados das consultas SQL.
Embora a álgebra relacional forneça uma base formal para operações de banco de dados, os operadores de conjunto no SQL oferecem uma interface padronizada e fácil de usar para tarefas de manipulação de dados.
Compreender a relação entre os operadores de conjunto e as operações de álgebra relacional fornece insights sobre os fundamentos teóricos do SQL. Ele permite que os usuários aproveitem esses conceitos de forma eficaz em tarefas de consulta e análise de banco de dados.
Tipos de operadores de conjunto no SQL
Há três operadores de conjunto primários no SQL:
- UNIÃO
- INTERSECÇÃO
- EXCEPT (ou MINUS em alguns dialetos)
Esses operadores correspondem matematicamente aos conceitos de união, interseção e diferença de conjuntos.
Vamos nos aprofundar em mais detalhes sobre cada um deles.
O operador UNION
O operador UNION combina os resultados de duas ou mais consultas SELECT em um único conjunto de resultados, removendo as linhas duplicadas por padrão.
Por exemplo, suponha que você tenha duas tabelas, employees
e contractors
, cada uma com colunas semelhantes, como contractors
, department
e salary
. Para fins de aprendizado, vamos considerar essas duas tabelas fictícias:
nome |
departamento |
salário |
Alice |
Marketing |
65000 |
Bob |
Vendas |
70000 |
Carol |
Engenharia |
80000 |
John |
HR |
55000 |
Funcionários
nome |
departamento |
salário |
David |
Marketing |
60000 |
Eva |
Vendas |
68000 |
Carol |
Engenharia |
75000 |
Empreiteiros
Você pode combinar os resultados de ambas as tabelas usando o seguinte comando:
-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;
Essa consulta seleciona as colunas name
, department
e salary
das tabelas employees
e contractors
e as combina em um único conjunto de resultados. O operador UNION remove automaticamente as linhas duplicadas do conjunto de resultados finais.
nome |
departamento |
salário |
Alice |
Marketing |
65000 |
Bob |
Vendas |
70000 |
Carol |
Engenharia |
80000 |
John |
HR |
55000 |
David |
Marketing |
60000 |
Eva |
Vendas |
68000 |
Observe que Carol, que aparece em ambas as tabelas, está listada apenas uma vez no resultado. Se quiséssemos manter as duas instâncias de Carol (com seus salários diferentes), usaríamos UNION ALL.
É importante lembrar que o operador UNION não remove valores NULL. Se uma coluna contiver valores NULL em um conjunto de resultados e valores não NULL na coluna correspondente de outro conjunto de resultados, os valores NULL serão mantidos no conjunto de resultados final produzido pelo operador UNION.
Se quisermos incluir valores NULL no conjunto de resultados e impedir sua remoção pelo operador UNION, poderemos usar o operador UNION ALL. Esse operador combina os resultados de várias consultas SELECT, incluindo todas as linhas de cada conjunto de resultados, independentemente de serem duplicatas ou conterem valores NULL.
O operador INTERSECT
O operador INTERSECT retorna somente as linhas que aparecem em ambos os conjuntos de resultados. Pense nisso como encontrar as pessoas que pertencem a ambos os grupos.
Vamos usar o INTERSECT para consultar nossas tabelas acima. Para fins de exemplo, vamos consultar apenas as colunas nome e departamento:
-- Using INTERSECT to find common employees
SELECT name, department FROM employees
INTERSECT
SELECT name, department FROM contractors;
Essa consulta seleciona as colunas name
e department
das tabelas de funcionários e contratados e retorna apenas as linhas existentes em ambas as tabelas com base em todas as colunas selecionadas.
nome |
departamento |
Carol |
Engenharia |
O operador INTERSECT trata os valores NULL com base nas regras de comparação padrão, considerando os valores NULL iguais ao comparar as colunas correspondentes. Isso também resulta em um conjunto vazio ao lidar com conjuntos de resultados vazios.
Em outras palavras, se um valor NULL estiver presente em um conjunto de resultados e a coluna correspondente no outro conjunto de resultados contiver um valor não NULL, as linhas não serão consideradas iguais - elas não serão incluídas no resultado da interseção.
Além disso, se um dos conjuntos de resultados fornecidos ao operador INTERSECT estiver vazio (ou seja, não contiver linhas), o resultado geral da operação INTERSECT também estará vazio, pois não há linhas comuns entre um conjunto vazio e qualquer outro conjunto.
O operador EXCEPT (MINUS)
O operador EXCEPT recupera as linhas presentes no primeiro conjunto de resultados, mas não no segundo.
Por exemplo, digamos que você execute a seguinte consulta:
-- Using EXCEPT to find employees who are not contractors
SELECT name, department, salary FROM employees
EXCEPT
SELECT name, department, salary FROM contractors;
As colunas name
, department
e salary
são selecionadas na tabela employees
e retornam apenas as linhas que não existem na tabela contractors
.
nome |
departamento |
salário |
Alice |
Marketing |
65000 |
Bob |
Vendas |
70000 |
John |
HR |
55000 |
O operador EXCEPT também segue as regras de comparação padrão para lidar com valores NULL. Seu comportamento com conjuntos de resultados vazios resulta em um conjunto vazio se o primeiro conjunto de resultados estiver vazio ou inclui todas as linhas do primeiro conjunto de resultados se o segundo conjunto de resultados estiver vazio.
Operadores de conjunto: Desempenho e otimização
O impacto dos operadores de conjunto no desempenho das consultas em SQL pode variar dependendo de fatores como o tamanho dos conjuntos de dados envolvidos, a complexidade das consultas e o sistema de gerenciamento de banco de dados (DBMS) usado.
Vamos detalhar os principais fatores e estratégias de otimização.
Volume de dados e complexidade da consulta
Ao trabalhar com grandes quantidades de dados, os operadores de conjunto podem afetar significativamente o desempenho da consulta porque o tamanho dos conjuntos de resultados que precisam ser combinados, cruzados ou comparados aumenta o tempo de processamento necessário para realizar essa operação.
Consultas complexas que contêm várias subconsultas, uniões ou operadores de conjunto podem resultar em uma sobrecarga de processamento adicional e afetar o desempenho da consulta. Operações encadeadas ou operações de conjuntos aninhados podem agravar ainda mais as consequências do desempenho.
Técnicas de indexação e otimização
A indexação adequada das colunas envolvidas nas operações de conjunto pode melhorar significativamente o desempenho da consulta. Os índices ajudam o mecanismo de banco de dados a localizar e recuperar rapidamente as linhas relevantes, reduzindo a necessidade de varreduras de tabelas completas e melhorando os tempos de execução das consultas.
Para melhorar o desempenho das consultas que envolvem operadores de conjunto, os administradores e desenvolvedores de bancos de dados podem utilizar técnicas de otimização como reescrita de consultas, análise do plano de consultas e otimização do esquema do banco de dados. Técnicas como cache de consultas e visualizações materializadas também podem ser usadas para pré-computar e armazenar os resultados de consultas complexas, reduzindo a sobrecarga computacional das operações de conjunto.
Mecanismo de banco de dados e recursos de hardware
O desempenho das operações de conjunto pode variar dependendo do mecanismo de banco de dados subjacente e de seus recursos de otimização. Diferentes DBMSs podem empregar diferentes estratégias e algoritmos de otimização para processar operações de conjunto, o que leva a variações no desempenho.
A disponibilidade de recursos de hardware, como CPU, memória e E/S de disco, também influencia o desempenho das consultas que envolvem operadores de conjunto. Recursos de hardware adequados podem ajudar a reduzir os gargalos de desempenho e garantir uma execução eficiente das consultas.
Operadores de conjunto na prática: Um estudo de caso
Os operadores de conjunto não são apenas ferramentas teóricas; eles têm aplicações no mundo real que podem afetar significativamente as decisões de negócios. Vamos ver um exemplo simplificado de como uma empresa pode usar operadores de conjunto para segmentar sua base de clientes para campanhas de marketing direcionadas.
O cenário
Imagine uma empresa que vende tanto on-line quanto em lojas físicas. Eles têm dois conjuntos de dados separados:
- Compras on-line: ID do cliente, histórico de compras, dados demográficos e localização para compradores on-line.
- Transações na loja: Informações semelhantes para clientes que fizeram compras pessoalmente.
Usando operadores de conjunto
Para obter uma imagem completa de todos os clientes, a empresa primeiro usaria o UNION para combinar os dois conjuntos de dados em uma única tabela, removendo as duplicatas. Isso lhes dá uma visão unificada de toda a base de clientes.
Em seguida, eles poderiam usar o INTERSECT para identificar os clientes que fizeram compras on-line e na loja. Esse segmento é particularmente valioso, pois eles estão altamente envolvidos com a marca em vários canais.
Para encontrar oportunidades de promoção entre canais, a empresa poderia usar EXCETO. Por exemplo, o site SELECT * FROM online_purchases EXCEPT SELECT * FROM in_store_transactions
encontraria clientes que só fizeram compras on-line, mas não em lojas. A empresa poderia, então, direcionar esses clientes com promoções que os incentivassem a visitar um local físico.
Além da segmentação
Com esses segmentos identificados, a empresa pode ir além, refinando-os com base em fatores adicionais, como dados demográficos ou histórico de compras. Essa compreensão granular dos clientes permite que eles personalizem as campanhas de marketing com maior precisão.
Limitações e considerações
Ao usar operadores de conjunto no SQL, é essencial considerar várias limitações e fatores que podem afetar o desempenho da consulta, a precisão dos resultados e a usabilidade geral.
Compatibilidade de tipos de dados e valores NULL
As colunas correspondentes nos conjuntos de resultados devem ter tipos de dados compatíveis. Garanta a consistência e a compatibilidade dos dados entre os conjuntos de resultados para evitar erros e resultados inesperados.
Os operadores de conjunto podem tratar os valores NULL de forma diferente, dependendo do DBMS e do operador específico. Para evitar erros, os desenvolvedores devem entender como os valores NULL são tratados.
Impacto no desempenho e linhas duplicadas
As operações de conjunto podem afetar significativamente o desempenho da consulta, especialmente ao lidar com conjuntos de dados grandes ou complexos. Fatores como indexação, otimização de consultas e recursos de hardware podem influenciar o desempenho. As técnicas de otimização e as estratégias de ajuste de desempenho são essenciais para atenuar os gargalos de desempenho.
Por padrão, os operadores de conjunto removem as linhas duplicadas do conjunto de resultados. No entanto, em alguns casos, pode ser necessário manter as linhas duplicadas. É importante que você entenda o comportamento dos operadores de conjunto em relação às linhas duplicadas e use as técnicas apropriadas para lidar com as duplicatas, se necessário.
Ordenação dos resultados e restrições de memória
Os operadores de conjunto não garantem a ordem dos resultados na saída final. Se a preservação da ordem dos resultados for essencial, poderão ser necessárias operações de classificação adicionais após a aplicação dos operadores de conjunto.
As operações de conjunto podem consumir memória e recursos significativos, principalmente quando você lida com grandes conjuntos de dados. As restrições de memória e as limitações de recursos devem ser consideradas para evitar a degradação do desempenho ou a instabilidade do sistema.
Complexidade, capacidade de manutenção e compatibilidade entre DBMS
Consultas complexas que envolvem vários operadores de conjunto, subconsultas e uniões podem ser difíceis de entender, manter e depurar. Para melhorar a legibilidade e a manutenção, as consultas devem ser concisas, bem documentadas e modulares.
Os operadores de conjunto podem ter variações de sintaxe e comportamento em diferentes sistemas de gerenciamento de banco de dados (DBMSs). Conhecer essas diferenças é fundamental quando você escreve consultas SQL para compatibilidade entre plataformas.
Conclusão
Em resumo, os operadores de conjunto são componentes essenciais do SQL e indispensáveis para a manipulação eficiente de dados.
Elas abrangem funções como UNION, INTERSECT e EXCEPT e nos capacitam com recursos versáteis de análise de dados.
Se você quiser saber mais, confira este curso sobre como unir dados no SQL.
Perguntas frequentes sobre operadores SQL
Qual é a diferença entre UNION ALL e UNION?
UNION ALL
inclui todas as linhas de ambas as consultas, mesmo que haja duplicatas. UNION
elimina as linhas duplicadas.
Qual é a diferença entre UNION e JOIN no SQL?
UNION
combina os resultados das consultas verticalmente, anexando linhas de uma consulta a outra. JOIN
combina tabelas horizontalmente, combinando linhas com base em uma coluna relacionada e criando um conjunto de resultados mais amplo.
Há alguma consideração de desempenho ao usar operações de conjunto?
As operações de conjunto podem ser computacionalmente caras, especialmente quando você lida com grandes conjuntos de dados. É importante otimizar as consultas individuais e usar índices sempre que possível para melhorar o desempenho.
Saiba mais sobre o SQL!
Course
Intermediate SQL
Course
Applying SQL to Real-World Problems
blog
O que é SQL? - A linguagem essencial para o gerenciamento de bancos de dados
Summer Worsley
16 min
tutorial
SELEÇÃO de várias colunas no SQL
DataCamp Team
3 min
tutorial
Como usar GROUP BY e HAVING no SQL
Eugenia Anello
6 min
tutorial
Exemplos e tutoriais de consultas SQL
tutorial
Introdução aos acionadores SQL: Um guia para desenvolvedores
Oluseye Jeremiah
13 min
tutorial