Maravilha, Gerson : fico contente de ter sido útil e ter conseguido ajudar a te esclarecer as suas dúvidas.... Eu não tenho previsão de ministrar treinamento por enquanto, mas não deixe de usar as muitas e boas refs que vc recebeu nesta thread, e as dúvidas que forem pintando na medida do possível a gente tenta esclarecer...
[]s Chiappa --- Em oracle_br@yahoogrupos.com.br, "gersonlima276" <gersonlim@...> escreveu > > > 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] > > > > > >