Buscar

banco de dados 1509 JOIN

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

Tabelas:
c_depto
	id
	nome
	id_regiao
c_regiao
	id
	nome
Operação basica da algebra relacional: produto cartesiano
Combinação de todas as linhas de uma tabela com todas as linhas da outra.
Sintaxe do prod cartesiano
sintaxe ansi x tradicional: mesmo comando escrito de formas diferentes
SINTAXE ANSI: nome da primeira+operação+nome da segunda tabela
select * from c_depto cross join c_regiao
SINTAXE TRADICIONAL: nome da primeira+virgula+nome da segunda tabela
junção cruzada (cross)
select * from c_depto,c_regiao
sintaxe de junção: clausula where
where id_regiao=id
deu erro: coluna definida de maneira ambígua
Por que?
Pq há campos ID nas duas tabelas.
temos que qualificar as colunas com nomes iguais, isto é, dizer de qual coluna ela vem.
Assim:
where id_regiao=c_regiao.id
select * from c_depto,c_regiao where id_regiao=c_regiao.id
criar alias = apelido da tabela (as tabelas podem ter nomes grandes).
c_depto --> d
c_regiao --> r
where d.id_regiao=r.id --> clausula de junção. onde dizemos como as linhas se combinam. 
boa pratica: qualificar todas as colunas 
select d.id, d.nome,r.*
r.* -> retorna todas as colunas da tabela regiao (id,nome)
SINTAXE ANSI:
a operação de junção se chama junção interior (inner)
select * from c_depto inner join c_regiao on d.id_regiao=r.id
nao foi o comando acima pq eu nao coloquei o "d" e o "r" ao lado dos nomes das tabelas.
select * from c_depto d inner join c_regiao r on d.id_regiao=r.id
diferenças:
ansi: digo qual é a operação e coloco clausula on e clausula de junção
tradicional: nomes das tabelas separados por vírgulas
comparando as duas:
select *
from c_depto d
inner join c_regiao r on d.id_regiao=r.id
select *
from c_depto d, c_regiao r
where d.id_regiao=r.id
junção de 3 tabelas:
id_depto
tabela de empregados --> id_depto --> deptos --> id_regiao --> regiao
p/ sintaxe ansi:
navegabilidade: juntar mais de duas tabelas: junta primeiro duas e gera um resultado. depois junta a outra com o resultado. ou da direita pra esquerda, ou da esquerda para a direita. 
select e.id, e.ult_nome, e.salario, d.*, r.nome
from c_depto d
inner join c_regiao r on d.id_regiao=r.id
inner join c_empr e on e.id_depto=d.id
p/sintaxe tradicional:
select e.id,e.ult_nome, e.salario, d.*, r.nome
from c_depto d, c_regiao r, c_empr e
where d.id_regiao=r.id AND e.id_depto=d.id AND e.id<15
na ansi é só acrescentar a cláusula where:
select e.id, e.ult_nome, e.salario, d.*, r.nome
from c_depto d
inner join c_regiao r on d.id_regiao=r.id
inner join c_empr e on e.id_depto=d.id where e.id<15
quer juntar para os ids<15 e salário>1000
select e.id, e.ult_nome, e.salario, d.*, r.nome
from c_depto d
inner join c_regiao r on d.id_regiao=r.id
inner join c_empr e on e.id_depto=d.id where e.id<15 or salario>1000
T4 select
Dar os comandos solicitados tanto na sintaxe ANSI quanto na Sintaxe Tradicional
Dar os comandos solicitados
•Ex01 - mostrar identificador, último nome, código do departamento e nome do departamento de todos os empregados.
ANSI
select e.id, e.ult_nome, e.id_depto, d.nome 
from c_empr e inner join c_depto d
on d.id=e.id_depto
TRADICIONAL
select e.id, e.ult_nome, e.id_depto, d.nome 
from c_empr e, c_depto d
where d.id=e.id_depto
•Ex02 - mostrar código do departamento, código da região e nome da região de todos os departamentos. Chamar as colunas de Departamento, Região e Nome da região.
select e.id_depto AS DEPARTAMENTO, d.id_regiao AS REGIÃO, d.nome AS NOME DA REGIÃO
from c_depto d inner join c_empr e
on d.id=e.id_depto
•Ex03 - mostrar identificador, último nome, código e nome do departamento do empregado com último nome igual a Pires.
select e.id, e.ult_nome, d.id, d.nome
from c_depto d inner join c_empr e
on d.id=e.id_depto where upper(ult_nome)='PIRES'
•Ex04 - mostrar identificador e nome de todos os departamentos situados na região de nome América do Norte.
select d.id, d.nome
from c_depto d inner join c_regiao r
on r.id=d.id_regiao where r.nome='America do Norte'
•Ex05 - mostrar nome do cliente, código da região e nome da região de todos os clientes das regiões 4 e 5. Atribuir apelidos às tabelas referenciadas.
select c.nome, r.id, r.nome
from c_cliente c inner join c_regiao r
on c.id_regiao=r.id where r.id=4 or r.id=5
•Ex06 - mostrar o último nome, nome do departamento e nome da região de todos os empregados que recebem comissão,
select e.ult_nome, 
from c_empr e inner join c_regiao r on 
select e.ult_nome, d.nome, r.nome
from c_depto d
inner join c_regiao r on d.id_regiao=r.id
inner join c_empr e on e.id_depto=d.id
where perc_comissao > 0
•Ex07 - mostrar nome do produto, código do produto e quantidade faturada dos itens da fatura de número 101.
select p.nome, p.id, f.qtde
from c_produto p inner join c_item_fat f
on f.id_produto=p.id
where id_fat = 101
•Ex08- mostrar nome do cliente, código do produto e quantidade faturada dos clientes que cujas faturas totalizaram mais que 100000. 
select c.nome, p.id, f.qtde
from c_produto p inner join c_item_fat f
on f.id_produto=p.id
where qtde > 100000
Q5
1. Qual o id do almoxarifado onde esta estocado o produto Bunny Boot?
select a.id, p.nome
from c_almoxarifado a inner join c_produto p
on 
where (upper)p.nome='Bunny Boots'
2. Qual o nome completo do representante de vendas que atende a empresa Muench Sports?

Teste o Premium para desbloquear

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

Outros materiais