[Resolvido]Duvida Oracle?

Pessoal minha duvida é a seguinte tenho duas tabelas livro e assunto.Tenho que Exibir os livros (Título), valor, Lançamento, cujo assunto seja
“Banco de Dados”.

Minhas tabelas estão assim

###Tabela livro.

###Tabela autor

Como faço para Exibir os livros (Título), valor, Lançamento, cujo assunto seja
“Banco de Dados”?

Bom, não estou vendo nenhuma tabela assunto, mas você pode filtrar pelo próprio titulo assim…

SELECT LIV_TITULO, LIV_PRECO, LIV_LANCAMENTO 
FROM livro WHERE LIV_TITULO LIKE '%banco de dados%';

aqui man minha tabela assunto

como faço para Exibir os livros (Título), valor, Lançamento, cujo assunto seja
“Banco de Dados”

Tentei usar o union ou INTERSECT mas ele da erro

Comando oracle

SELECT liv_titulo,liv_preco, liv_lancamento,ass_sigla FROM LIVRO
union
SELECT ass_sigla FROM ASSUNTO WHERE ass_descricao like ‘%banco de dados%’;

Erro apresentado

: o bloco de consulta possui número incorreto de colunas de resultado
01789. 00000 - “query block has incorrect number of result columns”

Quais colunas relacionam as duas tabelas?

Você precisa usar INNER JOIN…

1 curtida

ass_sigla

Nesse caso você tem duas opções:

  • Fazer o join entre as duas tabelas…
SELECT LIV_TITULO, LIV_PRECO, LIV_LANCAMENTO FROM livro 
INNER JOIN assunto ON livro.ASS_SIGLA = assunto.ASS_SIGLA
WHERE ASS_DESCRICAO LIKE '%banco de dados%';
  • Consultar diretamente pela sigla
SELECT LIV_TITULO, LIV_PRECO, LIV_LANCAMENTO 
FROM livro WHERE ASS_SIGLA = 'BAN';

A primeira opção te dá mais opções de campos para selecionar, a segunda é mais rápida em execução já que vai consultar tudo em apenas uma tabela… veja qual melhor opção para você

mas no oracle iria funcionar o comando inner join , nçao poderia usar o union ou INTERSECT

Não conheço oracle, estou indo pelo padrão SQL ANSI onde a maioria dos bancos aceitam/suportam…

Até onde sei intersecção serve para filtrar conjuntos… pelo menos em linguagens de programação e matemática serve para isso…

http://brasilescola.uol.com.br/matematica/operacoes-com-conjuntos.htm

Imagino que você está se confundindo com uso do UNION, ele não relaciona tabelas, serve para produzir resultados de tabelas distintas, como se fossem de uma única tabela, mas para isso, você precisa ter a mesma quantidade de colunas selecionadas e com nomes/apelidos iguais e na mesma ordem em ambas… para o que você precisa o union não serve… seu caso é com join mesmo…

obrigado man pela ajuda e explicações

1 curtida

Mas conseguiu resolver?

1 curtida

consegui man , obrigado , man me ajuda em outra questão.
Questao
Exibir a quantidade de livros que existem por sigla.

Como posso exibir quantidade de livros que existem por sigla.

Meu banco livro

Precisa usar o agrupamento…

SELECT COUNT(*) AS qtd, ASS_SIGLA 
FROM livro GROUP BY ASS_SIGLA;

Agora se surgir outra questão, seria melhor você criar outro tópico e marcar esse como Solução/Resolvido (icone ao lado do curtir)… assim não mistura os assuntos…