Baixe o app para aproveitar ainda mais
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.
Compartilhar