Buscar

União de conjuntos em SQL - Banco de Dados

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 28 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

União de conjuntos em SQL	
APRESENTAÇÃO
A operação de união em um banco de dados corresponde à junção de elementos de duas ou mais 
consultas. O resultado é um novo conjunto de elementos que contém todos os elementos 
pertencentes a pelo menos uma das consultas utilizadas. Também é possível dizer que a união 
será formada por todos os elementos da consulta A ou da consulta B ou de ambas.
Nesta Unidade de Aprendizagem, você verá diferentes exemplos da utilização da operação de 
união, tanto em álgebra relacional quanto em SQL (Structured Query Language). Além disso, 
você verá como utilizar o gerenciador de banco de dados PostgreSQL para exemplificar o uso 
real das cláusulas UNION e UNION ALL. Por fim, irá estudar o plano de execução de um query 
com o intuito de entender o desempenho dessas operações.
Bons estudos.
Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados:
Descrever a operação de união em álgebra relacional.•
Comparar as cláusulas UNION e UNION ALL em SQL.•
Implementar a operação de união em SQL.•
DESAFIO
A base de dados do Sistema de Avaliação da Educação Básica (SAEB) contém diversas 
informações sobre alunos e escolas do Brasil. Essas informações são utilizadas para avaliar a 
educação brasileira.
 
Acompanhe a seguinte situação: 
 
INFOGRÁFICO
A linguagem SQL implementa a operação de união de conjuntos de duas maneiras. A primeira, 
utilizando a cláusula UNION ALL, une duas ou mais consultas mantendo elementos duplicados, 
como, por exemplo, duas pessoas com o mesmo nome. A segunda maneira é utilizando a 
cláusula UNION, nesta, a diferença é que elementos duplicados são removidos, mantendo-os 
apenas uma vez.
 
Veja, no Infográfico a seguir, como essas operações funcionam no SQL.
 
CONTEÚDO DO LIVRO
Um banco de dados é resumidamente um conjunto de arquivos organizados de maneira a 
facilitar buscas, análise de dados e armazenamento. Estas operações se tornam menos 
complicadas no momento em que são utilizadas operações sobre conjuntos, como a união, a 
interseção e a diferença. A união pode ser utilizada, por exemplo, para unir duas listas de 
cidades ou de nomes.
 
No capítulo União de conjuntos em SQL, da obra Consultas em banco de dados, você irá 
estudar a operação de união em álgebra relacional. Após, duas cláusulas SQL serão 
apresentadas: a UNION e a UNION ALL. A primeira executa a operação de união sobre 
conjuntos, eliminando as linhas duplicadas. A segunda realiza a mesma operação mantendo os 
duplicados. Além disso, você irá estudar o uso dessas operações na prática em diferentes bases 
de dados de um SGDB (Sistema de Gerenciamento de Banco de Dados) mundialmente 
utilizado, o PostgreSQL.
 
Boa leitura.
CONSULTAS EM 
BANCO DE DADOS
Matheus da Silva Serpa
União de conjuntos em SQL
Objetivos de aprendizagem
Ao final deste texto, você deve apresentar os seguintes aprendizados:
 � Descrever a operação de união em álgebra relacional.
 � Comparar as cláusulas UNION e UNION ALL em SQL.
 � Implementar a operação de união em SQL.
