- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 8 anos, 4 meses atrás por Paulo Werneck.
-
AutorPosts
-
14 de julho de 2016 às 5:47 pm #108285Oracle DeveloperParticipante
Fala pessoal, tudo bem?
Estou começando com SQL, e tenho algumas dúvidas, se puderem me ajudar. Eu tenho as tabelas abaixo (lembrando que minhas tabelas são outras, isso tudo é fictício):TABELA CLIENTE:
– COLUNA 1 (ID do clientePK)
– COLUNA 2 (nome do cliente)TABELA PRODUTO (tabela principal):
– COLUNA 1 (ID do clienteFK)
– COLUNA 2 (nome do produto)
– COLUNA 3 (ID do produtoPK)
– COLUNA 4 (nome do cliente)TABELA DESCRIÇÃO DO PRODUTO:
– COLUNA 1 (tipo do produto)
– COLUNA 2 (estado do produto)
– COLUNA 3 (ID do produtoFK)Meu JOIN seria basicamente esse:
SELECT
rc.ID_DO_CLIENTE
rc.nome_do_cliente
ri.ID_do_cliente
ri.nome_do_produto
ri.ID_do_produto
re.tipo_do_produto
re.estado_do_produto
re.id_do_produto
FROM TABELA_PRODUTO rc
INNER JOIN TABELA_PRODUTO ri
ON rc.ID_DO_CLIENTE = ri.ID_do_cliente
INNER JOIN TABELA_DESCRICAO_PRODUTO re
ON re.id_do_produto = ri.id_do_produtoMinhas dúvidas são:
1. No lugar de utilizar:
INNER JOIN TABELA_PRODUTO ri
ON rc.ID_DO_CLIENTE = ri.ID_do_cliente
Eu poderia fazer:
INNER JOIN TABELA_PRODUTO ri
ON rc.nome_do_cliente = ri.nome_do_cliente ?Por exemplo, se eu tenho o relacionamento entre 3 tabelas, elas precisam as 3 terem campos
em comum obrigatoriamente, correto? Se afirmativo, sempre precisa ser o ID?
Caso a resposta é que elas sempre precisam ter campos em comum, eu sempre preciso defini-los
no ‘ON’? Eu não poderia apenas colocar algo como ‘INNER JOIN….’ e mais nada?Obrigado,
14 de julho de 2016 às 10:26 pm #108286Paulo WerneckParticipanteOlá
Primeira Pergunta:
Sim, sintaticamente está correto, vc pode fazer join por colunas que não sejam o id ou a chave primariaSegunda Pergunta:
As três tabelas ou mais não precisam ter o mesmo campo em todas elas, nem mesmo os campos precisam ter o mesmo nome. Você conhece modelagem de dados? se não estude um pouco sobre, vai te ajudar a entender esses joins.Terceira Pergunta:
Nessa sintaxe sim, vc precisará colocar a clausula “on”, mas existem outras sintaxes de se fazer joins… dá uma olhada nesses linkshttp://www.w3schools.com/sql/sql_join.asp
http://www.techonthenet.com/oracle/joins.php14 de julho de 2016 às 10:35 pm #108287Oracle DeveloperParticipanteFala luckzin,
Muito obrigado por responder a estas dúvidas. Rapidamente, sem querer abusar, se eu posso fazer um INNER JOIN entre duas tabelas por exemplo, e elas não precisam ter colunas em comum, como eu definiria isso na cláusula ‘ON’?
Por exemplo:
1. No lugar de utilizar:
INNER JOIN TABELA_PRODUTO ri
ON rc.ID_DO_CLIENTE = ri.ID_do_clienteEu poderia utilizar o que aqui?
INNER JOIN TABELA_PRODUTO ri
ON rc…. = ri….Essa é a minha dúvida. Vou dar uma estudada em modelagem de dados!
Obrigado mais uma vez,
14 de julho de 2016 às 11:05 pm #108288Paulo WerneckParticipanteQuando eu digo que não precisam ser em comum eu estou dizendo que elas não precisam estar relacionadas (Pode ser que isso seja um erro de modelagem, ou não), mas nada impede.
exemplo:
tabela1
id
nometabela2
codigo
estadocom isso pode ser feito uma consulta como:
select *
from tabela1
inner join tabela2 on (id=codigo)Obs: A sintaxe está correta, mas não quer dizer que a semântica tbm esteja, aí é questão de analise dos dados nos campos.
-
AutorPosts
- Você deve fazer login para responder a este tópico.