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
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
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…