Introdução
A álgebra relacional é uma linguagem de consulta procedural que recebe 
um conjunto de relações como entrada e retorna um novo conjunto como 
saída. Um conjunto de operadores é definido e aplicado a tais conjuntos 
de relações com o objetivo de produzir os resultados buscados.
A operação de união compreende uma dessas operações, que, 
resumidamente, tem o comportamento equivalente ao da operação de 
união da teoria de conjuntos. Uma das únicas restrições para o uso dessa 
operação reside no fato de que, para a união de duas relações, ambas 
devem ter o mesmo conjunto de atributos ou colunas da tabela.
Neste capítulo, você conhecerá mais sobre a operação de união 
aplicada na álgebra relacional, compreenderá na prática o uso das 
cláusulas UNION e UNION ALL na linguagem SQL (Structured Query 
Language), e, por fim, estudará a implementação da operação de união 
em PostgreSQL.
1 Operação de união na álgebra relacional
Entre as operações básicas da álgebra relacional, podemos citar as operações 
sobre conjuntos, como a união, que, representada por U, retorna uma relação 
de resposta contendo todas as tuplas que ocorrem, por exemplo, na instância 
de uma relação A ou em uma relação B. Na Figura 1, podemos ver o diagrama 
de Venn dessa operação (MENEZES, 2013), em que os conjuntos A e B foram 
unidos em um novo conjunto resposta: como observamos, as tuplas também 
podem existir em ambas as instâncias, parte representada pela região mais 
escura no centro. E vale ressaltar um detalhe importante — na álgebra rela-
cional, os atributos de cada relação devem ser compatíveis, o que, segundo 
Ramakrishnan e Gehrke (2008, p. 112), acontece se as duas instâncias da 
relação têm o mesmo número de campos e se os campos da esquerda para a 
direita apresentam o mesmo domínio.
Figura 1. Representação gráfica da 
união dos conjuntos A e B utilizando o 
diagrama de Venn.
Antes de observarmos alguns exemplos, definiremos duas tabelas: a tabela 
aluno, com 4 alunos, contendo suas informações de nome, telefone e idade:
Nome Telefone Idade
Anthony Thomas Theo da Costa (51) 995371754 29
Kaique Daniel Melo (51) 983266773 24
Liz Eliane Antônia Aparício (51) 984385050 21
Mariana Evelyn Porto (51) 993324695 17
Yago Ricardo Nascimento (51) 994909159 25
União de conjuntos em SQL2
E a tabela funcionario, que também apresenta nome, telefone e idade.
Nome Telefone Idade
Andrea Sebastiana Mirella Moreira (51) 989307088 47
Anthony Thomas Theo da Costa (51) 995371754 29
Matheus da Silva Serpa (51) 999764528 25
Rita Silvana Rocha (51) 993946251 32
Outro ponto importante é que a operação de união em álgebra relacional 
não leva em consideração o nome dos atributos, e sim seus tipos de dados. 
Na literatura, considera-se que o resultado da operação de união (U) herda os 
nomes dos atributos da primeira tabela utilizada no operador. Como exemplo, 
vamos efetuar a operação aluno U funcionario, cujo resultado é ilustrado 
na tabela a seguir.
Nome Telefone Idade
Anthony Thomas Theo da Costa (51) 995371754 29
Kaique Daniel Melo (51) 983266773 24
Liz Eliane Antônia Aparício (51) 984385050 21
Mariana Evelyn Porto (51) 993324695 17
Yago Ricardo Nascimento (51) 994909159 25
Andrea Sebastiana Mirella Moreira (51) 989307088 47
Matheus da Silva Serpa (51) 999764528 25
Rita Silvana Rocha (51) 993946251 32
Nessa tabela, os campos são listados na mesma ordem como acontece na 
tabela aluno. Em geral, os campos da tabela que é a segunda no operador 
de união (nesse caso, a tabela funcionario) podem ter nomes de campos 
diferentes. Aqui, o importante é o tipo de cada atributo, e não o nome deles. 
Como resultado da operação, temos todas as tuplas que aparecem em alguma 
das tabelas. Caso haja repetições, a operação de união retorna apenas uma 
instância desta.
3União de conjuntos em SQL
Para aprender mais sobre álgebra relacional, incluindo a operação de união, pesquise 
na internet o artigo “Álgebra Relacional – Parte I”, de autoria de Ricardo Rezende.
Um segundo exemplo que podemos analisar refere-se ao uso da união em 
conjunto com outros operadores de álgebra relacional. Por exemplo, dada 
uma lista de funcionários com seus respectivos departamentos e seus super-
visores, desejamos retornar a quantidade de funcionários que trabalham no 
departamento 5 ou que supervisionam alguém que trabalha no departamento 5. 
Para tanto, podemos utilizar a operação de união como no exemplo a seguir.
Operações de álgebra relacional
funcionarios_dep5 ← σcodigo_departamento=5(funcionarios)
resultado1 ← πcodigo_funcionario(funcionarios_dep5)
resultado2 ← πcodigo_supervisor(funcionarios_dep5)
resultado ← resultado1 ∪ resultado2
Primeiro, utilizando o operador de seleção, armazenamos as tuplas de 
todos funcionários que pertencem ao departamento de código igual a 5. 
Depois, utilizando a variável na qual armazenamos a lista de funcionários, 
retornamos a coluna com o códigode todos funcionários e a armazenamos 
em resultado1. Em seguida, armazenamos a coluna que tem o código de 
todos supervisores desses funcionários em resultado2. Por fim, utilizando 
o operador de união, retornamos todos códigos de funcionários que ou são do 
departamento 5 ou supervisionam alguém desse departamento.
No que diz a respeito à cardinalidade do resultado da operação de união, 
a operação R1 U R2 retorna todas as linhas da relação 1 seguida de todas 
linhas da relação 2, eliminando as linhas duplicadas (ou seja, linhas comuns 
aparecem apenas uma vez). No caso das colunas, o número de colunas retornado 
é o mesmo de ambas as relações. 
União de conjuntos em SQL4
Por fim, como já mencionado, duas relações são incompatíveis se o número 
e o domínio dos atributos são diferentes. Por exemplo, uma relação aluno 
com id, nome, idade e curso é compatível com uma relação professor 
com id, nome, idade e setor, mas não com uma relação funcionario 
com id, nome, setor e idade. Vale lembrar ainda que a operação de união 
é comutativa, ou seja, R1 U R2 é equivalente a R2 U R1.
Leia mais sobre o operador de união no capítulo 5 do livro “Sistemas de Gerenciamento 
de Bancos de Dados”, de Raghu Ramakrishnan e Johannes Gehrke.
2 Cláusulas UNION e UNION ALL em SQL
A linguagem de consulta estruturada SQL é utilizada principalmente para 
realização de consultas em bancos de dados, responsável pela implementação 
da maior parte das operações de álgebra relacional. A operação de união de 
conjuntos é implementada por meio de duas cláusulas condicionais, a UNION 
e a UNION ALL. 
Já surgiram diversos casos em que se torna necessário combinar dois coman-
dos SELECT para gerar um resultado para uma aplicação ou um usuário final 
— para isso, utilizamos a união. Como exemplo do uso de UNION, podemos 
assumir que existem duas tabelas: aquela que armazena todos professores e a 
que armazena todos os alunos de uma universidade, por exemplo, as tabelas 
aluno e funcionario, definidas anteriormente. Para mostrarmos o nome 
e a idade de todos os professores e alunos sem repetição, podemos utilizar 
o seguinte comando SQL:
SELECT nome, idade FROM professor
 UNION
