Buscar

JOIN - SQL

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

JOIN (junção natural e 
junção exterior)
SQL
Profa MsC Josyane Lannes Florenzano de Souza
Definição
O conceito de junção de tabelas (JOIN) é utilizado quando em uma consulta é necessário recuperar dados de duas ou mais tabelas. As linhas da tabela podem ser unidas às linhas de outra tabela de acordo com os valores comuns existentes nas colunas correspondentes. 
Diretriz
Caso apareça o mesmo nome de coluna em mais de uma tabela, o nome da coluna deve estar prefixado com o nome da tabela;
Para tornar o comando SQL mais claro e melhorar o desempenho na consulta, recomenda-se prefixar o nome de cada tabela em suas colunas correspondente.
SQL possui cláusulas específicas para expressar a junção natural de duas tabelas e um novo tipo de junção denominada junção exterior (em inglês outer join).
A junção exterior pode ser do tipo esquerda ou direita.
Sintaxe básica
SELECT nome-da-tabela1.col5, nome-da-tabela2.col5 FROM nome-da-tabela1 
JOIN nome-da-tabela2 ON nome-da-tabela1.col1 = nome-da-tabela2.col1 
JOIN nome-da-tabela3 ON nome-da-tabela2.coln = nome-da-tabela3.coln
. . .; 
Tipos de JOIN
Junção idêntica (Equi join)
Neste tipo de junção as colunas usadas na condição possuem valores iguais e, deste modo, somente as linhas que satisfaçam a ambos os lados da comparação serão recuperadas. Na maioria das vezes as colunas envolvidas na comparação correspondem a chave primária e estrangeira.
Junção idêntica (Equi join) - Ex
Ex1 - Junção de duas tabelas: Recupera o nome dos empregados e a descrição do seu cargo. Somente serão exibidos os empregados que têm cargo. Ou seja, onde a igualdade é verdadeira.
SELECT EMPREGADO.nome, CARGO.descricao 
FROM EMPREGADO JOIN CARGO 
ON EMPREGADO.codigo_cargo = CARGO.codigo_cargo;
Junção idêntica (Equi join) - Ex
SELECT EMPREGADO.nome, CARGO.descricao 
FROM EMPREGADO JOIN CARGO 
ON EMPREGADO.codigo_cargo = CARGO.codigo_cargo;
Obs: relacionamento * .. 1
EMPREGADO
Codigo_Emp(PK)
Nome
Codigo_Cargo(FK)
CARGO
Codigo_Cargo(PK)
Descricao
2) Junção Externa (Outer join)
Este tipo de junção é usado quando queremos também recuperar as linhas da tabela que satisfazem apenas um dos lados da comparação. Ou seja, o OUTER JOIN pode ser usado para recuperar dados de uma tabela, mesmo que não exista linhas correspondente para satisfazer a junção. 
Pode-se especificar 3 tipos de JOIN: 
LEFT OUTER JOIN, 
RIGHT OUTER JOIN e 
FULL OUTER JOIN. 
A palavra OUTER é opcional.
LEFT OUTER JOIN
Recupera as linhas que satisfazem a igualdade da junção, como também as linhas, do lado esquerdo do sinal de igual da cláusula ON, que não satisfazem a igualdade.
Ex: Exibir o nome dos empregados e a descrição de seu cargo. Caso o empregado ainda não possua a descrição do seu cargo, exiba somente o nome do empregado.
SELECT T1.nome, T2.descricao
FROM EMPREGADO T1 LEFT JOIN CARGO T2 
ON T1.codigo_cargo = T2.codigo_cargo;
EMPREGADO
Codigo_Emp(PK)
Nome
Codigo_Cargo(FK)
Codigo_Chefe(FK)
CARGO
Codigo_Cargo(PK)
Descricao
SELECT T1.nome, T2.descricao
FROM EMPREGADO T1 LEFT JOIN CARGO T2 
ON T1.codigo_cargo = T2.codigo_cargo;
SELECT T1.nome, T2.descricao
FROM EMPREGADO T1 RIGHT JOIN CARGO T2 
ON T1.codigo_cargo = T2.codigo_cargo;
right
left
RIGHT OUTER JOIN
Recupera as linhas que satisfazem a igualdade da junção, como também as linhas, do lado direito do sinal de igual da cláusula ON, que não satisfazem a igualdade.
Ex: Exibir o nome dos empregados e a descrição de seu cargo. Caso o cargo ainda não possua empregado associado, exiba somente o nome do cargo.
 SELECT T1.nome, T2.descricao
 FROM EMPREGADO T1 RIGHT OUTER JOIN CARGO T2 
 ON T1.codigo_cargo = T2.codigo_cargo;
FULL OUTER JOIN
Recupera as linhas que satisfazem ou não a igualdade da junção.
Ex: Exibir o nome dos empregados e a descrição de seu cargo. Caso o cargo ainda não possua empregado associado, exiba somente o nome do cargo. E, caso o empregado ainda não possua cargo definido, exiba somente seu nome.
SELECT T1.nome, T2.descricao
FROM EMPREGADO T1 FULL JOIN CARGO T2 
ON T1.codigo_cargo = T2.codigo_cargo;
Outro exemplo
“Considere as tabelas de Funcionários e Dependentes e suponha que gostaríamos de expressar a seguinte consulta sobre as mesmas:
Para cada funcionário dê o seu nome e, se for o caso, dê o nome, parentesco e data de nascimento de cada um de seus dependentes” 
A junção exterior esquerda entre Funcionários e Dependentes (nessa ordem) vem justamente resolver o problema (na junção só aparece os funcionários que possuem dependentes, quando na verdade queremos que todos os funcionários apareçam no resultado da consulta, junto com seus dependentes, se houver).
Outro exemplo
a esquerda
Select nomef, nomed, parentesco, data_nasc
From Funcionários LEFT JOIN Dependentes
On Funcionários.numf = Dependentes.numf
Outro exemplo - resposta
Para os funcionários que não possuem dependentes, o que deve retornar em nomed, parentesco, data_nasc?
Resposta: deve ser retornado o valor nulo.
Outro exemplo - resposta
E a direita?
Select nomef, nomed, parentesco, data_nasc
From Funcionários RIGHT JOIN Dependentes
On Funcionários.numf = Dependentes.numf
Outro exemplo - resposta
E se quisermos agora obter os atributos de ambas as tabelas, independente de haver ou não um match na coluna da junção podemos usar o operador FULL JOIN
Select nomef, nomed, parentesco, data_nasc
From Funcionários FULL JOIN Dependentes
On Funcionários.numf = Dependentes.numf
Outro exemplo - resposta
Exercícios
Cliente (Cli_codigo, Cli_nome, Cli_cidade, Cli_sexo, Cli_email, Cid_codigo)
Cidade (Cid_codigo, Cid_nome)
Exercício 01 - Recupere o nome dos clientes e suas cidades. 
Exercícios - Resposta
Exercício 01 - Recupera o nome dos clientes e suas cidades.
SELECT CLIENTE.Cli_nome, CIDADE.Cid_nome 
FROM CLIENTE JOIN CIDADE 
ON CLIENTE.Cid_codcid = CIDADE.Cid_codcid;
 
Exercícios
Exercício 02 - Exibir o nome dos clientes e suas cidades. Caso o cliente ainda não possua a cidade, exiba somente o nome do cliente.
Pesquisar e entregar para a professora
Pesquise um exemplo de consulta em três tabelas (sem usar UNION), usando JOIN.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais