Verdade verdadeiríssima, Miltão... Gerson, quando eu dava treinamentos de SQL eu sempre usava como técnica didática a esquematização dos comandos, ie, tentava "quebrar" em diversas sub-partes lógicas, sempre achei que é interessante para aprendizado, E colocando em linhas separadas cada sub-parte, cada seção.... No caso de um JOIN, o esqueletão seria : SELECT colunasqueeuqueroexibirvindasdetodasastabelas FROM listadastabelasaseremjuntadas condiçõesdechaveentreastabelas vamos pensar nas duas primeiras linhas/seções que são mais fáceis de entender - recheando de carne o esqueleto/substiuindo pelo seu exemplo, chegaríamos em : SELECT cd_paciente, nm_paciente, ds_endereco, cd_etnia, nm_etnia FROM paciente, etnia ==> OU SEJA, eu olhei a tua lista de colunas de cada tabela e as copiei/colei no esqueleto, separadas por vírgulas, sim ?? NADA mais que isso...
Continuando, nem sempre é obrigatório mas é uma Excelente prática vc INDICAR no comando de qual tabela vem cada coluna, e a sintaxe para isso é separar o nome da tabela da respectiva coluna por um ponto, tipo : SELECT paciente.cd_paciente, paciente.nm_paciente, paciente.ds_endereco, etnia.cd_etnia, etnia.nm_etnia FROM paciente, etnia => legal ?? Porém, apesar de funcionar/ser aceita, essa opção de vc colocar o nome completo da tabela na frente de cada coluna faz vc digitar DEMAIS, é trabalhosa.... Então a outra opção aceita e muito mais usada é vc dar um APELIDO para cada tabela na linha do FROM, e colocar na frente de cada coluna o APELIDO correspondente - vamos dar os apelidos de A e de B para cada tabela ?? Aí ficaria assim : SELECT A.cd_paciente, A.nm_paciente, A.ds_endereco, B.cd_etnia, B.nm_etnia FROM paciente A, etnia B => até aqui, tranquilo ?? Tá vendo como o comando está se formando ??? Acompanhou até aqui ?? Para finalizar, vamos colocar a linha/seção que indica a CONDIÇÃO em que os dados devem ser juntados/lidos em cada tabela : a idéia é, vc NÂO QUER que para cada linha de cada paciente apareçam TODAS as etnias, vc quer APENAS a descrição da etnia correntemente sendo lida para o paciente atual , e (imagino, pelo jeitão das suas tabelas) que a informação, a Identificação da etnia corrente está na coluna CD_ETNIA, então é ESSA a chave, a condição a ser observada : indicando isso, o executor de SQLs do banco de dados já sabe que quando vc estiver lendo um paciente com, digamos, CD_ETNIA=1, é a descrição da etnia 1, aquela aonde CD_ETNIA é igual a 1 na tabela de etnia que virá... Depois, continuando a execução do comando SQL, quando o banco de dados vc ler um paciente com CD_ETNIA=2, é a descrição da tabela etnia aonde CD_ETNIA=2 que será trazida.... OU SEJA, o que vc quer é trazer da tabela etnia a descrição da etnia que seja IGUAL, que tenha o mesmo código, que a etnia do paciente sendo lido, sim ???? Há duas maneiras de vc indicar isso, uma é indicar com uma cláusula WHERE o que que tem que ser igual nas duas tabelas para a ligação entre elas : SELECT A.cd_paciente, A.nm_paciente, A.ds_endereco, B.cd_etnia, B.nm_etnia FROM paciente A, etnia B WHERE A.cd_etnia = B.cd_etnia; ==>> PRONTO !!! Executa isso e vc vai ter a sua resposta, sim ?? Muito difícil, ou deu pra acompanhar ??? Esta forma que eu mostrei acima, aonde vc só indica o que que tem que ser igual nas duas tabelas, é a forma originalmente usada no dialeto SQL do banco de dados Oracle.... Há uma segunda forma, que é vc indicar a operação de join além de indicar a coluna-chave, ficaria tipo : SELECT A.cd_paciente, A.nm_paciente, A.ds_endereco, B.cd_etnia, B.nm_etnia FROM paciente A join etnia B ON (A.cd_etnia = B.cd_etnia); ==> legal ??? Eu gosto mais da (e uso mais a) primeira forma , mas ambas funcionam, use aquela que gostar mais.... Espero que vc tenha captado a essência da coisa, e qquer dúvida, não hesite em nos mandar um copy/paste COMPLETO do que vc está tentando e das msgs que recebeu, BEM COMO uma descrição e uma explicação do que queria, que a gente discute em cima ... []s Chiappa OBS IMPORTANTE : que fique Claro, o que mostrei acima é o caso mais simples de JOIN, em que sempre há uma linha de dados na tabela B para cada linha correspondente na tabela A, o chamado EQUI-JOIN - claro que há casos aonde isso não é verdadeiro, aí vc tem que usar OUTROS tipos de joins... Dá um look em http://dwhlaureate.blogspot.com.br/2012/08/joins-in-oracle.html , por exemplo, para um overview dos diversos tipos de joins.... --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." <miltonbastos@...> escreveu > > Sem problema Gerson, estamos aqui pra ajudar.... > > Nesse caso vc precisa COPIAR e COLAR tudo que vc está fazendo. > Se nao deu certo, cole aqui pra gente o comando que vc usou e o erro que vc > recebeu, senão fica difícil a gente adivinhar! > > > > > 2013/7/12 gersonlima276 <gersonlim@...> > > > ** > > > > > > > > Ola Milton, > > eu li, mas quando faço aqui não da certo e eu não entendo direito a > > estrura desta query, desculpa ficar perguntando algo tão simples para > > vocês, mas não sei aonde estou errando. > > > > > > --- Em oracle_br@yahoogrupos.com.br, "Milton Bastos Henriquis Jr." > > <miltonbastos@> escreveu > > > > > > Gerson, vc já tinha perguntado isso em outro e-mail e nós já tínhamos > > > respondido, com o código prontinho pra vc... > > > Vc chegou a ler? > > > > > > > > > > > > 2013/7/12 gersonlima276 <gersonlim@> > > > > > > > ** > > > > > > > > > > > > > > Bom dia a todos, > > > > > > > > eu estou lendo algumas apostila para aprender sql e junto fazendo > > alguns > > > > exercício para entender melhor, mas ainda não entendi sobre inner > > join, eu > > > > dei um select aqui na empresa em duas tabela e esta assim: > > > > > > > > select * from paciente > > > > > > > > cd_paciente (21213) > > > > nm_paciente (Amaral Rodrigues) > > > > ds_endereço (Rua Jacu Pessego) > > > > cd_etnia (2) > > > > > > > > select * from etnia > > > > > > > > cd_etnia (2) > > > > nm_etnia (AMANAYE) > > > > > > > > eu estou fazendo um select para trazer a descrição da etnia(AMANAYE) > > > > > > > > perdoe a minha ignorância mas alguém pode me explicar com faço? > > > > > > > > Um grande abraço a todos vocês. > > > > > > > > > > > > --- Em oracle_br@yahoogrupos.com.br, Fabio Prado <fbifabio@> escreveu > > > > > > > > > > > > Gerson, > > > > > > > > > > (e) e (p) são apelidos das tabelas > > > > > > > > > > é uma boa prática atribuir apelidos curtos para as tabelas e > > referenciar > > > > os > > > > > nomes das colunas com o apelido na frente > > > > > > > > > > O exemplo que vc passou está incompleto. O correto seria como está > > > > escrito > > > > > abaixo: > > > > > > > > > > select e.name. p.valor as pagamento > > > > > from empregados as e > > > > > left join pagamentos p > > > > > ... > > > > > > > > > > Aconselho vc a fazer um curso de SQL básico. Veja o do link abaixo > > (não > > > > sei > > > > > se é bom, mas é gratuito): > > > > > > > > > > > > > > > > http://www.softblue.com.br/site/curso/id/3/CURSO+SQL+COMPLETO+BASICO+AO+AVANCADO+ON+LINE+BD03 > > > > > > > > > > []s > > > > > > > > > > Fábio Prado > > > > > www.fabioprado.net > > > > > > > > > > > > > > > > > > > > > > > > > 2013/7/11 gersonlima276 <gersonlim@> > > > > > > > > > > > > > > > ** > > > > > > > > > > > > > > > > > > Ola mestre do Oracle, > > > > > > > > > > > > tira uma dúvida, no select abaixo eu preciso saber sobre o > > significa a > > > > > > letra (e)(p) na frente do name e do valor, como entender isto? > > > > > > > > > > > > select e.name. p.valor as pagamento > > > > > > from empregados as left join pagamentos > > > > > > > > > > > > obrigado senhores!!! > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > Fábio Prado > > > > > www.fabioprado.net > > > > > "Compartilhando conhecimentos e treinando profissionais em Bancos de > > > > Dados > > > > > Oracle" > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > > > > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > > > > [As partes desta mensagem que não continham texto foram removidas] >