SELECT nome, idade FROM aluno
5União de conjuntos em SQL
Esse comando resultará em uma tabela como a do quadro do resultado da 
operação aluno U funcionario apresentada anteriormente, que mostra o 
resultado da operação de união de conjuntos, ainda que apenas com as colunas 
nome e idade. Por padrão, as linhas duplicadas são removidas dos resultados 
das instruções SQL com a palavra-chave UNION (MANNINO, 2008), ou seja, 
a cláusula UNION combina duas consultas SQL sem a repetição de dados, caso 
ocorra. Para manter as repetições, se elas existirem, adicionamos o comando 
ALL, resultando em UNION ALL.
No exemplo a seguir, assumiremos a existência de uma tabela inscritos, 
que apresenta como atributos o codigo_canal, o nome e o sobrenome. 
Assim, a consulta utilizará o comando UNION ALL para retornar uma lista 
de inscritos em dois canais do YouTube diferentes. O resultado será utilizado 
para um sorteio, em que a pessoa inscrita nos dois canais terá mais vantagem, 
pois será listada duas vezes. Essa operação executará mais rapidamente em 
comparação a uma que utilize dois OR na cláusula WHERE, resultado que 
explicaremos logo a seguir:
SELECT codigo_canal, nome, sobrenome FROM inscritos
 WHERE codigo_canal = 14
 UNION ALL
SELECT codigo_canal, nome, sobrenome FROM inscritos 
 WHERE codigo_canal = 18
