Junção Externa em SQL
Junção Externa em SQL
BANCO DE DADOS
Introdução
Com o surgimento dos computadores, as informações necessitavam de
um local para armazenamento, o que deu origem aos bancos de dados,
que consistem em guardar grandes volumes de informações digitais, e,
por consequência, a um novo seguimento, conhecido como sistemas de
gerenciamento de banco de dados (SGBD), que têm como principal vanta-
gem o estado coerente dos dados armazenados no banco. De acordo com
Alves (2014), atualmente os bancos de dados representam um componente
essencial na vida da sociedade, uma vez que possibilitam encontrar as
mais variadas atividades de algum modo relacionadas a eles. Assim, surge
a junção, a maneira mais utilizada para combinar as informações de duas
ou mais relações, no contexto de banco de dados, a tabela.
Neste capítulo, você conhecerá os conceitos das operações de junção
externa em SQL e sua relação com a álgebra relacional, identificará por
meio de exemplos práticos o uso e as diferenças de cada uma das cláu-
sulas de condição que compõem essas operações (p. ex., junção direita,
esquerda e completa), e, por fim, será capaz de analisar instruções em
código SQL (Structured Query Language) com a codificação-padrão do
sistema gerenciador de banco de dados, o PostgreSQL.
2 Junção externa em SQL
R ⟕ COND S
Com o uso de LEFT, todas as tuplas da tabela da esquerda que não apre-
sentam correspondentes na tabela da direita são acrescidas ao resultado da
consulta. Por meio do diagrama de Venn, a Figura 1 mostra o retorno dessa
condição, conforme a álgebra relacional, em que a parte preenchida corresponde
aos registros retornados.
R ⟖COND S
R ⟗COND S
4 Junção externa em SQL
Por fim, quando precisamos selecionar linhas das duas tabelas que não são
correspondentes, FULL JOIN, usamos a restrição IS NULL para ambos os
códigos. Com isso, o resultado apresentado considerará somente as linhas sem
correspondência em ambas as tabelas, de acordo com a Figura 6.
Tabela cidade:
1 Curitiba 1
2 Sao Paulo 2
3 Guarulhos 2
4 Buenos Aires 4
5 La Plata 4
6 Cordoba 5
7 Los Angeles 6
8 San Francisco 6
9 Orlando 7
10 Miami 7
11 Siena 8
12 Florenca 8
13 Milao 9
14 Yokohama
Junção externa em SQL 7
Tabela subregião:
1 Paraná 1
2 Sao Paulo 1
4 Buenos Aires 2
5 Cordoba 2
6 Califórnia 3
7 Flórida 3
8 Toscana 4
9 Lombardia 4
10 Aquitania 5
11 Borgonha 5
12 Calábria 5
13 Massachussetts 3
14 Chiapas
Tabela pais:
codigo_pais nome_pais
1 Brasil
2 Argentina
3 Estados Unidos
4 Itália
5 França
6 Noruega
8 Junção externa em SQL
1 Paraná 1 1 Curitiba
5 Cordoba 2 6 Cordoba
7 Flórida 3 9 Orlando
7 Flórida 3 10 Miami
8 Toscana 4 11 Siena
8 Toscana 4 12 Florença
9 Lombardia 4 13 Milao
1 Paraná 1 1 Curitiba
5 Cordoba 2 6 Cordoba
7 Flórida 3 9 Orlando
7 Flórida 3 10 Miami
8 Toscana 4 11 Siena
8 Toscana 4 12 Florença
9 Lombardia 4 13 Milao
NULL NULL NULL 14 Yokohama
1 Paraná 1 1 Curitiba
5 Cordoba 2 6 Cordoba
7 Flórida 3 9 Orlando
7 Flórida 3 10 Miami
8 Toscana 4 11 Siena
8 Toscana 4 12 Florença
9 Lombardia 4 13 Milao
NULL NULL NULL 14 Yokohama
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
LEFT JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta;
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
1 Laranja 3 Laranja
4 Maçã 2 Maçã
Para obter somente os registros da tabela à esquerda que não têm correspon-
dência na tabela da direita, usamos a cláusula WHERE, seguida de IS NULL:
Junção externa em SQL 13
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
LEFT JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta
WHERE b.cesta2 _ id IS NULL;
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
RIGHT JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta;
14 Junção externa em SQL
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
4 Maçã 2 Maçã
1 Laranja 3 Laranja
(null) (null) 4 Morango
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
RIGHT JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta
WHERE a.cesta1 _ id IS NULL;
Junção externa em SQL 15
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
FULL JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta;
16 Junção externa em SQL
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
1 Laranja 3 Laranja
4 Maçã 2 Maçã
(null) (null) 1 Pera
(null) (null) 4 Morango
SELECT
a.cesta1 _ id,
a.cesta1 _ fruta,
b.cesta2 _ id,
b.cesta2 _ fruta
FROM
cesta1 a
FULL JOIN cesta2 b ON a.cesta1 _ fruta = b.cesta2 _ fruta
WHERE a.cesta1 _ id IS NULL OR b.cesta2 _ id IS NULL;
Junção externa em SQL 17
cesta1_ cesta2_
cesta1_id cesta2_id
fruta fruta
Como você deve ter notado, o objetivo das junções externas consiste em
promover a busca de informações a partir da relação entre tabelas em bancos
de dados relacionais, a fim de possibilitar a realização de operações nas
quais se pode manter parte dos registros ou a sua totalidade, em relações de
combinação, mesmo que tais registros não satisfaçam à condição explicitada
na instrução SQL criada.
Leituras recomendadas
CARVALHO, V. PostgreSQL: banco de dados para aplicações web modernas. São Paulo:
Casa do Código, 2017. 220 p.
HEUSER, C. A. Projeto de banco de dados. 6. ed. Porto Alegre: Bookman, 2008. 282 p.
(Série Livros Didáticos Informática UFRGS, 4).
MILANI, A. PostgreSQL: guia do programador. São Paulo: Novatec, 2008. 392 p.