Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Exercicio 08 Oracle I

Exiba todas as compras (mas sem os dados do comprador), cujo comprador tenha nome que comece com 'FLAVIO'. SELECT COMPRAS.* FROM COMPRAS JOIN COMPRADORES ON COMPRAS.COMPRADOR_ID = COMPRADORES.ID WHERE NOME LIKE 'FLAVIO%'; Repare que, como queremos exibir apenas as informações que estão na tabela COMPRAS, fazemos um SELECT COMPRAS.*, e não simplesmente SELECT *, que traria os dados de todas as tabelas.

Nunca vi fazer um SELECT assim(com .*). Minha duvida é : neste caso não viria a coluna id_compradores que está na tabela compras? Ou não teria problema? só não poderíamos trazer os dados da tabela compradores,seria isso?

3 respostas

compras.* mostra todos os campos da tabela compras. Se quiser mostrar alguma coluna da tabela compradores você pode usar compradores.nome_da_coluna, ex:compradores_id. Uma consulta alternativa poderia ser:

SELECT 
  COMPRAS.*,
  COMPRADORES.ID,
  COMPRADORES.NOME,
  COMPRADORES.ENDERECO
FROM 
  COMPRAS 
JOIN COMPRADORES ON COMPRAS.COMPRADOR_ID = COMPRADORES.ID 
WHERE 
  NOME LIKE 'FLAVIO%'
solução!
SELECT 
  COMPRAS.*,
  COMPRADORES.ID,
  COMPRADORES.NOME,
  COMPRADORES.ENDERECO
FROM 
  COMPRAS 
JOIN COMPRADORES ON COMPRAS.COMPRADOR_ID = COMPRADORES.ID 
WHERE 
  COMPRADORES.NOME LIKE 'FLAVIO%'

Lais, ao utilizar o * na projeção (projection) da declaração SELECT, o interpretador entende que a sua instrução deseja retornar todas as colunas das tabelas presentes na relação (joining). As colunas serão apresentadas conforme as suas tabelas foram declaradas.