Um exemplo de resultado dessa consulta está no quadro a seguir.
codigo_canal nome sobrenome
14 Letícia Correia
14 Julia Castro
14 Matheus Serpa
14 Gustavo Dias
18 Luis Costa
18 Mariana Cavalcanti
18 Gustavo Dias
18 Diego Goncalves
18 Matheus Serpa
União de conjuntos em SQL6
Na tabela de resultado da consulta, temos que os usuários Gustavo Dias 
e Matheus Serpa seguem os dois canais e, portanto, têm mais chances de 
ganhar o sorteio que será realizado pelo aplicativo. Caso o operador UNION 
fosse utilizado no lugar de UNION ALL, esse usuário apareceria apenas 
uma vez.
Sempre que possível, utilize a cláusula UNION ou UNION ALL no lugar de uma cláusula 
WHERE com múltiplos OR. Mesmo que isso pareça contraintuitivo, o desempenho de 
duas consultas SELECT com UNION ALL é maior do que a utilização de vários OR 
no mesmo WHERE.
Para aprender mais sobre otimização de consultas SQL, pesquise na internet o artigo 
“Otimização de Consultas SQL”, de Fábio Sarturi Prass. 
No quesito desempenho, diversos autores, como Price (2009), ressaltam 
que o desempenho do UNION ALL é maior que o do UNION; então, quando 
está claro que não existe a possibilidade de repetições nos dados, devemos 
utilizar o operador UNION ALL, pois este não executa o comando SELECT 
DISTINCT no final, o qual causa lentidão mesmo quando não há repetições. 
Outro detalhe importante reside no fato de que não faz sentido utilizar o 
operador UNION quando alguma das consultas utilizar o comando SELECT 
DISTINCT, já que, nesse caso, o resultado será exatamente o mesmo, e, no 
nível de SQL, a operação será executada duas vezes desnecessariamente. 
Confira um exemplo que mostra na prática a otimização de desempenho utilizada 
por especialistas em banco de dados SQL: a utilização da cláusula UNION ALL em 
substituição de cláusulas OR. 
Por exemplo, a consulta
SELECT email FROM funcionarios WHERE cidade = "Porto Ale-
gre" or disp_viajar = "sim"
7União de conjuntos em SQL
tem por objetivo listar o e-mail de todos os funcionários que ou são de Porto Alegre ou 
têm disponibilidade para viajar. Essa operação pode ser reescrita utilizando o operador 
UNION ALL, como a seguir:
SELECT email FROM funcionarios WHERE cidade = "Porto Alegre"
 UNION ALL
SELECT email FROM funcionarios WHERE disp_viajar = "sim"
Ambas as consultas retornarão o mesmo resultado, entretanto, utilizando UNION 
ALL, caso exista um índice armazenado para cidade, e não para disp_viajar, na 
primeira consulta a linha da tabela será verificada, enquanto, na segunda, o índice será 
utilizado, motivo pelo qual a consulta será executada mais rapidamente.
3 Operação de união no PostgreSQL
O PostgreSQL é um poderoso sistema gerenciador de banco de dados objeto 
relacional (SGDB) para aplicações modernas (CARVALHO, 2017), além de 
multiplataforma e de código aberto. Nos exemplos a seguir, utilizaremos os 
comandos SQL UNION e UNION ALL para efetuar consultas no banco de 
dados PostgreSQL.
O primeiro passo será criar algumas tabelas para efetuar as consultas. 
Criaremos a tabela cliente, com código, nome da empresa, nome do cliente 
e cidade, e uma tabela fornecedor, com código, nome da empresa e cidade. 
Os seguintes comandos realizam essa tarefa:
CREATE TABLE cliente(
 cod_cliente serial PRIMARY KEY,
 nome_empresa VARCHAR (200) NOT NULL,
 nome_cliente VARCHAR (100) NOT NULL,
 cidade VARCHAR (100) NOT NULL
);
CREATE TABLE fornecedor(
 cod_fornecedor serial PRIMARY KEY,
 nome_empresa VARCHAR (200) NOT NULL,
 cidade VARCHAR (100) NOT NULL
);
União de conjuntos em SQL8
Após a criação das tabelas, inseriremos 6 clientes na tabela. Uma vez que 
colocamos o código do cliente como serial, o PostgreSQL o gerará automati-
camente. Nesse sentido, utilizamos o comando INSERT INTO para inserir 
o nome da empresa, o nome do cliente e a cidade. O comando VALUES indica 
que um conjunto de valores será indicado a seguir. Depois, empregamos o 
mesmo comando para inserir 7 fornecedores. O código também é gerado de 
forma automática pelo SGDB, enquanto os outros dados são inseridos pelo 
INSERT INTO. O comando SQL utilizado foi:
INSERT INTO
 cliente (nome_empresa, nome_cliente, cidade)
