Prévia do material em texto
LINGUAGEM DE PROGRAMAÇÃO DE BANCO DE DADOS JUNÇÃO DE TABELAS OUTER JOIN Prof Luiz Antonio Gobitta ESTRUTURA DO BANCO DE DADOS ESTRUTURA DO BANCO DE DADOS O banco de Dados é composto pelas tabelas: • FUNCIONÁRIOS – HR.EMPLOYEES • DEPARTAMENTOS – HR.DEPARTMENTS • LOCAIS – HR.LOCATIONS • PAISES – HR.COUNTRIES • REGIÕES – HR.REGIONS • CARGOS – HR.JOBS Junção Externa - OUTER JOIN • Uma junção interna [Inner Join]mostra as linhas de uma tabela que tem correspondente na outra tabela. Linhas sem correspondente na outra tabela são omitidas. • Uma junção externa [outer join] mostra todas as linhas de uma tabela, mesmo quando elas não satisfazem a condição de junção. Tipos de OUTER JOIN Existem 3 tipos de outer join: • LEFT OUTER JOIN • RIGHT OUTER JOIN • FULL OUTER JOIN • LEFT OUTER JOIN→ indica que todas as linhas da tabela à esquerda do JOIN são incluídas no resultado e a tabela à direita, apenas as linhas relacionadas. • RIGHT OUTER JOIN→ indica que todas as linhas da tabela à direita do JOIN são incluídas no resultado e a tabela à esquerda, apenas as linhas relacionadas. • FULL OUTER JOIN→ todas as linhas de ambas as tabelas são incluídas, mesmo as que não estão relacionadas com a outra tabela. • Quando uma linha não tem correspondente na outra tabela, será mostrado NULL nas colunas da outra tabela. Exemplos Precisamos juntar as informações da tabela Funcionários com as informações da tabela departamentos: SELECT last_name, salary, department_name FROM hr.employees F LEFT OUTER JOIN hr.departments D ON F.department_id = D.department_id • Serão listados todos os funcionários, inclusive aqueles que não estão alocados a um departamento. SELECT last_name, salary, department_name FROM hr.employees F RIGHT OUTER JOIN hr.departments D ON F.department_id = D.department_id • Serão listados todos os departamentos, inclusive aqueles que não tem nenhum funcionário alocados a ele. SELECT last_name, salary, department_name FROM hr.employees F FULL OUTER JOIN hr.departments D ON F.department_id = D.department_id • Serão listados todos os funcionários e todos os departamentos, inclusive aqueles que não tem correspondência na outra tabela. Exemplos Crie uma query que mostre os sobrenomes dos funcionários, os cargos e as respectivas descrições de cargo. Liste todos os funcionários, mesmo os que não tem cargo. select F.last_name, F.job_id, C.job_title from hr.employees F LEFT OUTER JOIN hr.jobs C ON F.job_id = C.job_id Crie uma consulta para o RH com os nomes dos países, as cidades, e os endereços dos locais. Liste em ordem crescente de país e devem ser listados todos os países, mesmo aqueles que não tem filiais da empresa. select P.country_name, L.city, L.street_address from hr.locations L RIGHT OUTER JOIN hr.countries P ON L.country_id = P.country_id Order by P.country_name Crie uma query que mostre os sobrenomes dos funcionários e as descrições de cargo. Liste todos os funcionários, mesmo os que não tem cargo e todos os cargos, mesmo sem funcionários alocados, em ordem alfabética de cargo e sobre nome. select C.job_title, F.last_name from hr.employees F FULL OUTER JOIN hr.jobs C ON F.job_id = C.job_id Order by C.job_title, F.last_name O RH precisa de um relatório sobre os funcionários e os seus respectivos departamentos. Crie uma consulta que exiba o sobrenome, o salário e o nome do departamento somente para os funcionários com salário entre 2000 e 5000. Devem aparecer todos os funcionários. select F.last_name, F.salary, D.department_name from hr.employees F LEFT JOIN hr.departments D ON F.department_id = D.department_id where salary between 2000 and 5000