Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Prévia do material em texto

BANCO DE DADOS
Junções
Cícero Alves da Silva
cicero.alves@ifpb.edu.br
Catolé do Rocha
Objetivo
• Aprender a utilizar os diferentes 
tipos de junções
Banco de Dados 
pratica
Tabelas Utilizadas
nos Exemplos da Aula
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
funcionario
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
departamento
Junção
• P o s s í v e l s o l u ç ã o q u a n d o é 
necessário realizar um consulta 
envolvendo mais de uma tabela
• Isso é feito utilizando o comando 
SELECT
Junção
• Para fazer um consulta envolvendo 
mais de uma tabela, relaciona-se a 
chave primária de uma tabela com 
a chave estrangeira de outra tabela
Banco de Dados 
pratica
Tabelas Utilizadas
nos Exemplos da Aula
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
funcionario
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
departamento
Tipos de Junções
• CROSS JOIN (Junção cruzada)
• INNER JOIN (Junção interna)
• OUTER JOIN (Junção externa) 
• LEFT OUTER JOIN ( Junção externa 
esquerda)
• RIGHT OUTER JOIN (Junção externa 
direita)
CROSS JOIN
• Em português, junção cruzada
• Sintaxe
SELECT colunas
FROM tabela_esquerda CROSS JOIN tabela_direita;
• Nesse tipo de junção, são combinadas todas as 
tuplas da tabela da esquerda, com todas as tuplas 
da tabela da direita
CROSS JOIN
Tabela
Esquerda
Tabela
Direita
CROSS JOIN
• Selecione as descrições de todos os 
departamentos, relacionando-as 
com cada nome de funcionário.
funcionario
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
departamento
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
CROSS JOIN
• Selecione as descrições de todos os 
departamentos, relacionando-as com 
cada nome de funcionário.
SELECT d.descricao, f.nome
FROM departamento d CROSS JOIN funcionario f;
CROSS JOIN
SELECT d.descricao, f.nome
FROM departamento d CROSS JOIN funcionario f;
f
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
d
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
CROSS JOIN
SELECT d.descricao, f.nome
FROM departamento d CROSS JOIN funcionario f;
f
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
d
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
CROSS JOIN
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
1 Análise Sala B2-30 1 Maria 1980-01-01 3000 NULL
2 Contabilidade Sala B1-15 1 Maria 1980-01-01 3000 NULL
3 RH Sala B2-15 1 Maria 1980-01-01 3000 NULL
1 Análise Sala B2-30 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
3 RH Sala B2-15 2 Ana 1980-01-01 2500 2
1 Análise Sala B2-30 3 José 1970-06-01 1500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
3 RH Sala B2-15 3 José 1970-06-01 1500 2
1 Análise Sala B2-30 4 Pedro 1980-06-01 4000 3
2 Contabilidade Sala B1-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
1 Análise Sala B2-30 5 João 1990-06-01 3000 3
2 Contabilidade Sala B1-15 5 João 1990-06-01 3000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
1 Análise Sala B2-30 6 Matheus 1990-09-01 2000 2
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
3 RH Sala B2-15 6 Matheus 1990-09-01 2000 2
CROSS JOIN
SELECT d.descricao, f.nome
FROM departamento d
CROSS JOIN funcionario f;
descricao nome
Análise Maria
Contabilidade Maria
RH Maria
Análise Ana
Contabilidade Ana
RH Ana
Análise José
Contabilidade José
RH José
Análise Pedro
Contabilidade Pedro
RH Pedro
Análise João
Contabilidade João
RH João
Análise Matheus
Contabilidade Matheus
RH Matheus
INNER JOIN
• Em português, junção interna
• Sintaxe
SELECT colunas
FROM tabela_esquerda INNER JOIN tabela_direita
ON cláusula_de_junção;
• Nesse tipo de junção, são combinadas apenas as 
tuplas da tabela da esquerda com tuplas da tabela 
da direita que atendam à cláusula de junção
INNER JOIN
Tabela
Esquerda
Tabela
Direita
INNER JOIN
Selecione o nome dos funcionários 
q u e e s t ã o a l o c a d o s e m 
departamentos e a descrição dos 
respectivos departamentos.
funcionario
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
departamento
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
INNER JOIN
Selecione o nome dos funcionários que 
estão alocados em departamentos e a 
d e s c r i ç ã o d o s r e s p e c t i v o s 
departamentos.
SELECT f.nome, d.descricao
FROM departamento d INNER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
INNER JOIN
SELECT f.nome, d.descricao
FROM departamento d INNER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
f
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
d
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
INNER JOIN
SELECT f.nome, d.descricao
FROM departamento d INNER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
f
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
d
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
INNER JOIN
SELECT f.nome, d.descricao
FROM departamento d INNER JOIN funcionario f 
ON d.cod_dep = f.cod_dep;
nome descricao
Ana Contabilidade
José Contabilidade
Pedro RH
João RH
Matheus Contabilidade
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
OUTER JOIN
• Em português, junção externa
• Nesse t ipo de junção, podem 
aparecer no resultado tuplas de 
uma tabela que não possuam tuplas 
relacionadas na outra tabela
LEFT OUTER JOIN
• Em português, junção externa à esquerda
• Sintaxe
SELECT colunas
FROM tabela_esquerda LEFT OUTER JOIN tabela_direita
ON cláusula_de_junção;
• Nesse tipo de junção, são combinadas todas as tuplas da 
tabela da esquerda, com as tuplas correspondentes na 
tabela da direita ou NULL
LEFT OUTER JOIN
Tabela
Esquerda
Tabela
Direita
LEFT OUTER JOIN
Selec ione as descr ições de todos os 
departamentos cadastrados no BD. Para 
aqueles que possuam func ionár ios , 
também apresentar o nome do funcionário.funcionariodepartamento
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
LEFT OUTER JOIN
S e l e c i o n e a s d e s c r i ç õ e s d e t o d o s o s 
departamentos cadastrados no BD. Para 
aqueles que possuam funcionários, também 
apresentar o nome do funcionário.
SELECT d.descricao, f.nome
FROM departamento d LEFT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
SELECT d.descricao, f.nome
FROM departamento d LEFT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
LEFT OUTER JOIN
fd
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
LEFT OUTER JOIN
SELECT d.descricao, f.nome
FROM departamento d LEFT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
1 Análise Sala B2-30 NULL NULL NULL NULL NULL
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
f
d
SELECT d.descricao, f.nome
FROM departamento d LEFT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
LEFT OUTER JOIN
descricao nome
Análise NULL
Contabilidade Ana
Contabilidade José
Contabilidade Matheus
RH Pedro
RH João
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
1 Análise Sala B2-30 NULL NULL NULL NULL NULL
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
RIGHT OUTER JOIN
• Em português, junção externa à direita
• Sintaxe
SELECT colunas
FROM tabela_esquerda RIGHT OUTER JOIN tabela_direita
ON cláusula_de_junção;
• Nesse tipo de junção, são combinadas todas as tuplas da 
tabela da direita, com as tuplas correspondentes na tabela 
da esquerda ou NULL
RIGHT OUTER JOIN
Tabela
Esquerda
Tabela
Direita
RIGHT OUTER JOIN
S e l e c i o n e o s n o m e s d e t o d o s o s 
funcionários cadastrados no BD. Para 
a q u e l e s q u e e s t e j a m a l o c a d o s e m 
departamentos, também apresentar a 
descrição do departamento.
funcionariodepartamento
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
RIGHT OUTER JOIN
Selecione os nomes de todos os funcionários 
cadastrados no BD. Para aqueles que estejam 
a locados em departamentos , também 
apresentar a descrição do departamento.
SELECT f.nome, d.descricao
FROM departamento d RIGHT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
RIGHT OUTER JOIN
SELECT f.nome, d.descricao
FROM departamento d RIGHT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
fd
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
RIGHT OUTER JOIN
SELECT f.nome, d.descricao
FROM departamento d RIGHT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
NULL NULL NULL 1 Maria 1980-01-01 3000 NULL
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
f
d
cod_dep descricao localizacao
1 Análise Sala B2-30
2 Contabilidade Sala B1-15
3 RH Sala B2-15
cod_func nome dt_nascimento salario cod_dep
1 Maria 1980-01-01 3000 NULL
2 Ana 1980-01-01 2500 2
3 José 1970-06-01 1500 2
4 Pedro 1980-06-01 4000 3
5 João 1990-06-01 3000 3
6 Matheus 1990-09-01 2000 2
RIGHT OUTER JOIN
SELECT f.nome, d.descricao
FROM departamento d RIGHT OUTER JOIN funcionario f
ON d.cod_dep = f.cod_dep;
nome descricao
Maria NULL
Ana Contabilidade
José Contabilidade
Pedro RH
João RH
Matheus Contabilidade
cod_dep descricao localizacao cod_func nome dt_nascimento salario cod_dep
NULL NULL NULL 1 Maria 1980-01-01 3000 NULL
2 Contabilidade Sala B1-15 2 Ana 1980-01-01 2500 2
2 Contabilidade Sala B1-15 3 José 1970-06-01 1500 2
3 RH Sala B2-15 4 Pedro 1980-06-01 4000 3
3 RH Sala B2-15 5 João 1990-06-01 3000 3
2 Contabilidade Sala B1-15 6 Matheus 1990-09-01 2000 2
Dúvidas
Fonte: Imagem de Hatice 
EROL por Pixabay.
https://pixabay.com/pt/users/haticeerol-14967706/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=5676782
https://pixabay.com/pt/?utm_source=link-attribution&utm_medium=referral&utm_campaign=image&utm_content=5676782
Referências
• SILVA, T. A. E. ; SANTOS, N. M.; 
OLIVEIRA JR., W. Prática de banco 
de dados. – Teresina : Instituto 
Federal de Educação, Ciência e 
Tecnologia do Piauí, 2013. 88 p.

Mais conteúdos dessa disciplina