VALUES
 ('Ponto Shop', 'Renata Rezende', 'Porto Alegre'),
 ('Sarah Estética Capilar', 'Cláudia Lima', 'Porto Alegre'),
 ('Segredos de Minas', 'André Drumond', 'Alegrete'),
 ('Sabor Lusitano', 'Juan das Neves', 'Rio de Janeiro'),
 ('Banco Verde', 'Marcos de Paula', 'Rio de Janeiro'),('Pais e Filhos', 'Leonardo Duarte', 'São Paulo');
INSERT INTO
 fornecedor (nome_empresa, cidade)
VALUES
 ('Reffatti', 'São Paulo'),
 ('Soberania das Cadeiras', 'Belo Horizonte'),
 ('Armazém das Cadeiras', 'São Paulo'),
 ('Cia das Cadeiras', 'Rio de Janeiro'),
 ('mT Mesas e Cadeiras', 'Porto Alegre'),
 ('Dendezeiros Cadeiras', 'Salvador'),
 ('Point Móveis para Escritório', 'Porto Alegre');
Agora, dispomos de um banco de dados com duas tabelas que já têm dados. 
Em nosso primeiro exemplo, desejamos listar as cidades nas quais dispomos 
de clientes ou fornecedores, sem repeti-las:
SELECT cidade FROM cliente
 UNION
SELECT cidade FROM fornecedor
 ORDER BY cidade
9União de conjuntos em SQL
Este comando trará como resultado:
cidade
1 Alegrete
2 Belo Horizonte
3 Porto Alegre
4 Rio de Janeiro
5 Salvador
6 São Paulo
Para tanto, podemos utilizar a cláusula UNION: primeiro, selecionamos a 
lista de cidades da tabela cliente e, depois, as cidades dos fornecedores; 
por fim, com UNION, unimos ambos resultados, removemos os duplicados 
e ordenamos por cidade utilizando a cláusula ORDER BY. Como resultado, 
temos as cidades Alegrete, Belo Horizonte, Porto Alegre, Rio 
de Janeiro, Salvador e São Paulo. Note que os resultados duplicados 
foram removidos.
Veja mais exemplos do uso de UNION e UNION ALL, além de outras cláusulas, no 
“Guia do desenvolvedor de banco de dados” da plataforma Amazon Redshift.
Em um segundo exemplo, mais complexo, temos como objetivo listar a 
quantidade de clientes ou fornecedores em cada cidade, em ordem decrescente 
da quantidade de clientes ou fornecedores na cidade. Para tanto, nosso primeiro 
passo foi listar todas as cidades por cliente e por fornecedor. Depois, 
utilizamos o comando UNION ALL para unir ambos os resultados mantendo 
os duplicados, o que foi armazenado como cidades. Nesse momento, temos 
a lista de todas as cidades de clientes e fornecedores mantendo as duplicadas. 
A partir desse novo conjunto de dados, listaremos as cidades e a quantidade 
de vezes que cada uma aparece na lista, as agruparemos por cidade e, por fim, 
ordenaremos pela quantidade de forma decrescente. O comando SQL para 
realizar essa operação pode ser visto a seguir.
União de conjuntos em SQL10
SELECT COUNT(cidade), cidade FROM
 (
 SELECT cidade FROM cliente
 UNION ALL
 SELECT cidade FROM fornecedor
 )
 AS cidades
