Como selecionar dados de duas tabelas distintas em um único select?

O seguinte, tenho essas duas tabelas criadas:

create table livro
(liv_codigo number(10),
liv_titulo varchar2(70),
liv_preco number(7,2),
liv_lancamento date,
edi_codigo number(10),
ass_sigla char(3) not null);

create table assunto
(ass_sigla char(3),
ass_descricao varchar2 (20));

As duas, e as outras interligadas, já estão povoadas. Como eu faço pra selecionar o preço que seja maior que 50 da tabela LIVRO ou o livro que começe com a letra p da tabela ASSUNTO?

Qual a relação entre a tabela livro e assunto?

ass_sigla é a primary key da tabela assunto, e a tabela livro tá recebendo a ass_sigla como uma fk

[code]select * from livro liv inner join assunto ass on (liv.ass_sigla = ass.ass_sigla)

WHERE
liv.liv_preco >50
ass.ass_descricao ilike ‘p%’
[/code]

As duas linhas de where contem seus filtros… o i em frente ao like ira ignorar o upercase

Boa tarde!

Cria dois métodos em sua classe DAO um para consultar o preço do livro e outro para consultar a descrição da tabela assunto.

Por exemplo:

public List<Livro> consultaPreco(Livro livro, String condicao){		
		
		String sql = "Select l.liv_codigo, l.titulo from livro l " +
				"inner join assunto a " +
				"on l.ass_sigla = a.ass_sigla " +
				"where l.liv_preco " 
				+ condicao + "?";		
		
		List<Livro> lista = new ArrayList<Livro>();		
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setLong(1, livro.getPreco());
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				Livro liv = new Livro();
				liv.setCodigo(rs.getLong("liv_codigo"));
				liv.setTitulo(rs.getString("titulo"));		
				
				
				lista.add(liv);
				
								
			}
			rs.close();
			stmt.close();

			return lista;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
		
	}
public List<Assunto> consultaDescricao(Assunto ass){		
		
		String sql = "Select a.ass_sigla, a.ass_descricao from assunto a " +
				"inner join livro l " +
				"on a.ass_sigla = l.ass_sigla " +
				"where a.ass_descricao " 
				+ "like  ?" ;
						
		List<Assunto> lista = new ArrayList<Assunto>();		
		
		try {
			PreparedStatement stmt = connection.prepareStatement(sql);
			stmt.setLong(1, ass.getAssDescricao());
			ResultSet rs = stmt.executeQuery();
			
			while (rs.next()) {
				Assunto a = new Assunto();
				a.setAssSigla(rs.getString("ass_sigla"));
				a.setAssDescricao(rs.getString("ass_descricao"));		
				
				
				lista.add(a);
				
								
			}
			rs.close();
			stmt.close();

			return lista;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
		
	}

Aí você adapta ao que desejar de retorno.

Outrossim, com o Hibernate economizará em código e trabalhará de uma outra forma, mas a essência é a mesma.