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