GROUP BY cidade 
ORDER BY COUNT(cidade) DESC
Após a execução desse comando SQL, o PostgreSQL retorna os seguintes 
dados:
count cidade
4 Porto Alegre
3 Rio de Janeiro
3 São Paulo
1 Belo Horizonte
1 Salvador
1 Alegrete
A cidade de Porto Alegre se destaca com 4 aparições, Rio de Ja-
neiro e São Paulo vêm em seguida com 3, e as outras cidades têm apenas 1. 
Além do uso das cláusulas, é importante entender o seu funcionamento e 
desempenho.
O comando EXPLAIN do PostgreSQL analisa uma query (consulta) e 
retorna o plano de execução para ela. Nesse plano, de acordo com o SGDB, 
podemos ver quais estruturas de dados, índices e algoritmos são utilizadas, 
além de analisar o tempo de execução total e o tempo consumido por cada 
etapa da query, dados que podem ser utilizados para otimizar as consultas. 
Acesse a documentação oficial do PostgreSQL para entender melhor o funcionamento 
do EXPLAIN.
11União de conjuntos em SQL
Na Figura 2, temos um exemplo de saída do comando EXPLAIN. A query 
analisada foi a do exemplo anterior: o primeiro passo consiste em listar os dados 
das tabelas cliente e fornecedor; depois, faz-se um acréscimo após a 
chamada do UNION; em seguida, realiza-se uma chamada de agregação com 
o intuito de agrupar as cidades pela quantidade; e, finalmente, chama-se uma 
classificação para ordenar (ORDER BY) por cidades em ordem decrescente 
(DESC). Além dessa informação, na segunda parte da Figura 2, podemos 
analisar o tempo gasto e o custo de cada operação. É possível observar que o 
maior custo (51% do tempo) se deu na etapa Seq Scan. Essa operação refere-se 
a percorrer as tabelas cliente e fornecedor do início ao fim. Depois, 
temos os custos da agregação e da classificação. Por fim, o menor custo foi 
o da operação de acréscimo (append), basicamente refletida pela cláusula 
UNION ALL.
Figura 2. Exemplo de plano de execução de um query no PostgreSQL.
Neste capítulo, estudamos a utilização da operação de união de conjuntos 
em álgebra relacional e as cláusulas UNION e UNION ALL da linguagem SQL. 
Por fim, aplicamos vários comandos SQL, incluindo o UNION e o UNION 
ALL, no gerenciador de banco de dados PostgreSQL.
União de conjuntos em SQL12
CARVALHO, V. PostgreSQL: banco de dados para aplicações web modernas. São Paulo: 
Casa do Código, 2017. 220 p.
MANNINO, M. V. Projeto, desenvolvimento de aplicações e administração de banco de 
dados. 3. ed. Porto Alegre: AMGH; 2008. 717 p.
MENEZES, P. B. Matemática discreta para computação e informática. 4. ed. Porto Alegre: 
Bookman, 2013. 370 p. (Série Livros Didáticos Informática UFRGS, 16).
PRICE, J. Oracle Database 11g SQL: domine SQL e PL/SQL no banco de dados Oracle. 
Porto Alegre: Bookman; Oracle Press, 2009. 684 p.
RAMAKRISHNAN, R..; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. 
Porto Alegre: AMGH; Bookman, 2008. 905 p.
Leituras recomendadas
EXEMPLOS de consultas UNION. In: Amazon Redshift: Guia do desenvolvedor de banco 
de dados. AWS, Seattle, 2020. Disponível em: https://docs.aws.amazon.com/pt_br/
redshift/latest/dg/c_example_union_query.html. Acesso em: 2 jun. 2020.
EXEMPLOS de consultas UNION ALL. In: Amazon Redshift: Guia do desenvolvedor de 
banco de dados. AWS, Seattle, 2020. Disponível em: https://docs.aws.amazon.com/
pt_br/redshift/latest/dg/c_example_unionall_query.html. Acesso em: 2 jun. 2020.
PRASS, F. S. Otimização de Consultas SQL. DevMedia, Rio de Janeiro, 2015. Disponível em: 
https://www.devmedia.com.br/algebra-relacional-parte-i/2663. Acesso em: 2 jun. 2020.
REZENDE, R. Álgebra Relacional – Parte I. DevMedia, Rio de Janeiro, 2006. Disponível em: 
https://www.devmedia.com.br/algebra-relacional-parte-i/2663. Acesso em: 2 jun. 2020.
UTILIZAÇÃO do comando EXPLAIN. In: Documentação do PostgreSQL 8.0.0: Projeto 
de Tradução para o Português do Brasil. The PostgreSQL Global Development Group, 
[S. l.], 2005. Disponível em: http://pgdocptbr.sourceforge.net/pg80/performance-tips.
html#USING-EXPLAIN. Acesso em: 2 jun. 2020.
Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun-
cionamento foi comprovado no momento da publicação do material. No entanto, a 
rede é extremamente dinâmica; suas páginas estão constantemente mudando de 
local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade 
sobre qualidade, precisão ou integralidade das informações referidas em tais links.
13União de conjuntos em SQL
DICA DO PROFESSOR
O plano de execução é uma ferramenta que auxilia o administrador de banco de dados a 
entender o comportamento e o desempenho de suas consultas. É possível identificar as 
operações realizadas pelo banco de dados e também quais estruturas de dados foram utilizadas 
para tanto. Essas informações são cruciais para otimizar o desempenho e eliminar gargalos de 
consultas SQL.
 
