Prévia do material em texto
LINGUAGEM DE PROGRAMAÇÃO DE BANCO DE DADOS JUNÇÃO DE TABELAS 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 DE TABELAS Imagine que desejamos emitir um relatório contendo sobrenome e salário dos funcionários e o nome do departamento em que ele trabalha. Ao verificarmos na base vemos que o sobrenome e o salário estão na tabela Funcionários e o nome do departamento está na tabela Departamentos. Notamos também que a relação entre estas duas tabelas (entidades) é 1 departamento tem n funcionários, portanto vemos que na tabela Funcionários temos uma chave estrangeira que é o código do departamento. Junção Clássica Então precisamos juntar as informações da tabela Funcionários com a informação da tabela departamentos: SELECT last_name, salary, department_name FROM hr.employees , hr.departments WHERE hr.employees.department_id = hr.departments.department_id; Como department_id está presente nas 2 tabelas (mesmo nome),temos que informar a qual tabela nos referimos. Desta forma podemos juntar quantas tabelas forem necessárias, 2, 3, 4 ou mais. No nosso BD, temos: • hr.employees tem department_id e job_id como chaves estrangeiras ligando com hr.jobs e hr.departments. • hr.departments tem location_id como chave estrangeira ligando com hr.locations. • hr.locations tem country_id como chave estrangeira ligando com hr.countries. • hr.countries tem região_id como chave estrangeira ligando com Regíões. Exemplos Crie uma query que mostre os sobrenomes dos funcionários, os hr.jobs e as respectivas descrições de job_id. select last_name, f.job_id, job_title from hr.employees f, hr.jobs c WHERE f.job_id = c.job_id Crie uma consulta para o RH a fim de gerar os endereços de todas as unidades (filiais) da empresa. Mostre o ID do local, o endereço, a cidade, o estado e o país do depto. select l.location_id, l.street_address, l.city, l.state_province, p.country_name from hr.locations l, hr.countries p where l.country_id = p.country_id Exemplos O RH precisa de um relatório sobre os funcionários e os seus respectivos departamentos. Crie uma consuta que exiba o sobrenome, o salário, o nome do departamento e a descrição de cargo para todos os funcionários. select last_name, salary, department_name, job_title from hr.employees f,hr.departments d, hr.jobs c where f.department_id = d.department_id and f.job_id = c.job_id_id Exemplos O RH precisa de um relatório sobre os funcionários e os seus respectivos departamentos. Crie uma consuta que exiba o sobrenome, o salário, o nome do departamento e a descrição de cargo somente para os funcionários com salário entre 2000 e 4000. select last_name, salary, department_name, job_title from hr.employees f, hr.departments d, hr.jobs c where f.department_id = d.department_id and f.job_id = c.job_id and salary between 2000 and 4000 Exemplos O RH precisa de um relatório dos funcionários em South San Francisco . Exiba o sobrenome, o cargo, o nome do departamento e a cidade de todos os funcionários que trabalham na cidade de South San Francisco select f.last_name,d.department_name, c.job_title, l.city from hr.employees f, hr.departments d, hr.jobs c, hr.locations l where f.department_id = d.department_id and f.job_id = c.job_id and d.location_id = l.location_id and city = 'South San Francisco' Exemplos Crie uma query que exiba os nomes de cada um dos departamentos e a respectiva média salarial para os departamentos com média salarial maior que 3.500. select department_name, avg(salary) from hr.employees f, hr.departments d where f.department_id = d.department_id group by department_name having avg(salary) > 3500 Exemplos Crie uma query que exiba os sobrenomes, os nomes de cada um dos departosamentos e o nome do país para todos os funcionários. select last_name, department_name, country_name from hr.employees f, hr.departments d, lohr.locations l, hr.countries p where f.department_id = d.department_id And d.location_id = l.location_id And l.country_id = p.country_id