Nome:
Local: Rio de Janeiro, RJ, Brazil

Que perguntinha hein?! Mas vamos lá, adoro estudar assuntos relacionados à web, sempre que posso aprendo uma tecnologia, técnica ou linguagem nova. Tento sempre ver quais são as tendências e acompanha-las, enfim eu sou um eterno aprendiz. Deixando o lado profissional, entrando no lado pessoal, sou uma pessoa super gente-boa (pelo menos eu me acho. rs), adoro curtir a night, sair com os amigos, fazer novas amizades e viajar (tem coisa melhor do que isso?) Acho que você já está sabendo demais sobre mim. Fuiii...

segunda-feira, 21 de maio de 2007

INNER JOIN - SQL

Mudando um pouco de ares, irei falar de SQL (Structured Query Language), nesse post irei falar de uma função em que se ouve muito falar, apresento-lhe INNER JOIN. Vou considerar que você tenha alguma noção de SQL.

INNER JOIN


Em muitos casos, você poderá precisar apresentar um resultado o qual não está em apenas uma tabela, então você utiliza o INNER JOIN para fazer esse relacionamento das tabelas, fazendo da seguinte forma, como você sabe, ou deveria saber, quando duas tabelas estão interligadas, de alguma forma, precisa-se de um campo comum entre ambas (chave estrangeira).

Por exemplo:

Tenho uma escola com várias unidades e criei uma secretaria virtual. Nessa secretaria virtual, tenho os alunos cadastrados, porém eu preciso saber qual é a unidade em que esse aluno estuda. Possuímos aqui pelo menos duas tabelas, Aluno e Unidade, onde o relacionamento é um-para-muitos, porque um aluno só pode estar matriculado em uma unidade, porém uma unidade possui vários alunos. Eles se relacionam da seguinte forma, a tabela aluno tem um campo que se relaciona diretamente com o campo do código da unidade na tabela unidade, não sendo obrigatório os dois campos terem o mesmo nome, sendo apenas obrigatório os dois terem o mesmo tipo, se você não conhece SQL pode parecer complicado, mas posso assegurar-lhe que não é.

É nesse caso, em que o INNER JOIN vai ser usado, Veja:

$SQL = "SELECT Aluno.nome, Unidade.unidade";
Seleciona o campo nome da tabela aluno e campo unidade da tabela unidade

$SQL .= " FROM Aluno";
A origem é a tabela Aluno. Isso significa que a tabela Aluno é o lado UM de um relacionamento, e com isso, A pesquisa é feita mais rápida;Você poderia colocar a tabela Unidade como origem.

$SQL .= " INNER JOIN Unidade";
A tabela Aluno será ligada a tabela Unidade.

$SQL .= " ON Aluno.cod_unidade = Unidade.cod_unidade";
Faz-se aqui o relacionamento das tabelas.

$SQL .= " ORDER BY Aluno.Nome";
Coloquei que a pesquisa vai ser exibido na ordem alfabética dos nomes dos alunos.


Ps.: Fiz essa pesquisa com o php, por isso está lá um .=, pois isso no php significa que estou concatenando a string SQL.

*Foi um exemplo simples, claro que nesse exemplo precisaria de mais tabelas.

Junto com o INNER JOIN, existem ainda o LEFT JOIN e o RIGHT JOIN, que funcionam de maneira semelhante. O INNER JOIN, faz o relacionamento entre duas tabelas e depois exibe o que está nas duas tabelas, já o LEFT JOIN faz a mesma coisa, porém só exibe os dados da tabela da esquerda (a primeira tabela que foi declarada) e o RIGHT JOIN, dou-lhe uma bala juquinha se você acertar...

Exatamente o que você pensou, faz o mesmo que o LEFT JOIN, porém exibe apenas os dados da tabela da direita (a segunda tabela que foi declarada).
Com isso despeço-me, até a próxima

Fuiii...

Marcadores:

7 Comentários:

Blogger ramon disse...

Respondendo ao Marcelo da pergunta q ele fez em outro blog.

Marcelo disse:"Minha duvida eh sobre uma tabela consultar 2 vezes em outra. Assim Tabela Produtos e tabela grupos, a tabela produtos tem dois campos de grupos produtos.grupo01 e produtos.grupo02, preciso ver o nome (descriçao) do grupo.
Tipo assim :
Descricao do produto, descricao grupo01 e descricao grupo02."

Marcelo, sql é um tanto quanto dificil de explicar assim, pois existe toda uma realidade a ser analisada e eu também não entendi muito bem a sua dúvida, mas assim por alto a minha analise foi essa, creio que você está encarando o problema de forma errada, vc tem q fazer a conexão com uma chave estrangeira e não utilizar dois campos entres as tabelas como vc está fazendo, para fazer esse agrupamento existe a clausula group by, que vai fazer um agrupamento pelo campo em que os dois tenham em comum.
Exemplo:

SELECT descricao.produto, descricao.grupo
FROM Produto, descricao
INNER JOIN produto ON produto.chave_est = grupo.chave_est
GROUP BY nome_do_campo

fuiii...

3 de junho de 2007 às 19:22  
Anonymous Anônimo disse...

Admiro e agradeço imenso haver pessoas com o seu empenho.
Tenho uma questão (de principiante).
Tenho uma tabela onde registo movimentos diários, agora quero fazer uma consulta onde me apareçam os nomes dos códigos contantes dessa tabela (esses nomes estão em 4 tabelas diferentes). Penso que será com o INNER JOIN mas não consigo...(vitor.dls@hotmail.com)

22 de julho de 2008 às 15:33  
Blogger Douglas T. disse...

Kra... Show... tava me batendo 2 dias com um inner join, mudei para left join e funfou blza... valeu aih... otimo post.... abraxx

29 de agosto de 2008 às 18:32  
Blogger Sitolino disse...

Vlw pelo post!

28 de maio de 2009 às 14:43  
Anonymous Anônimo disse...

Oi,
Estou fazendo o curso de SQL e busco dicas, e veio sua página.
Obrigada pelas dicas.
Até mais,
Sam

11 de agosto de 2009 às 20:34  
Anonymous Anônimo disse...

muito bom as dicas do JOIN, bem explicativo...parabens.

19 de novembro de 2009 às 17:00  
Anonymous Anônimo disse...

Parabéns meu, tá muito bom!

No caso, vai ter dar a lista de todos os alunos da unidade?

Obrigado

11 de abril de 2012 às 08:05  

Postar um comentário

Assinar Postar comentários [Atom]

<< Página inicial