Nesta Dica do Professor, você irá conhecer o plano de execução e como ele pode ser aplicado 
para melhorar o desempenho de suas consultas.
Conteúdo interativo disponível na plataforma de ensino!
 
EXERCÍCIOS
1) A linguagem SQL (Structured Query Language) implementa operadores que atuam 
sobre conjuntos, como, por exemplo: UNION, INTERSECT, EXCEPT, etc. Sobre a 
operação de união, assinale a alternativa correta:
A) Retorna todas as linhas da consulta1 e da consulta 2.
B) Retorna todas as linhas da consulta 1 que têm relação com as linhas da consulta 2.
C) Retorna todas as linhas da consulta 1 e da consulta 2 removendo as duplicadas.
D) Não retorna as linhas presentes na consulta 1 e na consulta 2.
E) Retorna todas as linhasda consulta 1, mas que não estejam na consulta 2.
2) O comando UNION foi utilizado para a construção de uma consulta que retornava a 
quantidade de pessoas que são tanto funcionários como clientes de uma determinada 
empresa. Sabendo que a tabela funcionário contém 30 linhas e que a tabela cliente 
também contém 30 linhas, qual das opções a seguir indica o número de linhas 
retornadas pela consulta, sendo que 20% dos funcionários são também clientes?
A) 54.
B) 57.
C) 30.
D) 27.
E) 24.
3) Buscando otimizar uma consulta, o administrador de banco de dados pode gerar 
planos de execução e analisá-los buscando melhorar uma operação específica. Nesse 
sentido, qual é o comando do PostgreSQL que executa uma consulta e a analisa?
A) REPORT.
B) COUNT.
C) VACUUM.
D) ANALYZE.
E) EXPLAIN.
4) O diagrama de Venn é uma forma de representar conjuntos graficamente. Dois 
diagramas de Venn foram montados tendo como base os conjuntos A = {43, 80, 86, 
61, 28, 4} e B = {16, 58, 28, 35, 18, 79}. O primeiro diagrama é resultado da operação 
A UNION B, enquanto o segundo, da operação A UNION ALL B. Nesse sentido, qual 
das opções a seguir indica corretamente o número de elementos dos diagramas da 
operação UNION e UNION ALL, respectivamente?
A) 6 e 12.
B) 9 e 11.
C) 12 e 11.
D) 11 e 12.
E) 6 e 9.
5) A álgebra relacional também contém diferentes operações sobre conjuntos, como, por 
exemplo, a operação de união. Esta operação é representada por U e retorna uma 
relação contendo todas as tuplas que ocorrem em uma relação A e B. Sobre a 
operação de união, assinale a alternativa correta:
A) A operação de união é comutativa, ou seja, R1 U R2 é equivalente a R2 U R1.
B) A operação de união pode ser aplicada a, no máximo, dois conjuntos.
C) A operação de união leva em consideração o nome dos atributos.
D) O resultado da união herda os nomes de atributos da segunda tabela utilizada no operador.
E) A operação de união retorna todos os elementos de A e todos os elementos de B sem 
remover os repetidos.
NA PRÁTICA
Um dos desafios que o administrador de banco de dados enfrenta é decidir como construir a 
consulta SQL da melhor maneira, buscando, assim, resolver um problema que foi proposto a ele. 
Essas decisões podem variar de acordo com os requisitos do cliente ou as limitações de software 
e hardware.
 
Na Prática, você vai conhecer um estudo de caso com base no desenvolvimento de uma consulta 
para um aplicativo de relacionamento. O objetivo é, dado dois usuários que deram match, 
retornar todas as músicas que um dos usuários gosta.
 
SAIBA MAIS
Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do 
professor:
MFUNA | Cj2 - União de conjuntos com o diagrama de Venn
Confira, no vídeo a seguir, como funciona a operação de união sobre conjuntos, a qual pode ser 
aplicada da mesma maneira em tabelas de um banco de dados SQL.
Conteúdo interativo disponível na plataforma de ensino!
UNION, UNION ALL, INTERSECT e EXCEPT
Confira, no site a seguir, alguns exemplos de utilização dos comandos UNION e UNION ALL, 
além de outros comandos SQL.
Conteúdo interativo disponível na plataforma de ensino!
Dicas de performance em aplicações com PostgreSQL
Confira, no site a seguir, diversas dicas de como otimizar o desempenho de consultas SQL.
Conteúdo interativo disponível na plataforma de ensino!

Continue navegando