Boa tarde Chiappa e todos do grupo,

Com esta explicação entendi com certeza esta query, muito obrigado Chiappa pela 
aula, muito bem explicado, agora sim entendi, aliás como faço para ter mais 
aulas com você? rsrsrrsrs(tô brincando). Muito obrigado a todos pela atenção, 
abraços a todos.

Gerson Lima.


--- Em oracle_br@yahoogrupos.com.br, "J. Laurindo Chiappa" <jlchiappa@...> 
escreveu
>
>  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]
> >
>


Responder a